card-view.test.js 1.4 KB

1234567891011121314151617181920212223242526272829
  1. import { test } from 'node:test';
  2. import assert from 'node:assert/strict';
  3. import { paginate, readCardQuery, patchOf, pageNumber } from '../src/utils/card-view.js';
  4. test('报告分页覆盖全部记录且无重复;首尾页与空清单保持有效', () => {
  5. const all = Array.from({ length: 38 }, (_, i) => `report-${i}`);
  6. const pages = Array.from({ length: paginate(all, 1).pages }, (_, i) => paginate(all, i + 1));
  7. assert.deepEqual(pages.flatMap(p => p.items), all);
  8. assert.deepEqual(paginate(all, 999).items, all.slice(36));
  9. assert.deepEqual(paginate([], 3), { items: [], page: 1, pages: 1, size: 12, total: 0 });
  10. });
  11. test('损坏或非整数 URL 页码不会漏记录、返回空页或 NaN', () => {
  12. const all = Array.from({ length: 25 }, (_, i) => i);
  13. for (const page of ['NaN', 'Infinity', '-5', '0', undefined]) {
  14. assert.equal(readCardQuery({ page }).page, 1);
  15. assert.equal(paginate(all, page).page, 1);
  16. assert.equal(paginate(all, page).items.length, 12);
  17. }
  18. assert.equal(paginate(all, '2.7').page, 2);
  19. assert.equal(pageNumber('2.7'), 2);
  20. assert.equal(paginate(all, 1, Infinity).size, 12);
  21. });
  22. test('翻页与刷新保留证据、阶段、排序和列表视图', () => {
  23. const q = readCardQuery({ stage: 'S3,S4', ev: '高', sort: 'ev', view: 'list', page: '2' });
  24. const restored = readCardQuery(patchOf(q, 3));
  25. assert.deepEqual(restored, { ...q, page: 3 });
  26. });