a77db0eeee
Adds tests for DifficultyIndicator, Toast, RollModeMenu, OverflowMenu, useTheme, and useRulesEdition. Covers rendering, user interactions, auto-dismiss timers, external store sync, and localStorage persistence. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
46 lines
1.3 KiB
TypeScript
46 lines
1.3 KiB
TypeScript
// @vitest-environment jsdom
|
|
import { act, renderHook } from "@testing-library/react";
|
|
import { afterEach, describe, expect, it } from "vitest";
|
|
import { useRulesEdition } from "../use-rules-edition.js";
|
|
|
|
const STORAGE_KEY = "initiative:rules-edition";
|
|
|
|
describe("useRulesEdition", () => {
|
|
afterEach(() => {
|
|
// Reset to default
|
|
const { result } = renderHook(() => useRulesEdition());
|
|
act(() => result.current.setEdition("5.5e"));
|
|
localStorage.removeItem(STORAGE_KEY);
|
|
});
|
|
|
|
it("defaults to 5.5e", () => {
|
|
const { result } = renderHook(() => useRulesEdition());
|
|
expect(result.current.edition).toBe("5.5e");
|
|
});
|
|
|
|
it("setEdition updates value", () => {
|
|
const { result } = renderHook(() => useRulesEdition());
|
|
|
|
act(() => result.current.setEdition("5e"));
|
|
|
|
expect(result.current.edition).toBe("5e");
|
|
});
|
|
|
|
it("setEdition persists to localStorage", () => {
|
|
const { result } = renderHook(() => useRulesEdition());
|
|
|
|
act(() => result.current.setEdition("5e"));
|
|
|
|
expect(localStorage.getItem(STORAGE_KEY)).toBe("5e");
|
|
});
|
|
|
|
it("multiple hooks stay in sync", () => {
|
|
const { result: r1 } = renderHook(() => useRulesEdition());
|
|
const { result: r2 } = renderHook(() => useRulesEdition());
|
|
|
|
act(() => r1.current.setEdition("5e"));
|
|
|
|
expect(r2.current.edition).toBe("5e");
|
|
});
|
|
});
|