// @vitest-environment jsdom // // The Settings prefs are seeded from the account's server prefs in the `me` cache — BootGate mounts the // tree only once it is there. The adopt effect this replaced corrected them AFTER mounting; with it // gone, a seed that read only this browser's copy would never show a performance mode or hints setting // changed on another device. And the seed is not an edit: it must not be saved straight back. import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import { act, cleanup, render } from "@testing-library/react"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { PrefsProvider } from "./PrefsProvider"; import { usePrefs } from "./prefsContext"; import { api } from "../lib/api"; import { ACTIVE_ACCOUNT_KEY } from "../lib/activeAccount"; import { accountKey, LS } from "../lib/storage"; import { qk } from "../lib/queryKeys"; const seen: { perf: boolean; hints: boolean }[] = []; function Probe() { const { perf, hints } = usePrefs(); seen.push({ perf, hints }); return null; } beforeEach(() => { localStorage.clear(); sessionStorage.setItem(ACTIVE_ACCOUNT_KEY, "5"); seen.length = 0; vi.useFakeTimers(); }); afterEach(() => { cleanup(); vi.useRealTimers(); vi.restoreAllMocks(); }); describe("PrefsProvider seed", () => { it("renders the account's server prefs from the first render, and does not save them back", () => { localStorage.setItem(accountKey(LS.perfMode, 5)!, "0"); // this browser last had it off localStorage.setItem(accountKey(LS.hints, 5)!, "1"); const save = vi.spyOn(api, "savePrefs").mockResolvedValue(undefined as never); const qc = new QueryClient(); qc.setQueryData(qk.me(), { id: 5, preferences: { performanceMode: true, hints: false } }); render( , ); expect(seen[0]).toEqual({ perf: true, hints: false }); // past the auto-save debounce act(() => { vi.advanceTimersByTime(1000); }); expect(save).not.toHaveBeenCalled(); }); });