import { cleanup, render, screen, } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; import assert from "node:assert"; import { afterEach, describe, mock, test, } from "node:test"; import { Navigation } from "./index"; describe("Navigation", () => { afterEach(() => { cleanup(); }); test("renders link items", () => { const items = [ { href: "/page-1" }, { href: "/page-2" }, ]; render(); assert.strictEqual(screen.getAllByRole("link").length, 2); }); test("renders navigation landmark", () => { render(); assert.notStrictEqual(screen.queryByRole("navigation"), null); }); test("calls onClick callback when navigation item is clicked", async () => { const user = userEvent.setup(); const onClick = mock.fn(({ event }) => { event.preventDefault(); }); const items = [ { href: "/page-1" }, ]; render( ); await user.click(screen.getByRole("link")); assert.strictEqual(onClick.mock.calls.length, 1); }); test("does not render link for disabled item", () => { const items = [ { href: "/page-1", isDisabled: true }, ]; render(); assert.strictEqual(screen.queryByRole("link"), null); }); test("does not mutate source items while applying prev/next icon props", () => { const items = [ { isPrev: true, href: "/prev", icon: "custom-prev", iconSize: "small" as const, }, { isNext: true, href: "/next", icon: "custom-next", iconSize: "large" as const, }, ]; const snapshot = JSON.stringify(items); render(); assert.strictEqual(JSON.stringify(items), snapshot); }); });