diff --git a/packages/thumbnail-handler/package.json b/packages/thumbnail-handler/package.json index 9dbcb53bb..f782a7c29 100644 --- a/packages/thumbnail-handler/package.json +++ b/packages/thumbnail-handler/package.json @@ -17,7 +17,8 @@ "devDependencies": { "chai": "^4.3.6", "eslint-plugin-prettier": "^4.0.0", - "mocha": "^10.0.0" + "mocha": "^10.0.0", + "nock": "^13.3.1" }, "dependencies": { "@google-cloud/functions-framework": "3.1.2", diff --git a/packages/thumbnail-handler/src/index.ts b/packages/thumbnail-handler/src/index.ts index bd7b68d01..8ce56ad33 100644 --- a/packages/thumbnail-handler/src/index.ts +++ b/packages/thumbnail-handler/src/index.ts @@ -158,8 +158,10 @@ const getImageSize = async (url: string): Promise<[number, number] | null> => { } } -// credit to https://github.com/reddit-archive/reddit/blob/753b17407e9a9dca09558526805922de24133d53/r2/r2/lib/media.py#L706 -const findThumbnail = async (content: string): Promise => { +// credit: https://github.com/reddit-archive/reddit/blob/753b17407e9a9dca09558526805922de24133d53/r2/r2/lib/media.py#L706 +export const findThumbnail = async ( + content: string +): Promise => { const dom = parseHTML(content).document // find the largest and squarest image as the thumbnail diff --git a/packages/thumbnail-handler/test/fixtures/findThumbnail.html b/packages/thumbnail-handler/test/fixtures/findThumbnail.html new file mode 100644 index 000000000..66192deac --- /dev/null +++ b/packages/thumbnail-handler/test/fixtures/findThumbnail.html @@ -0,0 +1,9 @@ +
+ small image + + large and square image + + wide image + + sprite image +
diff --git a/packages/thumbnail-handler/test/fixtures/large_and_square.png b/packages/thumbnail-handler/test/fixtures/large_and_square.png new file mode 100644 index 000000000..4c4992af7 Binary files /dev/null and b/packages/thumbnail-handler/test/fixtures/large_and_square.png differ diff --git a/packages/thumbnail-handler/test/fixtures/small.png b/packages/thumbnail-handler/test/fixtures/small.png new file mode 100644 index 000000000..930657193 Binary files /dev/null and b/packages/thumbnail-handler/test/fixtures/small.png differ diff --git a/packages/thumbnail-handler/test/fixtures/sprite.png b/packages/thumbnail-handler/test/fixtures/sprite.png new file mode 100644 index 000000000..4c4992af7 Binary files /dev/null and b/packages/thumbnail-handler/test/fixtures/sprite.png differ diff --git a/packages/thumbnail-handler/test/fixtures/wide.png b/packages/thumbnail-handler/test/fixtures/wide.png new file mode 100644 index 000000000..232acac91 Binary files /dev/null and b/packages/thumbnail-handler/test/fixtures/wide.png differ diff --git a/packages/thumbnail-handler/test/index.test.ts b/packages/thumbnail-handler/test/index.test.ts new file mode 100644 index 000000000..575cfc87d --- /dev/null +++ b/packages/thumbnail-handler/test/index.test.ts @@ -0,0 +1,30 @@ +import { expect } from 'chai' +import fs from 'fs' +import 'mocha' +import nock from 'nock' +import path from 'path' +import { findThumbnail } from '../src' + +describe('findThumbnail', () => { + it('finds the largest and squarest image', async () => { + const images = ['large_and_square', 'small', 'sprite', 'wide'] + // mock getting image by url + images.forEach((image) => { + nock('https://omnivore.app') + .get(`/${image}.png`) + .replyWithFile(200, path.join(__dirname, 'fixtures', `${image}.png`)) + }) + // get html content from file + const content = fs.readFileSync( + path.join(__dirname, 'fixtures', 'findThumbnail.html'), + 'utf8' + ) + // find thumbnail + const thumbnail = await findThumbnail(content) + + expect(thumbnail).to.eql('https://omnivore.app/large_and_square.png') + + // clean up + nock.cleanAll() + }) +}) diff --git a/packages/thumbnail-handler/test/stub.test.ts b/packages/thumbnail-handler/test/stub.test.ts deleted file mode 100644 index 24ad25c8f..000000000 --- a/packages/thumbnail-handler/test/stub.test.ts +++ /dev/null @@ -1,8 +0,0 @@ -import 'mocha' -import { expect } from 'chai' - -describe('stub test', () => { - it('should pass', () => { - expect(true).to.be.true - }) -})