Files
sudoku-tools/tests/state/uiPreferences.test.ts

52 lines
1.6 KiB
TypeScript

import { describe, expect, it, vi } from "vitest";
import {
BOARD_SCALE_STORAGE_KEY,
colorMarkDescription,
normalizeBoardScale,
parseCandidateVerbosity,
readStoredBoardScale,
writeStoredBoardScale,
} from "../../src/state/uiPreferences";
describe("UI accessibility preferences", () => {
it("clamps and snaps persisted board scale safely", () => {
expect(normalizeBoardScale(1.13)).toBe(1.25);
expect(normalizeBoardScale(0.1)).toBe(0.75);
expect(normalizeBoardScale(9)).toBe(2);
expect(normalizeBoardScale("not a scale")).toBe(1);
const storage = { getItem: vi.fn(() => "1.49") };
expect(readStoredBoardScale(storage)).toBe(1.5);
expect(storage.getItem).toHaveBeenCalledWith(BOARD_SCALE_STORAGE_KEY);
const setItem = vi.fn();
writeStoredBoardScale(1.74, { setItem });
expect(setItem).toHaveBeenCalledWith(BOARD_SCALE_STORAGE_KEY, "1.75");
});
it("survives unavailable storage and normalizes announcement settings", () => {
expect(
readStoredBoardScale({
getItem: () => {
throw new Error("blocked");
},
}),
).toBe(1);
expect(() =>
writeStoredBoardScale(1.5, {
setItem: () => {
throw new Error("blocked");
},
}),
).not.toThrow();
expect(parseCandidateVerbosity("concise")).toBe("concise");
expect(parseCandidateVerbosity("everything")).toBe("detailed");
});
it("gives every colour mark a non-colour identifier", () => {
expect(colorMarkDescription(1)).toBe("red, diagonal stripes");
expect(colorMarkDescription(8)).toBe("pink, rings");
expect(colorMarkDescription(99)).toBe("mark 99");
});
});