import test from 'node:test' import assert from 'node:assert/strict' import { readSource } from './helpers.ts' import { selectableResultRows, shopDataPageInfo } from '../src/pages/tasks/shop-data-list-state.ts' test('test_task_111_shop_data_page_normal_primary_path', () => { // 正常主路径:分页信息派生(页码/首末/前后页)。 const info = shopDataPageInfo(2, 20, 55) assert.equal(info.page, 2) assert.equal(info.totalPages, 3) assert.equal(info.from, 21) assert.equal(info.to, 40) assert.equal(info.hasPrev, true) assert.equal(info.hasNext, true) }) test('test_task_111_shop_data_page_normal_variant_input', () => { // 正常变体:末页边界。 const info = shopDataPageInfo(3, 20, 55) assert.equal(info.page, 3) assert.equal(info.to, 55) assert.equal(info.hasNext, false) }) test('test_task_111_shop_data_page_repeated_is_idempotent', () => { // 正常重复:分页计算稳定。 assert.deepEqual(shopDataPageInfo(1, 20, 10), shopDataPageInfo(1, 20, 10)) }) test('test_task_111_shop_data_page_boundary_empty_input', () => { // 边界空值:空列表回第 1 页空态。 const info = shopDataPageInfo(1, 20, 0) assert.equal(info.totalPages, 1) assert.equal(info.page, 1) assert.equal(info.to, 0) }) test('test_task_111_shop_data_page_boundary_single_item', () => { // 边界单元素:单组单行可选结果派生。 const rows = selectableResultRows([{ results: [{ resultId: '5' }] } as never]) assert.equal(rows.length, 1) assert.equal(rows[0], '5') }) test('test_task_111_shop_data_page_boundary_limit_or_missing_field', () => { // 边界上限/缺字段:页码越界钳到末页;无结果组不产出行。 const info = shopDataPageInfo(99, 20, 55) assert.equal(info.page, 3) assert.deepEqual(selectableResultRows([]), []) }) test('test_task_111_shop_data_page_invalid_input_rejected', () => { // 异常输入:NaN 页码按第 1 页处理。 const info = shopDataPageInfo(Number.NaN, 20, 10) assert.equal(info.page, 1) assert.equal(info.from, 1) }) test('test_task_111_shop_data_page_dependency_failure_returns_actionable_message', () => { // 依赖失败/可操作:分页状态纯逻辑、无框架/http。 const mod = readSource('src/pages/tasks/shop-data-list-state.ts') assert.equal(/axios|http\.|vue/.test(mod), false, '分页状态保持纯逻辑') assert.match(mod, /selectableResultRows/) })