import { describe, it, expect } from "bun:test"; import { kvMessageTracker } from "../server/lib/lib/message-tracker"; function createMockKV(): KVNamespace { const store = new Map(); const ttl = new Map(); return { get: async (key: string) => (store.has(key) ? store.get(key)! : null), put: async (key: string, value: string, opts?: { expirationTtl?: number }) => { store.set(key, value); if (opts?.expirationTtl) ttl.set(key, opts.expirationTtl); }, delete: async (key: string) => { store.delete(key); }, list: async () => ({ keys: [], list_complete: true, cacheStatus: null }), } as unknown as KVNamespace; } describe("kvMessageTracker", () => { it("stores and retrieves a message id by event and target", async () => { const kv = createMockKV(); const tracker = kvMessageTracker(kv); await tracker.set("route-1:workflow-9", "channel-1", "msg-42"); expect(await tracker.get("route-1:workflow-9", "channel-1")).toBe("msg-42"); }); it("returns null for an unknown event/target", async () => { const kv = createMockKV(); const tracker = kvMessageTracker(kv); expect(await tracker.get("missing", "channel-1")).toBeNull(); }); it("uses the msg:{eventId}:{targetId} key with a 7-day TTL", async () => { const kv = createMockKV(); const keys = new Map(); const ttls = new Map(); (kv.put as unknown) = async ( key: string, value: string, opts?: { expirationTtl?: number }, ): Promise => { keys.set(key, value); ttls.set(key, opts?.expirationTtl ?? 0); }; const tracker = kvMessageTracker(kv); await tracker.set("event-1", "target-1", "msg-7"); expect(keys.has("msg:event-1:target-1")).toBe(true); expect(ttls.get("msg:event-1:target-1")).toBe(604800); }); it("deletes tracked entries", async () => { const kv = createMockKV(); const tracker = kvMessageTracker(kv); await tracker.set("event-1", "target-1", "msg-7"); await tracker.delete("event-1", "target-1"); expect(await tracker.get("event-1", "target-1")).toBeNull(); }); });