import { DEFAULT_CLIENT_SETTINGS } from "@t3tools/contracts"; import { afterEach, describe, expect, it, vi } from "vite-plus/test"; function createLocalStorageStub(): Storage { const store = new Map(); return { getItem: (key) => store.get(key) ?? null, setItem: (key, value) => { store.set(key, value); }, removeItem: (key) => { store.delete(key); }, clear: () => { store.clear(); }, key: (index) => [...store.keys()][index] ?? null, get length() { return store.size; }, }; } function getTestWindow(): Window & typeof globalThis { const localStorage = createLocalStorageStub(); const testWindow = { localStorage, } as Window & typeof globalThis; vi.stubGlobal("window", testWindow); vi.stubGlobal("localStorage", localStorage); return testWindow; } afterEach(() => { vi.resetModules(); vi.unstubAllGlobals(); vi.restoreAllMocks(); }); describe("clientPersistenceStorage", () => { it("persists client settings in browser storage", async () => { getTestWindow(); const { readBrowserClientSettings, writeBrowserClientSettings } = await import("./clientPersistenceStorage"); const settings = { ...DEFAULT_CLIENT_SETTINGS, timestampFormat: "24-hour" as const, }; writeBrowserClientSettings(settings); expect(readBrowserClientSettings()).toEqual(settings); }); });