clone

tiny dependency-free nostr libraries for plain html, each under 5kb and named for an element. public domain

main
nobel / test / argon.test.js
argon.test.js 2.2K
1import "npm:fake-indexeddb@6/auto";2import { assert, assertEquals } from "jsr:@std/assert@1";3import "../argon/argon.js";45const { argon } = globalThis;6const A = "a".repeat(64), B = "b".repeat(64);7let n = 0;8const ev = (o) => ({ id: (++n).toString(16).padStart(64, "0"), pubkey: A, kind: 1, created_at: 1000 + n, tags: [], content: "", sig: "", ...o });910Deno.test("argon", async (t) => {11 await argon.remove();1213 await t.step("stores and queries newest first with limits", async () => {14 const es = [ev({}), ev({}), ev({ pubkey: B }), ev({ kind: 7, tags: [["e", "x"]] })];15 for (const e of es) assert(await argon.put(e));16 assertEquals((await argon.query([{ kinds: [1] }])).map((e) => e.id), [es[2].id, es[1].id, es[0].id]);17 assertEquals((await argon.query([{ kinds: [1], authors: [A], limit: 1 }])).map((e) => e.id), [es[1].id]);18 assertEquals((await argon.query([{ "#e": ["x"] }])).map((e) => e.id), [es[3].id]);19 assertEquals((await argon.query([{ since: es[1].created_at, until: es[2].created_at }])).length, 2);20 assertEquals((await argon.query([{ kinds: [7] }, { authors: [B] }])).length, 2);21 });2223 await t.step("keeps only the newest replaceable and addressable events", async () => {24 const old = ev({ kind: 0, content: "old" }), neu = ev({ kind: 0, content: "new" });25 assert(await argon.put(neu));26 assert(!(await argon.put(old)));27 assertEquals((await argon.query([{ kinds: [0] }])).map((e) => e.content), ["new"]);28 const a1 = ev({ kind: 30023, tags: [["d", "x"]] }), a2 = ev({ kind: 30023, tags: [["d", "x"]] }), a3 = ev({ kind: 30023, tags: [["d", "y"]] });29 for (const e of [a1, a2, a3]) await argon.put(e);30 assertEquals((await argon.query([{ kinds: [30023] }])).map((e) => e.id), [a3.id, a2.id]);31 });3233 await t.step("skips ephemeral events and honors deletions from the author", async () => {34 assert(!(await argon.put(ev({ kind: 20001 }))));35 const mine = ev({}), theirs = ev({ pubkey: B });36 await argon.put(mine); await argon.put(theirs);37 await argon.put(ev({ kind: 5, tags: [["e", mine.id], ["e", theirs.id]] }));38 const ids = (await argon.query([{ ids: [mine.id, theirs.id] }])).map((e) => e.id);39 assertEquals(ids, [theirs.id]);40 });41});