mtcute/packages/core/tests/links/chat-links.spec.ts

120 lines
4.7 KiB
TypeScript
Raw Normal View History

2023-10-22 23:42:10 +03:00
/* 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 }),
)
})
})
})