diff --git a/frontend/testing/unit/components/Pagination.test.tsx b/frontend/testing/unit/components/Pagination.test.tsx new file mode 100644 index 00000000..9c91808b --- /dev/null +++ b/frontend/testing/unit/components/Pagination.test.tsx @@ -0,0 +1,62 @@ +import { render, screen } from "@testing-library/react"; +import Pagination from "../../../src/components/Pagination"; + +describe("Pagination", () => { + const defaultProps = { + page: 1, + total: 100, + limit: 10, + loading: false, + onPrev: vi.fn(), + onNext: vi.fn(), + }; + + // Range math tests + it("shows correct start and end for first page", () => { + render(); + expect(screen.getByText("1–10")).toBeInTheDocument(); + }); + + it("shows correct start and end for middle page", () => { + render(); + expect(screen.getByText("21–30")).toBeInTheDocument(); + }); + + it("shows correct end on last page with partial results", () => { + render(); + expect(screen.getByText("41–42")).toBeInTheDocument(); + }); + + it("shows 0 start and 0 end when total is 0", () => { + render(); + expect(screen.getByText("0–0")).toBeInTheDocument(); + }); + + // Disabled state tests + it("disables prev button on first page", () => { + render(); + expect(screen.getByText("Prev_Page").closest("button")).toBeDisabled(); + }); + + it("enables next button when not on last page", () => { + render(); + expect(screen.getByText("Next_Page").closest("button")).not.toBeDisabled(); + }); + + it("disables next button on last page", () => { + render(); + expect(screen.getByText("Next_Page").closest("button")).toBeDisabled(); + }); + + it("disables both buttons when total is 0", () => { + render(); + expect(screen.getByText("Prev_Page").closest("button")).toBeDisabled(); + expect(screen.getByText("Next_Page").closest("button")).toBeDisabled(); + }); + + it("disables both buttons when loading", () => { + render(); + expect(screen.getByText("Prev_Page").closest("button")).toBeDisabled(); + expect(screen.getByText("Next_Page").closest("button")).toBeDisabled(); + }); +}) \ No newline at end of file