Files
crawler-plugin/admin-frontend-vue/tests/task-132.test.ts
T
huangzd1997 e063aedb8f task-132(记录与版本中心): 实现数字人版本列表加载
新增 digitalhuman-model.ts/数字人-api.ts(GET /api/digital-human/versions)。

TDD: task-132.test.ts 8 用例 RED→GREEN。
2026-09-05 17:38:01 +08:00

64 lines
2.9 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 { parseDigitalHumanVersions } from '../src/pages/records/digitalhuman-model.ts'
test('test_task_132_dh_version_list_load_normal_primary_path', () => {
// 正常主路径:camel 版本数组负载解析。
const list = parseDigitalHumanVersions({
success: true,
data: [
{ id: 1, version: '1.0.0', fileSize: 100, isLatest: true, status: 'RELEASED', downloadUrl: 'https://oss/dh.zip', createdAt: '2026-01-01T10:00:00' },
],
})
assert.equal(list.items.length, 1)
assert.equal(list.items[0].version, '1.0.0')
assert.equal(list.items[0].status, 'RELEASED')
assert.equal(list.items[0].isLatest, true)
assert.equal(list.items[0].downloadUrl, 'https://oss/dh.zip')
})
test('test_task_132_dh_version_list_load_normal_variant_input', () => {
// 正常变体:缺字段行回默认;小写状态归一大写。
const list = parseDigitalHumanVersions({ data: [{ id: 2, version: '2.0.0', status: 'draft' }] })
assert.equal(list.items[0].status, 'DRAFT')
assert.equal(list.items[0].fileSize, undefined)
})
test('test_task_132_dh_version_list_load_repeated_is_idempotent', () => {
// 正常重复:解析稳定、不改输入。
const payload = { data: [{ id: 1, version: 'v', status: 'RELEASED' }] }
assert.deepEqual(parseDigitalHumanVersions(payload), parseDigitalHumanVersions(payload))
})
test('test_task_132_dh_version_list_load_boundary_empty_input', () => {
// 边界空值:空列表/空负载。
assert.deepEqual(parseDigitalHumanVersions({ data: [] }).items, [])
assert.deepEqual(parseDigitalHumanVersions({}).items, [])
})
test('test_task_132_dh_version_list_load_boundary_single_item', () => {
// 边界单元素:单版本;缺 id 过滤。
const list = parseDigitalHumanVersions({ data: [{ id: 9, version: 'v', status: 'DRAFT' }, { version: 'x' }] })
assert.equal(list.items.length, 1)
})
test('test_task_132_dh_version_list_load_boundary_limit_or_missing_field', () => {
// 边界上限/缺字段:非对象过滤。
assert.deepEqual(parseDigitalHumanVersions({ data: ['bad'] }).items, [])
})
test('test_task_132_dh_version_list_load_invalid_input_rejected', () => {
// 异常输入:success=false 抛后端 message。
assert.throws(() => parseDigitalHumanVersions({ success: false, message: '无权访问' }), /无权访问/)
})
test('test_task_132_dh_version_list_load_dependency_failure_returns_actionable_message', () => {
// 依赖失败/加载走 adapterGET /api/digital-human/versions。
const api = readSource('src/pages/records/digitalhuman-api.ts')
assert.match(api, /\/api\/digital-human\/versions/)
assert.match(api, /fetchDigitalHumanVersions/)
const model = readSource('src/pages/records/digitalhuman-model.ts')
assert.equal(/axios|http\./.test(model), false, '数字人解析保持纯逻辑')
})