From 89638dbd188023851e67d818dcd4c23204e3c70c Mon Sep 17 00:00:00 2001 From: Paul Frazee Date: Wed, 23 Nov 2022 16:29:17 -0600 Subject: Implement a link metadata fetching util function --- __tests__/link-meta-utils.ts | 118 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 __tests__/link-meta-utils.ts (limited to '__tests__/link-meta-utils.ts') diff --git a/__tests__/link-meta-utils.ts b/__tests__/link-meta-utils.ts new file mode 100644 index 000000000..f6cf8b4fd --- /dev/null +++ b/__tests__/link-meta-utils.ts @@ -0,0 +1,118 @@ +import {LikelyType, getLinkMeta} from '../src/lib/link-meta' + +const exampleComHtml = ` + + + Example Domain + + + + + + + + + +
+

Example Domain

+

This domain is for use in illustrative examples in documents. You may use this + domain in literature without prior coordination or asking for permission.

+

More information...

+
+ +` + +describe('getLinkMeta', () => { + const inputs = [ + '', + 'httpbadurl', + 'https://example.com', + 'https://example.com/index.html', + 'https://example.com/image.png', + 'https://example.com/video.avi', + 'https://example.com/audio.ogg', + 'https://example.com/javascript.js', + ] + const outputs = [ + { + error: 'Invalid URL', + likelyType: LikelyType.Other, + url: '', + }, + { + error: 'Invalid URL', + likelyType: LikelyType.Other, + url: 'httpbadurl', + }, + { + likelyType: LikelyType.HTML, + url: 'https://example.com', + title: 'Example Domain', + description: 'An example website', + }, + { + likelyType: LikelyType.HTML, + url: 'https://example.com/index.html', + title: 'Example Domain', + description: 'An example website', + }, + { + likelyType: LikelyType.Image, + url: 'https://example.com/image.png', + }, + { + likelyType: LikelyType.Video, + url: 'https://example.com/video.avi', + }, + { + likelyType: LikelyType.Audio, + url: 'https://example.com/audio.ogg', + }, + { + likelyType: LikelyType.Other, + url: 'https://example.com/javascript.js', + }, + ] + it('correctly handles a set of text inputs', async () => { + for (let i = 0; i < inputs.length; i++) { + global.fetch = jest.fn().mockImplementationOnce(() => { + return new Promise((resolve, reject) => { + resolve({ + ok: true, + status: 200, + text: () => exampleComHtml, + }) + }) + }) + const input = inputs[i] + const output = await getLinkMeta(input) + expect(output).toEqual(outputs[i]) + } + }) +}) -- cgit 1.4.1