diff --git a/src/contracts/IRedditResult.ts b/src/contracts/IRedditResult.ts index bf1e242..13fef75 100644 --- a/src/contracts/IRedditResult.ts +++ b/src/contracts/IRedditResult.ts @@ -8,6 +8,5 @@ export default interface IRedditResult { SubredditSubscribers: number, Title: string, Ups: number, - Url: string, - Gallery: string[], + Url: string } \ No newline at end of file diff --git a/src/helpers/imageHelper.ts b/src/helpers/imageHelper.ts index d2ac3b0..3da0fc9 100644 --- a/src/helpers/imageHelper.ts +++ b/src/helpers/imageHelper.ts @@ -2,23 +2,17 @@ import fetch from "got-cjs"; import * as htmlparser from "htmlparser2"; export default class ImageHelper { - public static async FetchImageFromRedditGallery(url: string): Promise { + public static async FetchImageFromRedditGallery(url: string): Promise { const fetched = await fetch(url); if (!fetched || fetched.errored || fetched.statusCode != 200) { - return []; + return undefined; } const dom = htmlparser.parseDocument(fetched.body); - const img = htmlparser.DomUtils.findAll((x => x.tagName == "img" && x.attributes.find(y => y.value.includes("https://preview.redd.it")) != null), dom.children); + const img = htmlparser.DomUtils.findOne((x => x.tagName == "img" && x.attributes.find(y => y.value.includes("https://preview.redd.it")) != null), dom.children, true); - if (!img) { - return []; - } - - const imgSrc = img - .flatMap(x => x.attributes.find(x => x.name == "src")?.value) - .filter(x => x != undefined); + const imgSrc = img?.attributes.find(x => x.name == "src")?.value; return imgSrc; } diff --git a/src/helpers/outputHelper.ts b/src/helpers/outputHelper.ts index b5009f4..808634d 100644 --- a/src/helpers/outputHelper.ts +++ b/src/helpers/outputHelper.ts @@ -22,10 +22,6 @@ export default class OutputHelper { outputLines.push(`Upvotes = ${result.Ups}`); outputLines.push(`Url = ${result.Url}`); - if (result.Gallery.length > 1) { - outputLines.push(`Gallery = ${result.Gallery.join(", ")}`); - } - if (options.queryMetadata != null) { outputLines.push(`Query.Subreddit = ${response.Query.subreddit}`); outputLines.push(`Query.Sort By = ${response.Query.sortBy}`); diff --git a/src/index.ts b/src/index.ts index b9ed5f9..056fe1f 100644 --- a/src/index.ts +++ b/src/index.ts @@ -93,7 +93,6 @@ export default async function randomBunny(subreddit: string, sortBy: "new" | "ho const randomData = randomSelect.data; let url: string; - let gallery: string[]; if (randomData.url.includes("/gallery")) { const galleryImage = await ImageHelper.FetchImageFromRedditGallery(randomData.url); @@ -113,11 +112,9 @@ export default async function randomBunny(subreddit: string, sortBy: "new" | "ho } } - url = galleryImage[0]; - gallery = galleryImage; + url = galleryImage; } else { url = randomData.url; - gallery = [randomData.url]; } const redditResult: IRedditResult = { @@ -131,7 +128,6 @@ export default async function randomBunny(subreddit: string, sortBy: "new" | "ho Title: randomData['title'], Ups: randomData['ups'], Url: url, - Gallery: gallery, }; return { diff --git a/tests/helpers/__snapshots__/outputHelper.test.ts.snap b/tests/helpers/__snapshots__/outputHelper.test.ts.snap index a3ad0e8..39e952e 100644 --- a/tests/helpers/__snapshots__/outputHelper.test.ts.snap +++ b/tests/helpers/__snapshots__/outputHelper.test.ts.snap @@ -13,7 +13,7 @@ Upvotes = 17 Url = https://preview.redd.it/d5yno653zf7d1.jpg?width=640&crop=smart&auto=webp&s=5064d1caec3c12ac2855eb57ff131d0b313d5e9d" `; -exports[`GenerateOutput GIVEN options.json is true, EXPECT output to be returned as JSON 1`] = `"{"Archived":false,"Author":"author","Downs":0,"Hidden":false,"Permalink":"/r/Rabbits/comments/1dj8pbt/this_is_my_ms_bear/","Subreddit":"Rabbits","SubredditSubscribers":654751,"Title":"This is my Ms Bear!","Ups":17,"Url":"https://preview.redd.it/d5yno653zf7d1.jpg?width=640&crop=smart&auto=webp&s=5064d1caec3c12ac2855eb57ff131d0b313d5e9d","Gallery":["https://preview.redd.it/d5yno653zf7d1.jpg?width=640&crop=smart&auto=webp&s=5064d1caec3c12ac2855eb57ff131d0b313d5e9d"]}"`; +exports[`GenerateOutput GIVEN options.json is true, EXPECT output to be returned as JSON 1`] = `"{"Archived":false,"Author":"author","Downs":0,"Hidden":false,"Permalink":"/r/Rabbits/comments/1dj8pbt/this_is_my_ms_bear/","Subreddit":"Rabbits","SubredditSubscribers":654751,"Title":"This is my Ms Bear!","Ups":17,"Url":"https://preview.redd.it/d5yno653zf7d1.jpg?width=640&crop=smart&auto=webp&s=5064d1caec3c12ac2855eb57ff131d0b313d5e9d"}"`; exports[`GenerateOutput GIVEN options.queryMetadata is supplied, EXPECT query metadata to be added 1`] = ` "Archived = false diff --git a/tests/helpers/imageHelper.test.ts b/tests/helpers/imageHelper.test.ts index 3eeb789..3c6f44e 100644 --- a/tests/helpers/imageHelper.test.ts +++ b/tests/helpers/imageHelper.test.ts @@ -17,19 +17,18 @@ describe("FetchImageFromRedditGallery", () => { expect(fetchMock).toHaveBeenCalledTimes(1); expect(fetchMock).toHaveBeenCalledWith("https://redd.it/gallery/image"); - expect(result.length).toBe(1); - expect(result[0]).toBe("https://preview.redd.it/image.png"); + expect(result).toBe("https://preview.redd.it/image.png"); }); - test("GIVEN fetch is unable to return data, EXPECT empty array returned", async () => { + test("GIVEN fetch is unable to return data, EXPECT undefined returned", async () => { fetchMock.mockResolvedValue(null); const result = await ImageHelper.FetchImageFromRedditGallery("https://redd.it/gallery/image"); - expect(result.length).toBe(0); + expect(result).toBeUndefined(); }); - test("GIVEN fetch is an error, EXPECT empty array returned", async () => { + test("GIVEN fetch is an error, EXPECT undefined returned", async () => { fetchMock.mockResolvedValue({ body: "", errored: "Error", @@ -38,10 +37,10 @@ describe("FetchImageFromRedditGallery", () => { const result = await ImageHelper.FetchImageFromRedditGallery("https://redd.it/gallery/image"); - expect(result.length).toBe(0); + expect(result).toBeUndefined(); }); - test("GIVEN fetch is not status code of 200, EXPECT empty array returned", async () => { + test("GIVEN fetch is not status code of 200, EXPECT undefined returned", async () => { fetchMock.mockResolvedValue({ body: "", errored: undefined, @@ -50,10 +49,10 @@ describe("FetchImageFromRedditGallery", () => { const result = await ImageHelper.FetchImageFromRedditGallery("https://redd.it/gallery/image"); - expect(result.length).toBe(0); + expect(result).toBeUndefined(); }); - test("GIVEN image tag is not found, EXPECT empty array returned", async () => { + test("GIVEN image tag is not found, EXPECT undefined returned", async () => { fetchMock.mockResolvedValue({ body: "", errored: undefined, @@ -62,10 +61,10 @@ describe("FetchImageFromRedditGallery", () => { const result = await ImageHelper.FetchImageFromRedditGallery("https://redd.it/gallery/image"); - expect(result.length).toBe(0); + expect(result).toBeUndefined(); }); - test("GIVEN image source attribute is not found, EXPECT empty array returned", async () => { + test("GIVEN image source attribute is not found, EXPECT undefined returned", async () => { fetchMock.mockResolvedValue({ body: "", errored: undefined, @@ -74,10 +73,10 @@ describe("FetchImageFromRedditGallery", () => { const result = await ImageHelper.FetchImageFromRedditGallery("https://redd.it/gallery/image"); - expect(result.length).toBe(0); + expect(result).toBeUndefined(); }); - test("GIVEN image source attribute is not found that is a preview.redd.it url, EXPECT empty array returned", async () => { + test("GIVEN image source attribute is not found that is a preview.redd.it url, EXPECT undefined returned", async () => { fetchMock.mockResolvedValue({ body: "", errored: undefined, @@ -86,6 +85,6 @@ describe("FetchImageFromRedditGallery", () => { const result = await ImageHelper.FetchImageFromRedditGallery("https://redd.it/gallery/image"); - expect(result.length).toBe(0); + expect(result).toBeUndefined(); }); }); \ No newline at end of file diff --git a/tests/helpers/outputHelper.test.ts b/tests/helpers/outputHelper.test.ts index 790d6e7..5e90dc8 100644 --- a/tests/helpers/outputHelper.test.ts +++ b/tests/helpers/outputHelper.test.ts @@ -23,7 +23,6 @@ describe("GenerateOutput", () => { Title: "This is my Ms Bear!", Ups: 17, Url: "https://preview.redd.it/d5yno653zf7d1.jpg?width=640&crop=smart&auto=webp&s=5064d1caec3c12ac2855eb57ff131d0b313d5e9d", - Gallery: ["https://preview.redd.it/d5yno653zf7d1.jpg?width=640&crop=smart&auto=webp&s=5064d1caec3c12ac2855eb57ff131d0b313d5e9d"], }, } as IReturnResult; @@ -56,7 +55,6 @@ describe("GenerateOutput", () => { Title: "This is my Ms Bear!", Ups: 17, Url: "https://preview.redd.it/d5yno653zf7d1.jpg?width=640&crop=smart&auto=webp&s=5064d1caec3c12ac2855eb57ff131d0b313d5e9d", - Gallery: ["https://preview.redd.it/d5yno653zf7d1.jpg?width=640&crop=smart&auto=webp&s=5064d1caec3c12ac2855eb57ff131d0b313d5e9d"], }, } as IReturnResult; @@ -91,7 +89,6 @@ describe("GenerateOutput", () => { Title: "This is my Ms Bear!", Ups: 17, Url: "https://preview.redd.it/d5yno653zf7d1.jpg?width=640&crop=smart&auto=webp&s=5064d1caec3c12ac2855eb57ff131d0b313d5e9d", - Gallery: ["https://preview.redd.it/d5yno653zf7d1.jpg?width=640&crop=smart&auto=webp&s=5064d1caec3c12ac2855eb57ff131d0b313d5e9d"], }, } as IReturnResult;