import { beforeEach, describe, expect, it } from "vitest"; import { DEFAULT_THEME, THEME_KEY, isTheme, resetTheme, setTheme, toggleTheme, useTheme, } from "./theme"; describe("theme store", () => { beforeEach(() => { localStorage.clear(); resetTheme(); }); it("starts light and stamps the document", () => { expect(useTheme.getState().theme).toBe(DEFAULT_THEME); expect(document.documentElement.dataset.theme).toBe("light"); }); it("setTheme applies, stamps and remembers the theme", () => { setTheme("dark"); expect(useTheme.getState().theme).toBe("dark"); expect(document.documentElement.dataset.theme).toBe("dark"); expect(localStorage.getItem(THEME_KEY)).toBe("dark"); }); it("toggleTheme alternates between light and dark", () => { toggleTheme(); expect(useTheme.getState().theme).toBe("dark"); toggleTheme(); expect(useTheme.getState().theme).toBe("light"); expect(document.documentElement.dataset.theme).toBe("light"); }); it("resetTheme goes back to light", () => { setTheme("dark"); resetTheme(); expect(useTheme.getState().theme).toBe("light"); expect(localStorage.getItem(THEME_KEY)).toBe("light"); }); }); describe("isTheme", () => { it("accepts the two themes and rejects anything else", () => { expect(isTheme("light")).toBe(true); expect(isTheme("dark")).toBe(true); expect(isTheme("system")).toBe(false); expect(isTheme(null)).toBe(false); expect(isTheme(42)).toBe(false); }); });