snort/packages/nostr/test/deletion.ts
ennmichael 4c6b7edecf
test
2023-04-04 22:07:13 +02:00

73 lines
2.2 KiB
TypeScript

import { EventKind } from "../src/event"
import { parsePublicKey } from "../src/crypto"
import assert from "assert"
import { setup } from "./setup"
import { createTextNote } from "../src/event/text"
import { createDeletion } from "../src/event/deletion"
describe("deletion", () => {
// Test that a deletion event deletes existing events. Test that the deletion event
// is propagated to subscribers.
it("deletes existing events", (done) => {
setup(
done,
({
publisher,
publisherSecret,
publisherPubkey,
subscriber,
timestamp,
done,
}) => {
// The event ID to delete.
let textNoteId: string
// The deletion event ID.
let deletionId: string
// Expect the deletion event (and not the text note event).
subscriber.on("event", ({ event }) => {
assert.strictEqual(event.kind, EventKind.Deletion)
assert.strictEqual(event.id, deletionId)
assert.strictEqual(event.pubkey, parsePublicKey(publisherPubkey))
assert.strictEqual(event.created_at, timestamp)
assert.strictEqual(event.content, "")
if (event.kind === EventKind.Deletion) {
assert.deepStrictEqual(event.getEvents(), [textNoteId])
}
done()
})
createTextNote("hello world", publisherSecret).then((textNote) => {
textNoteId = textNote.id
publisher.publish({
...textNote,
created_at: timestamp,
})
})
publisher.on("ok", async ({ eventId, ok }) => {
assert.strictEqual(ok, true)
if (eventId === textNoteId) {
// After the text note has been published, delete it.
const deletion = await createDeletion(
{ events: [textNoteId] },
publisherSecret
)
deletionId = deletion.id
publisher.publish({
...deletion,
created_at: timestamp,
})
}
if (eventId === deletionId) {
// After the deletion has been published, subscribe to the publisher.
subscriber.subscribe([])
}
})
}
)
})
})