import { describe, expect, test } from "bun:test"; import { Database } from "bun:sqlite"; import { forwardFlushed } from "./counters-forward"; describe("forwardFlushed", () => { test("forwards only what each row gained since its last flush", async () => { const db = new Database(":memory:"); db.run("CREATE TABLE counters (key TEXT PRIMARY KEY, base_a INTEGER, base_b INTEGER, base_c INTEGER)"); db.run("INSERT INTO counters VALUES ('2026-10-12', 10, 100, 0), ('2026-10-13', 5, 5, 5)"); const sql = { exec: (query: string, ...params: Array) => { const rows = db.query(query).all(...params); return { toArray: () => rows }; }, } as unknown as SqlStorage; const added: Array<[string, number[]]> = []; const namespace = { idFromName: (name: string) => name, get: () => ({ add: async (_kind: string, _scope: string, key: string, delta: number[]) => void added.push([key, delta]), }), } as unknown as DurableObjectNamespace; await forwardFlushed(sql, namespace, { kind: "platform-sites", scope: "global" }, [ { key: "2026-10-12", a: 12, b: 150, c: 0 }, { key: "2026-10-13", a: 5, b: 5, c: 5 }, { key: "2026-10-14", a: 1, b: 2, c: 3 }, ]); expect(added).toEqual([ ["2026-10-12", [2, 50, 0]], ["2026-10-14", [1, 2, 3]], ]); }); });