summaryrefslogtreecommitdiff
path: root/player-server/web/js/tests/media-pagination.test.js
blob: 0d599fc0d992b03666baea1ed519e8f9a2e84824 (plain)
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);
}