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.
52 lines
1.7 KiB
TypeScript
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");
|
|
});
|
|
});
|