import assert from "node:assert/strict"; import test, { afterEach, beforeEach } from "node:test"; import { readCachedPageData, readStoredServerSelection, writeCachedPageData, storeServerSelection, } from "../src/lib/page-state"; const ORGANIZATION_STORAGE_KEY = "vps_active_organization"; class MemoryStorage implements Storage { private store = new Map(); get length(): number { return this.store.size; } clear(): void { this.store.clear(); } getItem(key: string): string | null { return this.store.has(key) ? this.store.get(key)! : null; } key(index: number): string | null { return [...this.store.keys()][index] ?? null; } removeItem(key: string): void { this.store.delete(key); } setItem(key: string, value: string): void { this.store.set(key, value); } } type TestWindow = Window & { localStorage: Storage; sessionStorage: Storage; }; const originalWindow = globalThis.window; function createWindow(): TestWindow { return { localStorage: new MemoryStorage(), sessionStorage: new MemoryStorage(), } as TestWindow; } beforeEach(() => { globalThis.window = createWindow(); }); afterEach(() => { if (originalWindow === undefined) { delete globalThis.window; return; } globalThis.window = originalWindow; }); test("stores selected server per organization", () => { window.localStorage.setItem(ORGANIZATION_STORAGE_KEY, "org-a"); storeServerSelection("databases", "server-a"); window.localStorage.setItem(ORGANIZATION_STORAGE_KEY, "org-b"); assert.equal(readStoredServerSelection("databases"), ""); storeServerSelection("databases", "server-b"); assert.equal(readStoredServerSelection("databases"), "server-b"); window.localStorage.setItem(ORGANIZATION_STORAGE_KEY, "org-a"); assert.equal(readStoredServerSelection("databases"), "server-a"); }); test("stores cached page data per organization", () => { window.localStorage.setItem(ORGANIZATION_STORAGE_KEY, "org-a"); writeCachedPageData("domains", { items: ["alpha"] }, "server-1"); window.localStorage.setItem(ORGANIZATION_STORAGE_KEY, "org-b"); assert.equal(readCachedPageData("domains", "server-1"), null); writeCachedPageData("domains", { items: ["beta"] }, "server-1"); assert.deepEqual(readCachedPageData("domains", "server-1"), { items: ["beta"], }); window.localStorage.setItem(ORGANIZATION_STORAGE_KEY, "org-a"); assert.deepEqual(readCachedPageData("domains", "server-1"), { items: ["alpha"], }); });