import { afterEach, describe, expect, it, vi } from "vitest"; import { readPaneWidth, readScreenPaneHabit, writePaneWidth, writeScreenPaneHabit, } from "./workspace-pane-pref"; function stubStorage() { const store = new Map(); vi.stubGlobal("window", { localStorage: { getItem: (key: string) => store.get(key) ?? null, setItem: (key: string, value: string) => { store.set(key, value); }, removeItem: (key: string) => { store.delete(key); }, }, }); return store; } afterEach(() => { vi.unstubAllGlobals(); }); describe("workspace pane preferences", () => { it("keeps the learned screen habit per user and bot", () => { const store = stubStorage(); expect(readScreenPaneHabit("user-1", "bot-1")).toBe(0); writeScreenPaneHabit("user-1", "bot-1", 2); expect(readScreenPaneHabit("user-1", "bot-1")).toBe(2); expect(readScreenPaneHabit("user-1", "bot-2")).toBe(0); writeScreenPaneHabit("user-1", "bot-1", 0); expect(store.size).toBe(0); writeScreenPaneHabit(null, "bot-1", 3); expect(store.size).toBe(0); }); it("restores a stored pane width within its bounds", () => { stubStorage(); expect(readPaneWidth("width", 500, 320, 900)).toBe(500); writePaneWidth("width", 640.4); expect(readPaneWidth("width", 500, 320, 900)).toBe(640); writePaneWidth("width", 2_000); expect(readPaneWidth("width", 500, 320, 900)).toBe(900); }); it("falls back when storage is unavailable", () => { vi.stubGlobal("window", { get localStorage(): Storage { throw new Error("blocked"); }, }); expect(readScreenPaneHabit("user-1", "bot-1")).toBe(0); expect(readPaneWidth("width", 500, 320, 900)).toBe(500); expect(() => writePaneWidth("width", 600)).not.toThrow(); }); });