* Remove the hackcheck for upgrades * Rename the PostEmbeds folder to match the codebase style * Updates to latest lex refactor * Update to use new bsky agent * Update to use api package's richtext library * Switch to upsertProfile * Add TextEncoder/TextDecoder polyfill * Add Intl.Segmenter polyfill * Update composer to calculate lengths by grapheme * Fix detox * Fix login in e2e * Create account e2e passing * Implement an e2e mocking framework * Don't use private methods on mobx models as mobx can't track them * Add tooling for e2e-specific builds and add e2e media-picker mock * Add some tests and fix some bugs around profile editing * Add shell tests * Add home screen tests * Add thread screen tests * Add tests for other user profile screens * Add search screen tests * Implement profile imagery change tools and tests * Update to new embed behaviors * Add post tests * Fix to profile-screen test * Fix session resumption * Update web composer to new api * 1.11.0 * Fix pagination cursor parameters * Add quote posts to notifications * Fix embed layouts * Remove youtube inline player and improve tap handling on link cards * Reset minimal shell mode on all screen loads and feed swipes (close #299) * Update podfile.lock * Improve post notfound UI (close #366) * Bump atproto packages
118 lines
2.9 KiB
TypeScript
118 lines
2.9 KiB
TypeScript
import {
|
|
LikelyType,
|
|
getLinkMeta,
|
|
getLikelyType,
|
|
} from '../../src/lib/link-meta/link-meta'
|
|
import {exampleComHtml} from './__mocks__/exampleComHtml'
|
|
import {BskyAgent} from '@atproto/api'
|
|
import {DEFAULT_SERVICE, RootStoreModel} from '../../src/state'
|
|
|
|
describe('getLinkMeta', () => {
|
|
let rootStore: RootStoreModel
|
|
|
|
beforeEach(() => {
|
|
rootStore = new RootStoreModel(new BskyAgent({service: DEFAULT_SERVICE}))
|
|
})
|
|
|
|
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/',
|
|
'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: '/',
|
|
title: 'Bluesky',
|
|
description: 'A new kind of social network',
|
|
},
|
|
{
|
|
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(rootStore, 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)
|
|
})
|
|
})
|