Files
ttstd-infinite-canvas/web/test/workspace-sidebar-state.test.ts

50 lines
1.7 KiB
TypeScript

import { describe, expect, test } from "bun:test";
import {
readWorkspaceSidebarCollapsed,
WORKSPACE_SIDEBAR_STORAGE_KEY,
writeWorkspaceSidebarCollapsed,
} from "../src/components/layout/workspace-sidebar-state";
function memoryStorage(initial?: string) {
const values = new Map<string, string>();
if (initial !== undefined) values.set(WORKSPACE_SIDEBAR_STORAGE_KEY, initial);
return {
values,
getItem: (key: string) => values.get(key) ?? null,
setItem: (key: string, value: string) => values.set(key, value),
};
}
describe("workspace sidebar state", () => {
test("restores the persisted collapsed state after refresh", () => {
expect(readWorkspaceSidebarCollapsed(memoryStorage("1"))).toBe(true);
expect(readWorkspaceSidebarCollapsed(memoryStorage("0"))).toBe(false);
expect(readWorkspaceSidebarCollapsed(memoryStorage())).toBe(false);
});
test("persists both collapsed and expanded states", () => {
const storage = memoryStorage();
writeWorkspaceSidebarCollapsed(true, storage);
expect(storage.values.get(WORKSPACE_SIDEBAR_STORAGE_KEY)).toBe("1");
writeWorkspaceSidebarCollapsed(false, storage);
expect(storage.values.get(WORKSPACE_SIDEBAR_STORAGE_KEY)).toBe("0");
});
test("keeps sidebar interaction available when storage is blocked", () => {
const blockedStorage = {
getItem: () => {
throw new Error("blocked");
},
setItem: () => {
throw new Error("blocked");
},
};
expect(readWorkspaceSidebarCollapsed(blockedStorage)).toBe(false);
expect(() => writeWorkspaceSidebarCollapsed(true, blockedStorage)).not.toThrow();
});
});