import { fireEvent, render } from "@solidjs/testing-library";
import { vi } from "vitest";
import * as Pagination from ".";
describe("Pagination", () => {
it("renders correctly when changing page", () => {
const { getByText, queryAllByText } = render(() => (
(
Page {props.page}
)}
ellipsisComponent={() => (
Ellipsis
)}
>
Next
));
const next = getByText("Next");
expect(getByText("Page 1")).toBeVisible();
expect(getByText("Page 2")).toBeVisible();
expect(queryAllByText("Ellipsis")).toHaveLength(1);
expect(getByText("Page 7")).toBeVisible();
fireEvent.click(next);
expect(getByText("Page 1")).toBeVisible();
expect(getByText("Page 2")).toBeVisible();
expect(getByText("Page 3")).toBeVisible();
expect(queryAllByText("Ellipsis")).toHaveLength(1);
expect(getByText("Page 7")).toBeVisible();
fireEvent.click(next);
expect(getByText("Page 1")).toBeVisible();
expect(getByText("Page 2")).toBeVisible();
expect(getByText("Page 3")).toBeVisible();
expect(getByText("Page 4")).toBeVisible();
expect(queryAllByText("Ellipsis")).toHaveLength(1);
expect(getByText("Page 7")).toBeVisible();
fireEvent.click(next);
expect(getByText("Page 1")).toBeVisible();
expect(getByText("Page 3")).toBeVisible();
expect(getByText("Page 4")).toBeVisible();
expect(getByText("Page 5")).toBeVisible();
expect(queryAllByText("Ellipsis")).toHaveLength(2);
expect(getByText("Page 7")).toBeVisible();
fireEvent.click(next);
expect(getByText("Page 1")).toBeVisible();
expect(queryAllByText("Ellipsis")).toHaveLength(1);
expect(getByText("Page 4")).toBeVisible();
expect(getByText("Page 5")).toBeVisible();
expect(getByText("Page 6")).toBeVisible();
expect(getByText("Page 7")).toBeVisible();
fireEvent.click(next);
expect(getByText("Page 1")).toBeVisible();
expect(queryAllByText("Ellipsis")).toHaveLength(1);
expect(getByText("Page 5")).toBeVisible();
expect(getByText("Page 6")).toBeVisible();
expect(getByText("Page 7")).toBeVisible();
fireEvent.click(next);
expect(getByText("Page 1")).toBeVisible();
expect(queryAllByText("Ellipsis")).toHaveLength(1);
expect(getByText("Page 6")).toBeVisible();
expect(getByText("Page 7")).toBeVisible();
});
it("renders correct number of pages", () => {
const { getByText } = render(() => (
(
Page {props.page}
)}
ellipsisComponent={() => <>>}
>
));
const page1 = getByText("Page 1");
const page2 = getByText("Page 2");
const page10 = getByText("Page 10");
expect(page1).toBeVisible();
expect(page2).toBeVisible();
expect(page10).toBeVisible();
});
it("renders correct number of siblings", () => {
const { getByText } = render(() => (
(
Page {props.page}
)}
ellipsisComponent={() => <>>}
>
));
const page1 = getByText("Page 1");
const page2 = getByText("Page 2");
const page3 = getByText("Page 3");
const page4 = getByText("Page 4");
const page5 = getByText("Page 5");
const page6 = getByText("Page 6");
const page10 = getByText("Page 10");
expect(page1).toBeVisible();
expect(page2).toBeVisible();
expect(page3).toBeVisible();
expect(page4).toBeVisible();
expect(page5).toBeVisible();
expect(page6).toBeVisible();
expect(page10).toBeVisible();
});
it("renders correctly when hiding first/last", () => {
const { getByText, queryByText } = render(() => (
(
Page {props.page}
)}
ellipsisComponent={() => <>>}
>
));
const page1 = queryByText("Page 1");
const page3 = getByText("Page 3");
const page4 = getByText("Page 4");
const page5 = getByText("Page 5");
const page10 = queryByText("Page 10");
expect(page1).not.toBeInTheDocument();
expect(page3).toBeVisible();
expect(page4).toBeVisible();
expect(page5).toBeVisible();
expect(page10).not.toBeInTheDocument();
});
it("renders correct number of siblings with fixedItems=true", () => {
const { getByText } = render(() => (
(
Page {props.page}
)}
ellipsisComponent={() => <>>}
>
));
const page1 = getByText("Page 1");
const page2 = getByText("Page 2");
const page3 = getByText("Page 3");
const page4 = getByText("Page 4");
const page5 = getByText("Page 5");
const page10 = getByText("Page 10");
expect(page1).toBeVisible();
expect(page2).toBeVisible();
expect(page3).toBeVisible();
expect(page4).toBeVisible();
expect(page5).toBeVisible();
expect(page10).toBeVisible();
});
it("renders correct number of siblings with fixedItems=no-ellipsis", () => {
const { getByText } = render(() => (
(
Page {props.page}
)}
ellipsisComponent={() => <>>}
>
));
const page1 = getByText("Page 1");
const page2 = getByText("Page 2");
const page3 = getByText("Page 3");
const page4 = getByText("Page 4");
const page10 = getByText("Page 10");
expect(page1).toBeVisible();
expect(page2).toBeVisible();
expect(page3).toBeVisible();
expect(page4).toBeVisible();
expect(page10).toBeVisible();
});
it("supports default page", () => {
const onPageChange = vi.fn();
const { getByText } = render(() => (
<>>}
ellipsisComponent={() => <>>}
>
Next
));
expect(onPageChange).not.toBeCalled();
const next = getByText("Next");
fireEvent.click(next);
expect(onPageChange).toBeCalledTimes(1);
expect(onPageChange).toHaveBeenCalledWith(5);
});
it("supports controlled state", () => {
const onPageChange = vi.fn();
const { getByText } = render(() => (
<>>}
ellipsisComponent={() => <>>}
>
Next
));
expect(onPageChange).not.toBeCalled();
const next = getByText("Next");
fireEvent.click(next);
expect(onPageChange).toBeCalledTimes(1);
expect(onPageChange).toHaveBeenCalledWith(5);
});
});