import { assertEquals } from "@std/assert"; import { withBerry } from "./testing.ts"; Deno.test("a first snapshot shows as its older entries arrive, and a later one only once it is whole", async () => { await withBerry(async ({ server: { deliver } }) => { const { watch } = await import("./client.ts"); deliver({ t: "ready" }); const topic = "conversation:a"; const seen: number[][] = []; const release = watch<{ entries: { id: number }[] }>(topic, ({ entries }) => { seen.push(entries.map((entry) => entry.id)); }); const entries = (...ids: number[]) => ids.map((id) => ({ id })); deliver({ t: "snapshot", topic, value: { entries: entries(3) }, older: 2 }); deliver({ t: "older", topic, entries: entries(2) }); deliver({ t: "older", topic, entries: entries(1) }); assertEquals(seen, [[3], [2, 3], [1, 2, 3]]); // as after a reconnect: the topic is asked for again, and has what it had meanwhile deliver({ t: "ready" }); deliver({ t: "snapshot", topic, value: { entries: entries(4) }, older: 3 }); deliver({ t: "older", topic, entries: entries(2, 3) }); assertEquals(seen.length, 3); deliver({ t: "older", topic, entries: entries(1) }); assertEquals(seen.at(-1), [1, 2, 3, 4]); assertEquals(seen.length, 4); release(); }); });