diff options
author | João Ferreiro <ferreiro@pinkroom.dev> | 2022-12-22 15:32:39 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-22 09:32:39 -0600 |
commit | 7517b65dcd676f36d38f31c991929c32168b3e12 (patch) | |
tree | 65793d2575b205365c2997b4bbddc1ba6424d2ba /__tests__/lib/link-meta.test.ts | |
parent | 4913a07e3365d2004e67e9131dd4b4c15094dd33 (diff) | |
download | voidsky-7517b65dcd676f36d38f31c991929c32168b3e12.tar.zst |
Unit testing (#32)
* add testing lib * remove coverage folder from git * finished basic test setup * fix tests typescript and import paths * add first snapshot * testing utils * rename test files; update script flags; ++tests * testing utils functions * testing downloadAndResize wip * remove download test * specify unwanted coverage paths; remove update snapshots flag * fix strings tests * testing downloadAndResize method * increasing testing * fixing snapshots wip * fixed shell mobile snapshot * adding snapshots for the screens * fix onboard snapshot * fix typescript issues * fix TabsSelector snapshot * Account for testing device's locale in ago() tests * Remove platform detection on regex Co-authored-by: Paul Frazee <pfrazee@gmail.com>
Diffstat (limited to '__tests__/lib/link-meta.test.ts')
-rw-r--r-- | __tests__/lib/link-meta.test.ts | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/__tests__/lib/link-meta.test.ts b/__tests__/lib/link-meta.test.ts new file mode 100644 index 000000000..5df5153ee --- /dev/null +++ b/__tests__/lib/link-meta.test.ts @@ -0,0 +1,146 @@ +import {LikelyType, getLinkMeta, getLikelyType} from '../../src/lib/link-meta' + +const exampleComHtml = `<!doctype html> +<html> +<head> + <title>Example Domain</title> + <meta name="description" content="An example website"> + + <meta charset="utf-8" /> + <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1" /> + <style type="text/css"> + body { + background-color: #f0f0f2; + margin: 0; + padding: 0; + font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; + + } + div { + width: 600px; + margin: 5em auto; + padding: 2em; + background-color: #fdfdff; + border-radius: 0.5em; + box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02); + } + a:link, a:visited { + color: #38488f; + text-decoration: none; + } + @media (max-width: 700px) { + div { + margin: 0 auto; + width: auto; + } + } + </style> +</head> + +<body> +<div> + <h1>Example Domain</h1> + <p>This domain is for use in illustrative examples in documents. You may use this + domain in literature without prior coordination or asking for permission.</p> + <p><a href="https://www.iana.org/domains/example">More information...</a></p> +</div> +</body> +</html>` + +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/text.txt', + 'https://example.com/javascript.js', + 'https://bsky.app/index.html', + ] + 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.Text, + url: 'https://example.com/text.txt', + }, + { + likelyType: LikelyType.Other, + url: 'https://example.com/javascript.js', + }, + { + likelyType: LikelyType.AtpData, + url: '/index.html', + title: 'Not found', + }, + { + likelyType: LikelyType.Other, + url: '', + title: '', + }, + ] + 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]) + } + }) +}) + +describe('getLikelyType', () => { + it('correctly handles non-parsed url', async () => { + const output = await getLikelyType('https://example.com') + expect(output).toEqual(LikelyType.HTML) + }) + + it('handles non-string urls without crashing', async () => { + const output = await getLikelyType('123') + expect(output).toEqual(LikelyType.Other) + }) +}) |