diff --git a/src/Squidex/app/framework/utils/pager.spec.ts b/src/Squidex/app/framework/utils/pager.spec.ts new file mode 100644 index 000000000..da4838835 --- /dev/null +++ b/src/Squidex/app/framework/utils/pager.spec.ts @@ -0,0 +1,151 @@ +/* + * Squidex Headless CMS + * + * @license + * Copyright (c) Sebastian Stehle. All rights reserved + */ + +import { Pager } from './../'; + +describe('Pager', () => { + it('Should init with page size and page', () => { + const pager_1 = new Pager(23, 2, 10); + + expect(Object.assign({}, pager_1)).toEqual({ + page: 2, + pageSize: 10, + itemFirst: 21, + itemLast: 23, + skip: 20, + numberOfItems: 23, + canGoNext: false, + canGoPrev: true + }); + }); + + it('Should reset page on reset', () => { + const pager_1 = new Pager(23, 2, 10); + const pager_2 = pager_1.reset(); + + expect(Object.assign({}, pager_2)).toEqual({ + page: 0, + pageSize: 10, + itemFirst: 0, + itemLast: 0, + skip: 0, + numberOfItems: 0, + canGoNext: false, + canGoPrev: false + }); + }); + + it('should return same instance when go next and being on last page', () => { + const pager_1 = new Pager(23, 2, 10); + const pager_2 = pager_1.goNext(); + + expect(pager_2).toBe(pager_1); + }); + + it('should update page when going next', () => { + const pager_1 = new Pager(23, 0, 10); + const pager_2 = pager_1.goNext(); + + expect(Object.assign({}, pager_2)).toEqual({ + page: 1, + pageSize: 10, + itemFirst: 11, + itemLast: 20, + skip: 10, + numberOfItems: 23, + canGoNext: true, + canGoPrev: true + }); + }); + + it('should return same instance when go prev and being on first page', () => { + const pager_1 = new Pager(23, 0, 10); + const pager_2 = pager_1.goPrev(); + + expect(pager_2).toBe(pager_1); + }); + + it('should update page when going prev', () => { + const pager_1 = new Pager(23, 2, 10); + const pager_2 = pager_1.goPrev(); + + expect(Object.assign({}, pager_2)).toEqual({ + page: 1, + pageSize: 10, + itemFirst: 11, + itemLast: 20, + skip: 10, + numberOfItems: 23, + canGoNext: true, + canGoPrev: true + }); + }); + + it('should update count when setting it', () => { + const pager_1 = new Pager(23, 2, 10); + const pager_2 = pager_1.setCount(30); + + expect(Object.assign({}, pager_2)).toEqual({ + page: 2, + pageSize: 10, + itemFirst: 21, + itemLast: 30, + skip: 20, + numberOfItems: 30, + canGoNext: false, + canGoPrev: true + }); + }); + + it('should update count when incrementing it', () => { + const pager_1 = new Pager(23, 2, 10); + const pager_2 = pager_1.incrementCount(); + + expect(Object.assign({}, pager_2)).toEqual({ + page: 2, + pageSize: 10, + itemFirst: 21, + itemLast: 24, + skip: 20, + numberOfItems: 24, + canGoNext: false, + canGoPrev: true + }); + }); + + it('should update count when decrementing it', () => { + const pager_1 = new Pager(23, 2, 10); + const pager_2 = pager_1.decrementCount(); + + expect(Object.assign({}, pager_2)).toEqual({ + page: 2, + pageSize: 10, + itemFirst: 21, + itemLast: 22, + skip: 20, + numberOfItems: 22, + canGoNext: false, + canGoPrev: true + }); + }); + + it('should also update page when new page is bigger than max page', () => { + const pager_1 = new Pager(21, 2, 10); + const pager_2 = pager_1.decrementCount(); + + expect(Object.assign({}, pager_2)).toEqual({ + page: 1, + pageSize: 10, + itemFirst: 11, + itemLast: 20, + skip: 10, + numberOfItems: 20, + canGoNext: false, + canGoPrev: true + }); + }); +}); \ No newline at end of file diff --git a/src/Squidex/app/framework/utils/pager.ts b/src/Squidex/app/framework/utils/pager.ts index b000fa493..908680a24 100644 --- a/src/Squidex/app/framework/utils/pager.ts +++ b/src/Squidex/app/framework/utils/pager.ts @@ -21,7 +21,11 @@ export class Pager { ) { const totalPages = Math.ceil(numberOfItems / this.pageSize); - this.itemFirst = page * this.pageSize + 1; + if (page >= totalPages && page > 0) { + page = this.page = totalPages - 1; + } + + this.itemFirst = numberOfItems === 0 ? 0 : page * this.pageSize + 1; this.itemLast = Math.min(numberOfItems, (page + 1) * this.pageSize); this.canGoNext = page < totalPages - 1; diff --git a/src/Squidex/app/framework/utils/version.spec.ts b/src/Squidex/app/framework/utils/version.spec.ts new file mode 100644 index 000000000..42a48c108 --- /dev/null +++ b/src/Squidex/app/framework/utils/version.spec.ts @@ -0,0 +1,30 @@ +/* + * Squidex Headless CMS + * + * @license + * Copyright (c) Sebastian Stehle. All rights reserved + */ + +import { Version } from './../'; + +describe('Version', () => { + it('should initialize with default value', () => { + const version = new Version(); + + expect(version.value).toBe(''); + }); + + it('should initialize with init value', () => { + const version = new Version('1.0'); + + expect(version.value).toBe('1.0'); + }); + + it('should update to new value', () => { + const version = new Version(); + + version.update('1.0'); + + expect(version.value).toBe('1.0'); + }); +}); \ No newline at end of file