This release is 23 versions behind 1.4.9 — the latest version of @fedify/fedify. Jump to latest
Built and signed on GitHub ActionsBuilt and signed on GitHub Actions
Built and signed on GitHub Actions
An ActivityPub/fediverse server framework
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980import { assertEquals, assertGreater } from "jsr:@std/assert@^0.226.0"; import { delay } from "jsr:/@std/async@^1.0.5/delay"; import { test } from "../testing/mod.ts"; import { DenoKvMessageQueue, DenoKvStore } from "./denokv.ts"; test("DenoKvStore", async (t) => { const kv = await Deno.openKv(":memory:"); const store = new DenoKvStore(kv); await t.step("get()", async () => { await kv.set(["foo", "bar"], "foobar"); assertEquals(await store.get(["foo", "bar"]), "foobar"); }); await t.step("set()", async () => { await store.set(["foo", "baz"], "baz"); assertEquals((await kv.get<string>(["foo", "baz"])).value, "baz"); }); await t.step("delete()", async () => { await store.delete(["foo", "baz"]); assertEquals((await kv.get<string>(["foo", "baz"])).value, null); }); kv.close(); }); test("DenoKvMessageQueue", async (t) => { const kv = await Deno.openKv(":memory:"); const mq = new DenoKvMessageQueue(kv); const messages: string[] = []; const controller = new AbortController(); const listening = mq.listen((message: string) => { messages.push(message); }, controller); await t.step("enqueue()", async () => { await mq.enqueue("Hello, world!"); }); await waitFor(() => messages.length > 0, 15_000); await t.step("listen()", () => { assertEquals(messages, ["Hello, world!"]); }); let started = 0; await t.step("enqueue() with delay", async () => { started = Date.now(); await mq.enqueue( "Delayed message", { delay: Temporal.Duration.from({ seconds: 3 }) }, ); }); await waitFor(() => messages.length > 1, 15_000); await t.step("listen() with delay", () => { assertEquals(messages, ["Hello, world!", "Delayed message"]); assertGreater(Date.now() - started, 3_000); }); controller.abort(); await listening; mq[Symbol.dispose](); }); async function waitFor( predicate: () => boolean, timeoutMs: number, ): Promise<void> { const started = Date.now(); while (!predicate()) { await delay(500); if (Date.now() - started > timeoutMs) { throw new Error("Timeout"); } } }