SevdanurGenc's picture
Upload 300 files
9438a57 verified
Raw History Blame Contribute Delete
1.62 kB
const { pageCount, clampPage, pageItems, pageButtons } = require('./solution');
describe('pageCount', () => {
test('rounds up and has at least one page', () => {
expect(pageCount(10, 3)).toBe(4);
expect(pageCount(9, 3)).toBe(3);
expect(pageCount(0, 5)).toBe(1);
});
test('validates arguments', () => {
expect(() => pageCount(5, 0)).toThrow(RangeError);
expect(() => pageCount(5, 2.5)).toThrow(RangeError);
expect(() => pageCount(-1, 5)).toThrow(RangeError);
});
});
test('clampPage', () => {
expect(clampPage(0, 4)).toBe(1);
expect(clampPage(9, 4)).toBe(4);
expect(clampPage(3, 4)).toBe(3);
});
describe('pageItems', () => {
const items = [1, 2, 3, 4, 5, 6, 7];
test('returns the requested page', () => {
expect(pageItems(items, 1, 3)).toEqual([1, 2, 3]);
expect(pageItems(items, 3, 3)).toEqual([7]);
});
test('clamps out-of-range pages', () => {
expect(pageItems(items, 99, 3)).toEqual([7]);
expect(pageItems(items, -2, 3)).toEqual([1, 2, 3]);
});
});
describe('pageButtons', () => {
test('all pages when few', () => {
expect(pageButtons(2, 3)).toEqual([1, 2, 3]);
expect(pageButtons(1, 1)).toEqual([1]);
});
test('ellipses on both sides', () => {
expect(pageButtons(5, 10)).toEqual([1, '…', 4, 5, 6, '…', 10]);
});
test('single-page gap is filled with the page itself', () => {
expect(pageButtons(4, 10)).toEqual([1, 2, 3, 4, 5, '…', 10]);
});
test('window size', () => {
expect(pageButtons(5, 10, 2)).toEqual([1, 2, 3, 4, 5, 6, 7, '…', 10]);
expect(pageButtons(1, 10, 0)).toEqual([1, '…', 10]);
});
});