78 lines
4.0 KiB
TypeScript
78 lines
4.0 KiB
TypeScript
import { test, expect } from 'bun:test'
|
|
import { parse } from './nip27.ts'
|
|
|
|
test('first: parse simple content with 1 url and 1 nostr uri', () => {
|
|
const content = `nostr:npub1hpslpc8c5sp3e2nhm2fr7swsfqpys5vyjar5dwpn7e7decps6r8qkcln63 check out my profile:nostr:npub1xtscya34g58tk0z605fvr788k263gsu6cy9x0mhnm87echrgufzsevkk5s; and this cool image https://images.com/image.jpg`
|
|
const blocks = Array.from(parse(content))
|
|
|
|
expect(blocks).toEqual([
|
|
{ type: 'reference', pointer: { pubkey: 'b861f0e0f8a4031caa77da923f41d04802485184974746b833f67cdce030d0ce' } },
|
|
{ type: 'text', text: ' check out my profile:' },
|
|
{ type: 'reference', pointer: { pubkey: '32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245' } },
|
|
{ type: 'text', text: '; and this cool image ' },
|
|
{ type: 'image', url: 'https://images.com/image.jpg' },
|
|
])
|
|
})
|
|
|
|
test('second: parse content with 3 urls of different types', () => {
|
|
const content = `:wss://oa.ao; this was a relay and now here's a video -> https://videos.com/video.mp4! and some music:
|
|
http://music.com/song.mp3
|
|
and a regular link: https://regular.com/page?ok=true. and now a broken link: https://kjxkxk and a broken nostr ref: nostr:nevent1qqsr0f9w78uyy09qwmjt0kv63j4l7sxahq33725lqyyp79whlfjurwspz4mhxue69uhh56nzv34hxcfwv9ehw6nyddhq0ag9xg and a fake nostr ref: nostr:llll ok but finally https://ok.com!`
|
|
const blocks = Array.from(parse(content))
|
|
|
|
expect(blocks).toEqual([
|
|
{ type: 'text', text: ':' },
|
|
{ type: 'relay', url: 'wss://oa.ao/' },
|
|
{ type: 'text', text: "; this was a relay and now here's a video -> " },
|
|
{ type: 'video', url: 'https://videos.com/video.mp4' },
|
|
{ type: 'text', text: '! and some music:\n' },
|
|
{ type: 'audio', url: 'http://music.com/song.mp3' },
|
|
{ type: 'text', text: '\nand a regular link: ' },
|
|
{ type: 'url', url: 'https://regular.com/page?ok=true' },
|
|
{
|
|
type: 'text',
|
|
text: '. and now a broken link: https://kjxkxk and a broken nostr ref: nostr:nevent1qqsr0f9w78uyy09qwmjt0kv63j4l7sxahq33725lqyyp79whlfjurwspz4mhxue69uhh56nzv34hxcfwv9ehw6nyddhq0ag9xg and a fake nostr ref: nostr:llll ok but finally ',
|
|
},
|
|
{ type: 'url', url: 'https://ok.com/' },
|
|
{ type: 'text', text: '!' },
|
|
])
|
|
})
|
|
|
|
test('third: parse complex content with 4 nostr uris and 3 urls', () => {
|
|
const content = `Look at these profiles nostr:npub1xtscya34g58tk0z605fvr788k263gsu6cy9x0mhnm87echrgufzsevkk5s nostr:nprofile1qqs8z4gwdjp6jwqlxhzk35dgpcgl50swljtal58q796f9ghdkexr02gppamhxue69uhhzamfv46jucm0d574e4uy check this event nostr:nevent1qqsr0f9w78uyy09qwmjt0kv63j4l7sxahq33725lqyyp79whlfjurwspz4mhxue69uhh56nzv34hxcfwv9ehw6nyddhq0ag9xl
|
|
here's an image https://example.com/pic.png and another profile nostr:npub1xtscya34g58tk0z605fvr788k263gsu6cy9x0mhnm87echrgufzsevkk5s
|
|
with a video https://example.com/vid.webm and finally https://example.com/docs`
|
|
const blocks = Array.from(parse(content))
|
|
|
|
expect(blocks).toEqual([
|
|
{ type: 'text', text: 'Look at these profiles ' },
|
|
{ type: 'reference', pointer: { pubkey: '32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245' } },
|
|
{ type: 'text', text: ' ' },
|
|
{
|
|
type: 'reference',
|
|
pointer: {
|
|
pubkey: '71550e6c83a9381f35c568d1a80e11fa3e0efc97dfd0e0f17492a2edb64c37a9',
|
|
relays: ['wss://qwieu.com'],
|
|
},
|
|
},
|
|
{ type: 'text', text: ' check this event ' },
|
|
{
|
|
type: 'reference',
|
|
pointer: {
|
|
id: '37a4aef1f8423ca076e4b7d99a8cabff40ddb8231f2a9f01081f15d7fa65c1ba',
|
|
relays: ['wss://zjbdksa.aswjdkn'],
|
|
author: undefined,
|
|
kind: undefined,
|
|
},
|
|
},
|
|
{ type: 'text', text: "\n here's an image " },
|
|
{ type: 'image', url: 'https://example.com/pic.png' },
|
|
{ type: 'text', text: ' and another profile ' },
|
|
{ type: 'reference', pointer: { pubkey: '32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245' } },
|
|
{ type: 'text', text: '\n with a video ' },
|
|
{ type: 'video', url: 'https://example.com/vid.webm' },
|
|
{ type: 'text', text: ' and finally ' },
|
|
{ type: 'url', url: 'https://example.com/docs' },
|
|
])
|
|
})
|