import { describe, it, expect, beforeEach, vi } from "vitest";
import * as cache from "./cache.js";
describe("cache", () => {
beforeEach(() => {
cache.invalidateAll();
});
it("returns undefined for missing key", () => {
expect(cache.get<string>("missing")).toBeUndefined();
});
it("stores and retrieves value within TTL", () => {
cache.set("key1", "value1", 60);
expect(cache.get<string>("key1")).toBe("value1");
});
it("returns undefined after TTL expires", async () => {
vi.useFakeTimers();
cache.set("key2", "value2", 1);
expect(cache.get<string>("key2")).toBe("value2");
vi.advanceTimersByTime(2000);
expect(cache.get<string>("key2")).toBeUndefined();
vi.useRealTimers();
});
it("invalidate removes key", () => {
cache.set("key3", "value3", 60);
cache.invalidate("key3");
expect(cache.get<string>("key3")).toBeUndefined();
});
it("invalidateAll clears all", () => {
cache.set("a", 1, 60);
cache.set("b", 2, 60);
cache.invalidateAll();
expect(cache.get<number>("a")).toBeUndefined();
expect(cache.get<number>("b")).toBeUndefined();
});
});