import * as React from "react";
import * as _ from "lodash";
import { shallow } from "enzyme";
import {
render,
renderIntoDocument,
cleanup,
wait,
fireEvent,
} from "react-testing-library";
import Pager from "../components/Pager";
import { PAGER_ELEMENT } from "../components/Pager/constants";
beforeEach(cleanup);
describe("Pager Calcutions", () => {
test("01 - Pager getCurrentPageSet", () => {
const pagerProps = {
pagesToShow: 5,
totalItems: 100,
itemsPerPage: 10,
onPageChange: () => {},
};
const pager: Pager = new Pager(pagerProps);
const currentPageSet1: number = pager.getCurrentPageSet(4);
expect(currentPageSet1).toBe(0);
const currentPageSet2: number = pager.getCurrentPageSet(5);
expect(currentPageSet2).toBe(1);
const currentPageSet3: number = pager.getCurrentPageSet(35);
expect(currentPageSet3).toBe(7);
const currentPageSet4: number = pager.getCurrentPageSet(40);
expect(currentPageSet4).toBe(8);
});
test("02 - Pager getTotalPageSet", () => {
const pagerProps = {
pagesToShow: 7,
totalItems: 211,
itemsPerPage: 10,
onPageChange: () => {},
};
const pager: Pager = new Pager(pagerProps);
const totalPageSet: number = pager.getTotalPageSets();
expect(totalPageSet).toBe(4);
});
test("03 - Pager getPagesInCurrentPageSet", () => {
const pagerProps = {
pagesToShow: 7,
totalItems: 211,
itemsPerPage: 10,
onPageChange: () => {},
};
const pager: Pager = new Pager(pagerProps);
const pagesInCurrentPageSet: number[] = pager.getPagesInCurrentPageSet(
12,
1,
4,
211
);
_.times(7, i => {
expect(pagesInCurrentPageSet[i]).toBe(8 + i);
});
});
test("04 - Pager getTotalPages", () => {
const pagerProps = {
pagesToShow: 5,
totalItems: 101,
itemsPerPage: 10,
onPageChange: () => {},
};
const pager: Pager = new Pager(pagerProps);
const totalPages: number = pager.getTotalPages();
expect(totalPages).toBe(11);
});
test("05 - Pager onPagerItemClicked nextPage", async () => {
const onPageChange: () => void = jest.fn();
const pager = (
);
const wrapper = shallow(pager);
wrapper.setState({ currentPageNumber: 8 });
await wait(() => expect(wrapper.state("currentPageNumber")).toBe(8));
wrapper.instance().onPagerItemClicked(PAGER_ELEMENT.NEXT_PAGE);
expect(wrapper.state().currentPageNumber).toEqual(9);
});
test("06 - Pager onPagerItemClicked prevPage", async () => {
const onPageChange: () => void = jest.fn();
const pager = (
);
const wrapper = shallow(pager);
wrapper.setState({ currentPageNumber: 8 });
await wait(() => expect(wrapper.state("currentPageNumber")).toBe(8));
wrapper.instance().onPagerItemClicked(PAGER_ELEMENT.PREVIOUS_PAGE);
expect(wrapper.state().currentPageNumber).toEqual(7);
});
test("07 - Pager onPagerItemClicked firstPage", async () => {
const onPageChange: () => void = jest.fn();
const pager = (
);
const wrapper = shallow(pager);
wrapper.setState({ currentPageNumber: 8 });
await wait(() => expect(wrapper.state("currentPageNumber")).toBe(8));
wrapper.instance().onPagerItemClicked(PAGER_ELEMENT.FIRST_PAGE);
expect(wrapper.state().currentPageNumber).toEqual(0);
});
test("08 - Pager onPagerItemClicked lastPage", async () => {
const onPageChange: () => void = jest.fn();
const pager = (
);
const wrapper = shallow(pager);
wrapper.setState({ currentPageNumber: 8 });
await wait(() => expect(wrapper.state("currentPageNumber")).toBe(8));
wrapper.instance().onPagerItemClicked(PAGER_ELEMENT.LAST_PAGE);
expect(wrapper.state().currentPageNumber).toEqual(21);
});
test("09 - Pager onPagerItemClicked nextSet", async () => {
const onPageChange: () => void = jest.fn();
const pager = (
);
const wrapper = shallow(pager);
wrapper.setState({ currentPageNumber: 8 });
await wait(() => expect(wrapper.state("currentPageNumber")).toBe(8));
wrapper.instance().onPagerItemClicked(PAGER_ELEMENT.NEXT_SET);
expect(wrapper.state().currentPageNumber).toEqual(14);
});
test("10 - Pager onPagerItemClicked prevSet", async () => {
const onPageChange: () => void = jest.fn();
const pager = (
);
const wrapper = shallow(pager);
wrapper.setState({ currentPageNumber: 8 });
await wait(() => expect(wrapper.state("currentPageNumber")).toBe(8));
wrapper.instance().onPagerItemClicked(PAGER_ELEMENT.PREVIOUS_SET);
expect(wrapper.state().currentPageNumber).toEqual(0);
});
});
describe("Pager Renders", () => {
test("11 - Pager getCurrentPageSet", () => {
const onPageChange: () => void = jest.fn();
const { container, getAllByTestId } = render(
);
const laded: string[] = getAllByTestId("pager_item_component").map(
ass => ass.textContent.trim()
);
_.forEach(laded, (l, i) => {
expect(parseInt(l)).toBe(i + 1);
});
});
});