1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
import { paginateItems, setMediaPageSize } from '../views/media-grid.js';
import { state } from '../state.js';
const failures = [];
function assert(cond, msg) {
if (!cond) failures.push(msg || 'assertion failed');
}
function items(count) {
return Array.from({ length: count }, (_, i) => i + 1);
}
function testDefaultPageSize() {
setMediaPageSize(undefined);
const first = paginateItems(items(101), 0);
assert(first.items.length === 100, 'default first page should contain 100 items');
assert(first.hasNext, 'default first page should have next');
assert(!first.hasPrev, 'default first page should not have previous');
const second = paginateItems(items(101), 1);
assert(second.items.length === 1, 'default second page should contain remaining item');
assert(second.hasPrev, 'default second page should have previous');
assert(!second.hasNext, 'default second page should not have next');
}
function testConfiguredPageSize() {
state.mediaPage = 2;
setMediaPageSize(25);
const page = paginateItems(items(60), 1);
assert(state.mediaPage === 0, 'changing page size should reset current media page');
assert(page.items.length === 25, 'configured page should contain configured number of items');
assert(page.start === 25, 'configured second page should start at item offset 25');
assert(page.end === 50, 'configured second page should end at item offset 50');
}
function testClampsOutOfRangePage() {
setMediaPageSize(25);
const page = paginateItems(items(60), 99);
assert(page.page === 2, 'page should clamp to the last page');
assert(page.items.length === 10, 'last page should contain remaining items');
}
console.log('Running media pagination tests...');
testDefaultPageSize();
testConfiguredPageSize();
testClampsOutOfRangePage();
if (failures.length) {
console.error('FAILURES:');
failures.forEach((m) => console.error(' - ' + m));
process.exit(1);
} else {
console.log('All media pagination tests passed.');
process.exit(0);
}
|