import { describe, expect, it } from "vitest"; import { createMemoryCache } from "../src/lib/cache/memory-cache"; import { cachedCompute } from "../src/lib/cache/memoize"; function sleep(ms: number) { return new Promise((r) => setTimeout(r, ms)); } describe("cache wrapper", () => { it("set/get JSON and expires by TTL", async () => { const cache = createMemoryCache(1); await cache.setJson("k", { a: 1 }, 1); const v1 = await cache.getJson<{ a: number }>("k"); expect(v1).toEqual({ a: 1 }); await sleep(1100); const v2 = await cache.getJson("k"); expect(v2).toBeUndefined(); }); it("cachedCompute hits on second call within TTL", async () => { const cache = createMemoryCache(60); let calls = 0; const compute = async () => { calls++; return { ok: true, n: calls }; }; const r1 = await cachedCompute(cache, "x", compute, 60); const r2 = await cachedCompute(cache, "x", compute, 60); expect(r1.cached).toBe(false); expect(r2.cached).toBe(true); expect(calls).toBe(1); expect(r2.value).toEqual(r1.value); }); });