120 lines
4.7 KiB
TypeScript
120 lines
4.7 KiB
TypeScript
|
/* eslint-disable @typescript-eslint/no-unsafe-call */
|
||
|
import { expect } from 'chai'
|
||
|
import { describe, it } from 'mocha'
|
||
|
|
||
|
import { links } from '../../src/utils/links/index.js'
|
||
|
|
||
|
describe('Deep links', function () {
|
||
|
describe('Chat invite links', () => {
|
||
|
it('should generate t.me/+hash links', () => {
|
||
|
expect(links.chatInvite({ hash: 'hash' })).eq('https://t.me/+hash')
|
||
|
})
|
||
|
|
||
|
it('should generate tg://join?invite=hash links', () => {
|
||
|
expect(links.chatInvite({ hash: 'hash', protocol: 'tg' })).eq('tg://join?invite=hash')
|
||
|
})
|
||
|
|
||
|
it('should parse t.me/joinchat/hash links', () => {
|
||
|
expect(links.chatInvite.parse('https://t.me/joinchat/hash')).eql({ hash: 'hash' })
|
||
|
})
|
||
|
|
||
|
it('should parse t.me/+hash links', () => {
|
||
|
expect(links.chatInvite.parse('https://t.me/+hash')).eql({ hash: 'hash' })
|
||
|
})
|
||
|
|
||
|
it('should parse tg://join?invite=hash links', () => {
|
||
|
expect(links.chatInvite.parse('tg://join?invite=hash')).eql({ hash: 'hash' })
|
||
|
})
|
||
|
})
|
||
|
|
||
|
describe('Chat folder links', () => {
|
||
|
it('should generate t.me/addlist/slug links', () => {
|
||
|
expect(links.chatFolder({ slug: 'slug' })).eq('https://t.me/addlist/slug')
|
||
|
})
|
||
|
|
||
|
it('should generate tg://addlist?slug=slug links', () => {
|
||
|
expect(links.chatFolder({ slug: 'slug', protocol: 'tg' })).eq('tg://addlist?slug=slug')
|
||
|
})
|
||
|
|
||
|
it('should parse t.me/addlist/slug links', () => {
|
||
|
expect(links.chatFolder.parse('https://t.me/addlist/slug')).eql({ slug: 'slug' })
|
||
|
})
|
||
|
|
||
|
it('should parse tg://addlist?slug=slug links', () => {
|
||
|
expect(links.chatFolder.parse('tg://addlist?slug=slug')).eql({ slug: 'slug' })
|
||
|
})
|
||
|
})
|
||
|
|
||
|
describe('Message links', () => {
|
||
|
const result = (it: object) => {
|
||
|
return {
|
||
|
threadId: undefined,
|
||
|
commentId: undefined,
|
||
|
mediaTimestamp: undefined,
|
||
|
single: false,
|
||
|
...it,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
it('should generate t.me/username/id links', () => {
|
||
|
expect(links.message({ username: 'username', id: 123 })).eq('https://t.me/username/123')
|
||
|
expect(links.message({ username: 'username', threadId: 123, id: 456 })).eq('https://t.me/username/123/456')
|
||
|
})
|
||
|
|
||
|
it('should generate tg:// links', () => {
|
||
|
expect(links.message({ username: 'username', id: 123, protocol: 'tg' })).eq(
|
||
|
'tg://resolve?domain=username&post=123',
|
||
|
)
|
||
|
expect(links.message({ username: 'username', threadId: 123, id: 456, protocol: 'tg' })).eq(
|
||
|
'tg://resolve?domain=username&post=456&thread=123',
|
||
|
)
|
||
|
})
|
||
|
|
||
|
it('should generate t.me/c/channel/id links', () => {
|
||
|
expect(links.message({ channelId: 321, id: 123 })).eq('https://t.me/c/321/123')
|
||
|
expect(links.message({ channelId: 321, threadId: 123, id: 456 })).eq('https://t.me/c/321/123/456')
|
||
|
})
|
||
|
|
||
|
it('should generate tg://privatepost links', () => {
|
||
|
expect(links.message({ channelId: 321, id: 123, protocol: 'tg' })).eq(
|
||
|
'tg://privatepost?channel=321&post=123',
|
||
|
)
|
||
|
expect(links.message({ channelId: 321, threadId: 123, id: 456, protocol: 'tg' })).eq(
|
||
|
'tg://privatepost?channel=321&post=456&thread=123',
|
||
|
)
|
||
|
})
|
||
|
|
||
|
it('should parse t.me/username/id links', () => {
|
||
|
expect(links.message.parse('https://t.me/username/123')).eql(result({ username: 'username', id: 123 }))
|
||
|
})
|
||
|
|
||
|
it('should parse t.me/username/thread/id links', () => {
|
||
|
expect(links.message.parse('https://t.me/username/123/456')).eql(
|
||
|
result({ username: 'username', threadId: 123, id: 456 }),
|
||
|
)
|
||
|
})
|
||
|
|
||
|
it('should parse tg://resolve links', () => {
|
||
|
expect(links.message.parse('tg://resolve?domain=username&post=123')).eql(
|
||
|
result({ username: 'username', id: 123 }),
|
||
|
)
|
||
|
})
|
||
|
|
||
|
it('should parse t.me/c/channel/id links', () => {
|
||
|
expect(links.message.parse('https://t.me/c/666/123')).eql(result({ channelId: 666, id: 123 }))
|
||
|
})
|
||
|
|
||
|
it('should parse t.me/c/channel/thread/id links', () => {
|
||
|
expect(links.message.parse('https://t.me/c/666/123/456')).eql(
|
||
|
result({ channelId: 666, threadId: 123, id: 456 }),
|
||
|
)
|
||
|
})
|
||
|
|
||
|
it('should parse tg://privatepost links', () => {
|
||
|
expect(links.message.parse('tg://privatepost?channel=666&post=123')).eql(
|
||
|
result({ channelId: 666, id: 123 }),
|
||
|
)
|
||
|
})
|
||
|
})
|
||
|
})
|