import test from 'node:test' import assert from 'node:assert/strict' import { readSource } from './helpers.ts' import { digitalHumanStatusDisplay, latestBadgeText } from '../src/pages/records/digitalhuman-status-display.ts' import { canReleaseDigitalHumanVersion } from '../src/pages/records/digitalhuman-release.ts' import { canSetLatestDigitalHumanVersion } from '../src/pages/records/digitalhuman-latest.ts' import { md5Short } from '../src/pages/records/digitalhuman-format.ts' // module 13 task 261:数字人版本页对齐 admin panel-digital-human-version(状态/最新★/大小/MD5截断/操作矩阵/上传文案)。 test('test_task_261_dh_normal_primary_path', () => { // 正常主路径:状态映射与发布/设最新判定。 assert.deepEqual(digitalHumanStatusDisplay('DRAFT'), { text: '草稿', tag: 'info' }) assert.deepEqual(digitalHumanStatusDisplay('RELEASED'), { text: '已发布', tag: 'success' }) assert.equal(canReleaseDigitalHumanVersion('DRAFT'), true) assert.equal(canSetLatestDigitalHumanVersion('RELEASED'), true) assert.equal(canSetLatestDigitalHumanVersion('DRAFT'), false) }) test('test_task_261_dh_normal_variant_input', () => { assert.equal(md5Short('a'.repeat(12)), 'a'.repeat(12), '恰好 12 位原样') assert.equal(md5Short('a'.repeat(20)), `${'a'.repeat(12)}…`, '超长截 12 位并省略') assert.equal(md5Short(''), '') assert.equal(md5Short(null), '') }) test('test_task_261_dh_normal_repeated_operation_is_idempotent', () => { assert.equal(digitalHumanStatusDisplay('draft').text, '草稿') assert.equal(digitalHumanStatusDisplay('draft').text, '草稿') }) test('test_task_261_dh_boundary_empty_input', () => { assert.equal(latestBadgeText(true), '最新') assert.equal(latestBadgeText(false), '') // 未知状态归一 已废弃(对齐 admin.js 三态)。 assert.equal(digitalHumanStatusDisplay('').text, '已废弃') }) test('test_task_261_dh_boundary_single_item', () => { const page = readSource('src/pages/records/RecordsDigitalHumanVersionPage.vue') assert.match(page, /digitalHumanVersionFileSizeText/, '文件大小固定两位 MB(对齐 admin)') assert.match(page, /substring\(0, 12\)/, 'MD5 截 12 位展示') assert.match(page, /canReleaseDigitalHumanVersion/, '发布按钮按状态显隐') }) test('test_task_261_dh_boundary_limit_or_missing_field', () => { // 边界上限:文件大小固定 (bytes/1024/1024).toFixed(2)+' MB'(对齐 admin.js:6340)。 const dto = readSource('src/pages/records/digitalhuman-dto.ts') assert.match(dto, /1024 \/ 1024\)\.toFixed\(2\)/, '固定两位小数 MB') }) test('test_task_261_dh_invalid_input_rejected', () => { // 异常:删除需二次确认(对齐 admin.js:6356 文案);删除走后端 DELETE;删除失败有兜底。 const page = readSource('src/pages/records/RecordsDigitalHumanVersionPage.vue') assert.match(page, /digitalHumanDeleteConfirmText/, '删除确认文案走对齐模型') assert.match(page, /删除失败/, '删除失败有兜底文案') const api = readSource('src/pages/records/digitalhuman-api.ts') assert.match(api, /http\.delete/, '删除调用 DELETE 适配') const dto = readSource('src/pages/records/digitalhuman-dto.ts') assert.match(dto, /确认删除版本 .* 吗?该操作会删除对应文件,无法恢复/, '删除文案对齐 admin') }) test('test_task_261_dh_dependency_failure_returns_actionable_message', () => { // 依赖失败:上传成功文案含“请在列表中点击发布”。 const page = readSource('src/pages/records/RecordsDigitalHumanVersionPage.vue') assert.match(page, /上传成功!版本:/, '上传成功文案需含版本') assert.match(page, /请在列表中点击“发布”按钮/, '上传成功引导发布') })