evOo-local/apps/web/src/lib/rpc.test.ts
cynarAI 6c7eed7580 Initial clean evOo-local from f00577b
Fresh history cut from cynarAI/evoo antigravity-handoff/project-timeline
(Voice First + project timeline). Brand docs/titles as evOo; keep @rakazo/*
packages as tech debt. Excludes node_modules, caches, secrets, voice blobs.
2026-09-20 17:15:16 +02:00

52 lines
1.7 KiB
TypeScript

import { afterEach, describe, expect, it, vi } from "vitest";
import { clearSpaceSelection, selectedSpaceId, selectSpace } from "./rpc.js";
afterEach(() => {
vi.unstubAllGlobals();
});
describe("space selection storage", () => {
it("reports localStorage write failures without throwing", () => {
const localStorage = {
getItem: () => null,
setItem: () => {
throw new Error("quota exceeded");
},
removeItem: () => {
throw new Error("quota exceeded");
},
};
vi.stubGlobal("window", { localStorage });
vi.stubGlobal("localStorage", localStorage);
expect(selectSpace("space-support")).toBe(false);
expect(() => clearSpaceSelection()).not.toThrow();
expect(selectedSpaceId()).toBeNull();
});
it("treats an already-persisted selection as success when writes fail", () => {
const localStorage = {
getItem: (key: string) => (key === "rakazo:space-id" ? "space-support" : null),
setItem: () => {
throw new Error("quota exceeded");
},
removeItem: vi.fn(),
};
vi.stubGlobal("window", { localStorage });
vi.stubGlobal("localStorage", localStorage);
expect(selectSpace("space-support")).toBe(true);
expect(selectSpace("space-other")).toBe(false);
});
it("reports when a space selection was persisted", () => {
const setItem = vi.fn();
const localStorage = { getItem: () => null, setItem, removeItem: vi.fn() };
vi.stubGlobal("window", { localStorage });
vi.stubGlobal("localStorage", localStorage);
expect(selectSpace("space-support")).toBe(true);
expect(setItem).toHaveBeenCalledWith("rakazo:space-id", "space-support");
});
});