You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

43 lines
1.3 KiB

import { describe, expect, it } from 'vitest'
import { kinds, finalizeEvent, generateSecretKey } from 'nostr-tools'
import { parseJsonlCacheImportText, parsePastedCacheImportJson } from './cache-event-import'
function signedNote(content: string) {
const sk = generateSecretKey()
return finalizeEvent(
{
kind: kinds.ShortTextNote,
created_at: Math.floor(Date.now() / 1000),
tags: [],
content
},
sk
)
}
describe('parsePastedCacheImportJson', () => {
it('accepts a single signed event object', () => {
const ev = signedNote('hello')
const { events, issues } = parsePastedCacheImportJson(JSON.stringify(ev))
expect(issues).toHaveLength(0)
expect(events).toHaveLength(1)
expect(events[0].id).toBe(ev.id)
})
it('rejects invalid JSON', () => {
const { events, issues } = parsePastedCacheImportJson('{not json')
expect(events).toHaveLength(0)
expect(issues[0].message).toMatch(/Invalid JSON/i)
})
})
describe('parseJsonlCacheImportText', () => {
it('parses one event per line', () => {
const a = signedNote('a')
const b = signedNote('b')
const text = `${JSON.stringify(a)}\n${JSON.stringify(b)}\n`
const { events, issues } = parseJsonlCacheImportText(text)
expect(issues).toHaveLength(0)
expect(events).toHaveLength(2)
})
})