import { test } from 'node:test' import assert from 'node:assert/strict' import { HISTORY_VISIBLE_LIMIT, sliceHistoryItems } from '../src/shared/utils/history-paging.ts' test('未超上限时全量渲染且不显示展开入口', () => { const items = Array.from({ length: 10 }, (_, i) => ({ key: `k${i}` })) const slice = sliceHistoryItems(items, false) assert.equal(slice.visible.length, 10) assert.equal(slice.hiddenCount, 0) assert.equal(slice.capped, false) }) test('超过上限时只渲染前 N 条并给出剩余条数', () => { const items = Array.from({ length: HISTORY_VISIBLE_LIMIT + 7 }, (_, i) => ({ key: `k${i}` })) const slice = sliceHistoryItems(items, false) assert.equal(slice.visible.length, HISTORY_VISIBLE_LIMIT) assert.equal(slice.hiddenCount, 7) assert.equal(slice.capped, true) assert.equal(slice.visible[0].key, 'k0') assert.equal(slice.visible.at(-1)?.key, `k${HISTORY_VISIBLE_LIMIT - 1}`) }) test('展开全部后不再截断', () => { const items = Array.from({ length: HISTORY_VISIBLE_LIMIT + 3 }, (_, i) => ({ key: `k${i}` })) const slice = sliceHistoryItems(items, true) assert.equal(slice.visible.length, items.length) assert.equal(slice.hiddenCount, 0) assert.equal(slice.capped, false) }) test('恰好等于上限时不算截断', () => { const items = Array.from({ length: HISTORY_VISIBLE_LIMIT }, (_, i) => ({ key: `k${i}` })) const slice = sliceHistoryItems(items, false) assert.equal(slice.capped, false) assert.equal(slice.visible.length, HISTORY_VISIBLE_LIMIT) }) test('空值与非法上限安全降级', () => { assert.deepEqual(sliceHistoryItems(null, false), { visible: [], hiddenCount: 0, capped: false }) assert.deepEqual(sliceHistoryItems(undefined, false), { visible: [], hiddenCount: 0, capped: false }) assert.deepEqual(sliceHistoryItems([], false), { visible: [], hiddenCount: 0, capped: false }) const items = [{ key: 'a' }, { key: 'b' }] const slice = sliceHistoryItems(items, false, 0) assert.equal(slice.visible.length, 2, '非法上限回退到默认上限') assert.equal(slice.capped, false) }) test('自定义上限生效', () => { const items = Array.from({ length: 5 }, (_, i) => i) const slice = sliceHistoryItems(items, false, 2) assert.deepEqual(slice.visible, [0, 1]) assert.equal(slice.hiddenCount, 3) })