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