Files
nostr-tools/nip18.test.js
2023-05-07 08:52:18 -03:00

120 lines
3.3 KiB
JavaScript

/* eslint-env jest */
const {nip18, finishEvent, getPublicKey, Kind} = require('./lib/nostr.cjs')
const relayUrl = 'https://relay.example.com'
describe('finishRepostEvent + getRepostedEventPointer + getRepostedEvent', () => {
const privateKey =
'd217c1ff2f8a65c3e3a1740db3b9f58b8c848bb45e26d00ed4714e4a0f4ceecf'
const publicKey = getPublicKey(privateKey)
const repostedEvent = finishEvent({
kind: Kind.Text,
tags: [
['e', 'replied event id'],
['p', 'replied event pubkey'],
],
content: 'Replied to a post',
created_at: 1617932115
}, privateKey)
it('should create a signed event from a minimal template', () => {
const template = {
created_at: 1617932115
}
const event = nip18.finishRepostEvent(template, repostedEvent, relayUrl, privateKey)
expect(event.kind).toEqual(Kind.Repost)
expect(event.tags).toEqual([
[
'e',
repostedEvent.id,
relayUrl,
],
[
'p',
repostedEvent.pubkey,
],
])
expect(event.content).toEqual(JSON.stringify(repostedEvent))
expect(event.created_at).toEqual(template.created_at)
expect(event.pubkey).toEqual(publicKey)
expect(typeof event.id).toEqual('string')
expect(typeof event.sig).toEqual('string')
const repostedEventPointer = nip18.getRepostedEventPointer(event)
expect(repostedEventPointer.id).toEqual(repostedEvent.id)
expect(repostedEventPointer.author).toEqual(repostedEvent.pubkey)
expect(repostedEventPointer.relays).toEqual([ relayUrl ])
const repostedEventFromContent = nip18.getRepostedEvent(event)
expect(repostedEventFromContent).toEqual(repostedEvent)
})
it('should create a signed event from a filled template', () => {
const template = {
tags: [
['nonstandard', 'tag'],
],
content: '',
created_at: 1617932115
}
const event = nip18.finishRepostEvent(template, repostedEvent, relayUrl, privateKey)
expect(event.kind).toEqual(Kind.Repost)
expect(event.tags).toEqual([
[
'nonstandard',
'tag',
],
[
'e',
repostedEvent.id,
relayUrl,
],
[
'p',
repostedEvent.pubkey,
],
])
expect(event.content).toEqual('')
expect(event.created_at).toEqual(template.created_at)
expect(event.pubkey).toEqual(publicKey)
expect(typeof event.id).toEqual('string')
expect(typeof event.sig).toEqual('string')
const repostedEventPointer = nip18.getRepostedEventPointer(event)
expect(repostedEventPointer.id).toEqual(repostedEvent.id)
expect(repostedEventPointer.author).toEqual(repostedEvent.pubkey)
expect(repostedEventPointer.relays).toEqual([ relayUrl ])
const repostedEventFromContent = nip18.getRepostedEvent(event)
expect(repostedEventFromContent).toEqual(undefined)
})
})
describe('getRepostedEventPointer', () => {
it('should parse an event with only an `e` tag', () => {
const event = {
kind: Kind.Repost,
tags: [
['e', 'reposted event id', relayUrl],
],
}
const repostedEventPointer = nip18.getRepostedEventPointer(event)
expect(repostedEventPointer.id).toEqual('reposted event id')
expect(repostedEventPointer.author).toEqual(undefined)
expect(repostedEventPointer.relays).toEqual([ relayUrl ])
})
})