fix: stabilize Sudoku workspace layout

This commit is contained in:
2026-08-31 16:14:46 +02:00
parent 0a1bdc1a8c
commit ca7a6270d0
17 changed files with 194 additions and 32 deletions
+21 -2
View File
@@ -9,19 +9,35 @@ describe("BoardViewport", () => {
it("zooms, fits and restores the persisted scale", async () => {
const user = userEvent.setup();
const { unmount } = render(
const { container, unmount } = render(
<BoardViewport>
<div>Board</div>
</BoardViewport>,
);
expect(screen.getByLabelText("Board zoom level")).toHaveTextContent("100%");
expect(container.querySelector(".board-viewport")).not.toHaveClass(
"is-zoomed-in",
);
await user.click(screen.getByRole("button", { name: "Zoom board out" }));
expect(screen.getByLabelText("Board zoom level")).toHaveTextContent("75%");
expect(container.querySelector(".board-viewport__canvas")).toHaveStyle({
width: "75%",
maxWidth: "36rem",
});
expect(container.querySelector(".board-viewport")).not.toHaveClass(
"is-zoomed-in",
);
await user.click(screen.getByRole("button", { name: "Zoom board in" }));
await user.click(screen.getByRole("button", { name: "Zoom board in" }));
expect(screen.getByLabelText("Board zoom level")).toHaveTextContent("125%");
expect(container.querySelector(".board-viewport")).toHaveClass(
"is-zoomed-in",
);
expect(localStorage.getItem(BOARD_SCALE_STORAGE_KEY)).toBe("1.25");
unmount();
render(
const restored = render(
<BoardViewport>
<div>Board</div>
</BoardViewport>,
@@ -29,6 +45,9 @@ describe("BoardViewport", () => {
expect(screen.getByLabelText("Board zoom level")).toHaveTextContent("125%");
await user.click(screen.getByRole("button", { name: "Fit board" }));
expect(screen.getByLabelText("Board zoom level")).toHaveTextContent("100%");
expect(restored.container.querySelector(".board-viewport")).not.toHaveClass(
"is-zoomed-in",
);
});
it("offers explicit pan mode and board-scoped zoom shortcuts", async () => {