Files
crawler-plugin/admin-frontend-vue/tests/task-68.test.ts
T

93 lines
3.5 KiB
TypeScript
Raw 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 { parseInvalidAsinPage, recordSourceLabel, toInvalidAsinItem } from '../src/pages/invalidasin/invalid-asin-model.ts'
test('test_task_068_brand_db_list_normal_primary_path', () => {
// 正常主路径:解析 InvalidAsinDataPageVo(camel) 列表项。
const page = parseInvalidAsinPage({
success: true,
data: {
items: [
{
id: 1,
dataValue: 'B0ABC',
brand: '苹果',
groupId: 2,
groupName: '华东组',
recordSource: 'MANUAL',
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, 'B0ABC')
assert.equal(item.brand, '苹果')
assert.equal(item.groupName, '华东组')
assert.equal(item.recordSource, 'MANUAL')
assert.equal(page.total, 1)
})
test('test_task_068_brand_db_list_normal_variant_input', () => {
// 正常变体:缺分组/来源给默认;来源标签映射。
const item = toInvalidAsinItem({ id: 2, dataValue: 'X', brand: 'b', recordSource: 'AUTO' })
assert.equal(item?.groupId, null)
assert.equal(item?.groupName, '')
assert.equal(item?.createdAt, undefined)
assert.equal(recordSourceLabel('MANUAL'), '手动新增')
assert.equal(recordSourceLabel('AUTO'), '自动导入')
assert.equal(recordSourceLabel(''), '自动导入')
})
test('test_task_068_brand_db_list_normal_repeated_operation_is_idempotent', () => {
// 正常重复:解析不改输入、结果稳定。
const payload = { data: { items: [{ id: 3, dataValue: 'A', brand: 'b' }], total: 1, page: 1, pageSize: 15 } }
assert.deepEqual(parseInvalidAsinPage(payload), parseInvalidAsinPage(payload))
})
test('test_task_068_brand_db_list_boundary_empty_input', () => {
// 边界空值:空负载回默认分页结果。
const page = parseInvalidAsinPage({})
assert.deepEqual(page.items, [])
assert.equal(page.total, 0)
assert.equal(page.page, 1)
assert.equal(page.pageSize, 10)
})
test('test_task_068_brand_db_list_boundary_single_item', () => {
// 边界单元素:单条记录;缺 id 行被过滤。
const page = parseInvalidAsinPage({
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_068_brand_db_list_boundary_limit_or_missing_field', () => {
// 边界上限/缺字段:缺来源按 AUTO 展示;dataValue 空保留空串。
const item = toInvalidAsinItem({ id: 9, dataValue: '' })
assert.equal(item?.dataValue, '')
assert.equal(item?.recordSource, '')
})
test('test_task_068_brand_db_list_invalid_input_rejected', () => {
// 异常输入:success=false 抛后端 message。
assert.throws(() => parseInvalidAsinPage({ success: false, message: '无权访问' }), /无权访问/)
assert.equal(toInvalidAsinItem('garbage'), null)
})
test('test_task_068_brand_db_list_dependency_failure_returns_actionable_message', () => {
// 依赖失败/加载走 adapterGET /api/admin/invalid-asin-data 解析分页。
const api = readSource('src/pages/invalidasin/invalid-asin-api.ts')
assert.match(api, /invalid-asin-data/)
assert.match(api, /http\.get/)
assert.match(api, /parseInvalidAsinPage/)
const mod = readSource('src/pages/invalidasin/invalid-asin-model.ts')
assert.equal(/axios|http\./.test(mod), false, '品牌数据库模型保持纯逻辑')
})