108 lines
4.6 KiB
TypeScript
108 lines
4.6 KiB
TypeScript
|
import Pagination from "../src/Pagination";
|
||
|
|
||
|
describe('Pagination', () => {
|
||
|
const pagination = new Pagination(3, 5, 31);
|
||
|
test('Should have correct page', () => {
|
||
|
expect(pagination.page).toBe(3);
|
||
|
});
|
||
|
|
||
|
test('Should have correct perPage', () => {
|
||
|
expect(pagination.perPage).toBe(5);
|
||
|
});
|
||
|
|
||
|
test('Should have correct totalCount', () => {
|
||
|
expect(pagination.totalCount).toBe(31);
|
||
|
});
|
||
|
|
||
|
test('Should calculate correct last page', () => {
|
||
|
expect(new Pagination(3, 5, 30).lastPage).toBe(6);
|
||
|
expect(new Pagination(3, 5, 31).lastPage).toBe(7);
|
||
|
expect(new Pagination(3, 5, 32).lastPage).toBe(7);
|
||
|
expect(new Pagination(3, 5, 34).lastPage).toBe(7);
|
||
|
expect(new Pagination(3, 5, 35).lastPage).toBe(7);
|
||
|
expect(new Pagination(3, 5, 36).lastPage).toBe(8);
|
||
|
});
|
||
|
|
||
|
test('Should properly tell whether has a previous page', () => {
|
||
|
expect(pagination.hasPrevious()).toBe(true);
|
||
|
expect(new Pagination(1, 5, 15).hasPrevious()).toBe(false);
|
||
|
expect(new Pagination(2, 5, 15).hasPrevious()).toBe(true);
|
||
|
expect(new Pagination(3, 5, 15).hasPrevious()).toBe(true);
|
||
|
|
||
|
expect(new Pagination(1, 5, 17).hasPrevious()).toBe(false);
|
||
|
expect(new Pagination(2, 5, 17).hasPrevious()).toBe(true);
|
||
|
expect(new Pagination(3, 5, 17).hasPrevious()).toBe(true);
|
||
|
expect(new Pagination(4, 5, 17).hasPrevious()).toBe(true);
|
||
|
});
|
||
|
|
||
|
test('Should properly tell whether has a next page', () => {
|
||
|
expect(pagination.hasPrevious()).toBe(true);
|
||
|
expect(new Pagination(1, 5, 15).hasNext()).toBe(true);
|
||
|
expect(new Pagination(2, 5, 15).hasNext()).toBe(true);
|
||
|
expect(new Pagination(3, 5, 15).hasNext()).toBe(false);
|
||
|
|
||
|
expect(new Pagination(1, 5, 17).hasNext()).toBe(true);
|
||
|
expect(new Pagination(2, 5, 17).hasNext()).toBe(true);
|
||
|
expect(new Pagination(3, 5, 17).hasNext()).toBe(true);
|
||
|
expect(new Pagination(4, 5, 17).hasNext()).toBe(false);
|
||
|
});
|
||
|
|
||
|
test('Should throw on out of bound creation attempt', () => {
|
||
|
expect(() => {
|
||
|
new Pagination(-1, 5, 15);
|
||
|
}).toThrow('Page -1 not found.');
|
||
|
expect(() => {
|
||
|
new Pagination(-20, 5, 15);
|
||
|
}).toThrow('Page -20 not found.');
|
||
|
expect(() => {
|
||
|
new Pagination(3, 5, 15);
|
||
|
}).not.toThrow();
|
||
|
expect(() => {
|
||
|
new Pagination(4, 5, 15);
|
||
|
}).toThrow('Page 4 not found.');
|
||
|
expect(() => {
|
||
|
new Pagination(20, 5, 15);
|
||
|
}).toThrow('Page 20 not found.');
|
||
|
});
|
||
|
|
||
|
test('Should generate proper previous pages with context', () => {
|
||
|
expect(new Pagination(1, 1, 100).previousPages(1)).toStrictEqual([]);
|
||
|
expect(new Pagination(1, 1, 100).previousPages(2)).toStrictEqual([]);
|
||
|
expect(new Pagination(1, 1, 100).previousPages(3)).toStrictEqual([]);
|
||
|
|
||
|
expect(new Pagination(2, 1, 100).previousPages(1)).toStrictEqual([1]);
|
||
|
expect(new Pagination(2, 1, 100).previousPages(2)).toStrictEqual([1]);
|
||
|
expect(new Pagination(2, 1, 100).previousPages(3)).toStrictEqual([1]);
|
||
|
|
||
|
expect(new Pagination(3, 1, 100).previousPages(1)).toStrictEqual([1, 2]);
|
||
|
expect(new Pagination(3, 1, 100).previousPages(2)).toStrictEqual([1, 2]);
|
||
|
expect(new Pagination(3, 1, 100).previousPages(3)).toStrictEqual([1, 2]);
|
||
|
|
||
|
expect(new Pagination(10, 1, 100).previousPages(1)).toStrictEqual([1, -1, 9]);
|
||
|
expect(new Pagination(10, 1, 100).previousPages(2)).toStrictEqual([1, 2, -1, 8, 9]);
|
||
|
expect(new Pagination(10, 1, 100).previousPages(3)).toStrictEqual([1, 2, 3, -1, 7, 8, 9]);
|
||
|
});
|
||
|
|
||
|
test('Should generate proper next pages with context', () => {
|
||
|
let pagination = new Pagination(100, 1, 100);
|
||
|
expect(pagination.nextPages(1)).toStrictEqual([]);
|
||
|
expect(pagination.nextPages(2)).toStrictEqual([]);
|
||
|
expect(pagination.nextPages(3)).toStrictEqual([]);
|
||
|
|
||
|
pagination = new Pagination(99, 1, 100);
|
||
|
expect(pagination.nextPages(1)).toStrictEqual([100]);
|
||
|
expect(pagination.nextPages(2)).toStrictEqual([100]);
|
||
|
expect(pagination.nextPages(3)).toStrictEqual([100]);
|
||
|
|
||
|
pagination = new Pagination(98, 1, 100);
|
||
|
expect(pagination.nextPages(1)).toStrictEqual([99, 100]);
|
||
|
expect(pagination.nextPages(2)).toStrictEqual([99, 100]);
|
||
|
expect(pagination.nextPages(3)).toStrictEqual([99, 100]);
|
||
|
|
||
|
pagination = new Pagination(90, 1, 100);
|
||
|
expect(pagination.nextPages(1)).toStrictEqual([91, -1, 100]);
|
||
|
expect(pagination.nextPages(2)).toStrictEqual([91, 92, -1, 99, 100]);
|
||
|
expect(pagination.nextPages(3)).toStrictEqual([91, 92, 93, -1, 98, 99, 100]);
|
||
|
});
|
||
|
});
|