Files

107 lines
3.9 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import test from 'node:test'
import assert from 'node:assert/strict'
import { readSource } from './helpers.ts'
import { parseDedupeTotalPage, toDedupeTotalItem } from '../src/pages/asin/dedupe-total-model.ts'
test('test_task_062_dedupe_list_normal_primary_path', () => {
// 正常主路径:Java DedupeTotalDataPageVo(camel) 解析为前端分页结果。
const page = parseDedupeTotalPage({
success: true,
data: {
items: [
{
id: 1,
dataValue: 'B0ABC123',
country: 'DE',
groupId: 3,
groupName: '华东组',
uploaderUserId: 2,
username: '张伟恒',
createdAt: '2026-01-01T10:00:00',
},
],
total: 1,
page: 1,
pageSize: 15,
},
})
assert.equal(page.items.length, 1)
const item = page.items[0]
assert.equal(item.dataValue, 'B0ABC123')
assert.equal(item.country, 'DE')
assert.equal(item.groupName, '华东组')
assert.equal(item.username, '张伟恒')
assert.equal(item.id, 1)
assert.equal(page.total, 1)
assert.equal(page.pageSize, 15)
})
test('test_task_062_dedupe_list_normal_variant_input', () => {
// 正常变体:已解包 VO 直传同样归一;缺分组/上传者字段可空。
const page = parseDedupeTotalPage({
items: [{ id: 2, dataValue: 'X', country: 'UK' }],
total: 5,
page: 2,
pageSize: 20,
})
assert.equal(page.items[0].country, 'UK')
assert.equal(page.items[0].groupId, null)
assert.equal(page.items[0].username, '')
assert.equal(page.page, 2)
assert.equal(page.pageSize, 20)
})
test('test_task_062_dedupe_list_normal_repeated_operation_is_idempotent', () => {
// 正常重复:解析不改输入、结果稳定。
const payload = { data: { items: [{ id: 3, dataValue: 'A', country: 'DE' }], total: 1, page: 1, pageSize: 15 } }
assert.deepEqual(parseDedupeTotalPage(payload), parseDedupeTotalPage(payload))
})
test('test_task_062_dedupe_list_boundary_empty_input', () => {
// 边界空值:空负载回默认分页结果(空列表/total 0/page1/页大小 15)。
const page = parseDedupeTotalPage({})
assert.deepEqual(page.items, [])
assert.equal(page.total, 0)
assert.equal(page.page, 1)
assert.equal(page.pageSize, 10)
})
test('test_task_062_dedupe_list_boundary_single_item', () => {
// 边界单元素:单条记录;缺 id 的行被过滤。
const page = parseDedupeTotalPage({
data: {
items: [{ id: 7, dataValue: 'Z' }, { dataValue: 'no-id' }],
total: 2,
page: 1,
pageSize: 15,
},
})
assert.equal(page.items.length, 1)
assert.equal(page.items[0].id, 7)
})
test('test_task_062_dedupe_list_boundary_limit_or_missing_field', () => {
// 边界上限/缺字段:缺 page/pageSize 用默认;空 dataValue 保留空串。
const page = parseDedupeTotalPage({ items: [{ id: 9, dataValue: '' }], total: 0, page: 1 })
assert.equal(page.items[0].dataValue, '')
assert.equal(page.pageSize, 10)
assert.equal(toDedupeTotalItem({ id: 10, dataValue: 'v' })?.dataValue, 'v')
})
test('test_task_062_dedupe_list_invalid_input_rejected', () => {
// 异常输入:success=false 抛后端 message;缺 id 行不入列表。
assert.throws(() => parseDedupeTotalPage({ success: false, message: '无权访问数据去重总数据' }), /无权访问/)
assert.equal(toDedupeTotalItem('garbage'), null)
})
test('test_task_062_dedupe_list_dependency_failure_returns_actionable_message', () => {
// 依赖失败/加载走 adapterGET /api/admin/dedupe-total-data + 共享筛选归一,页面不内联。
const api = readSource('src/pages/asin/dedupe-total-api.ts')
assert.match(api, /dedupe-total-data/)
assert.match(api, /http\.get/)
assert.match(api, /parseDedupeTotalPage/)
assert.match(api, /normalizeAsinPageParams|toAsinPageQuery/)
const model = readSource('src/pages/asin/dedupe-total-model.ts')
assert.equal(/axios|http\./.test(model), false, '去重列表解析保持纯逻辑')
})