2cace2987d
Ref ENG-1351 ENG-1373
117 lines
2.9 KiB
TypeScript
117 lines
2.9 KiB
TypeScript
import {expect} from 'chai';
|
|
import {renderHook, act} from '@testing-library/react-hooks';
|
|
import {usePagination, PaginationMeta, PaginationData} from '../../../src/hooks/usePagination';
|
|
|
|
describe('usePagination', function () {
|
|
const initialMeta: PaginationMeta = {
|
|
limit: 10,
|
|
pages: 5,
|
|
total: 50,
|
|
next: null,
|
|
prev: null
|
|
};
|
|
|
|
it('should initialize with the given meta and page', function () {
|
|
const {result} = renderHook(() => usePagination({
|
|
meta: initialMeta,
|
|
limit: 10,
|
|
page: 1,
|
|
setPage: () => {}
|
|
})
|
|
);
|
|
|
|
const expectedData: PaginationData = {
|
|
page: 1,
|
|
pages: initialMeta.pages,
|
|
total: initialMeta.total,
|
|
limit: initialMeta.limit,
|
|
setPage: result.current.setPage,
|
|
nextPage: result.current.nextPage,
|
|
prevPage: result.current.prevPage
|
|
};
|
|
|
|
expect(result.current).to.deep.equal(expectedData);
|
|
});
|
|
|
|
it('should update page correctly when nextPage and prevPage are called', function () {
|
|
let currentPage = 1;
|
|
const setPage = (newPage: number) => {
|
|
currentPage = newPage;
|
|
};
|
|
|
|
const {result} = renderHook(() => usePagination({
|
|
meta: initialMeta,
|
|
limit: 10,
|
|
page: currentPage,
|
|
setPage
|
|
})
|
|
);
|
|
|
|
act(() => {
|
|
result.current.nextPage();
|
|
});
|
|
|
|
expect(currentPage).to.equal(2);
|
|
|
|
act(() => {
|
|
result.current.prevPage();
|
|
});
|
|
|
|
expect(currentPage).to.equal(1);
|
|
});
|
|
|
|
it('should update page correctly when setPage is called', function () {
|
|
let currentPage = 3;
|
|
const setPage = (newPage: number) => {
|
|
currentPage = newPage;
|
|
};
|
|
|
|
const {result} = renderHook(() => usePagination({
|
|
meta: initialMeta,
|
|
limit: 10,
|
|
page: currentPage,
|
|
setPage
|
|
})
|
|
);
|
|
|
|
const newPage = 5;
|
|
|
|
act(() => {
|
|
result.current.setPage(newPage);
|
|
});
|
|
|
|
expect(currentPage).to.equal(newPage);
|
|
});
|
|
|
|
it('should handle edge cases where meta.pages < page when setting meta', function () {
|
|
let currentPage = 5;
|
|
const setPage = (newPage: number) => {
|
|
currentPage = newPage;
|
|
};
|
|
|
|
const {rerender} = renderHook(
|
|
({meta}) => usePagination({
|
|
meta,
|
|
limit: 10,
|
|
page: currentPage,
|
|
setPage
|
|
}),
|
|
{initialProps: {meta: initialMeta}}
|
|
);
|
|
|
|
const updatedMeta: PaginationMeta = {
|
|
limit: 10,
|
|
pages: 4,
|
|
total: 40,
|
|
next: null,
|
|
prev: null
|
|
};
|
|
|
|
act(() => {
|
|
rerender({meta: updatedMeta});
|
|
});
|
|
|
|
expect(currentPage).to.equal(4);
|
|
});
|
|
});
|