66 lines
3.3 KiB
TypeScript
66 lines
3.3 KiB
TypeScript
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), '')
|
|
assert.equal(digitalHumanStatusDisplay('').text, '草稿', '未知状态归一草稿')
|
|
})
|
|
|
|
test('test_task_261_dh_boundary_single_item', () => {
|
|
const page = readSource('src/pages/records/RecordsDigitalHumanVersionPage.vue')
|
|
assert.match(page, /formatFileSize/, '文件大小走共享格式化')
|
|
assert.match(page, /md5Short/, 'MD5 截断展示')
|
|
assert.match(page, /canReleaseDigitalHumanVersion/, '发布按钮按状态显隐')
|
|
})
|
|
|
|
test('test_task_261_dh_boundary_limit_or_missing_field', () => {
|
|
// 边界上限:文件大小格式化(复用了版本页 formatFileSize)。
|
|
const fmt = readSource('src/pages/records/version-format.ts')
|
|
assert.match(fmt, /formatFileSize/)
|
|
})
|
|
|
|
test('test_task_261_dh_invalid_input_rejected', () => {
|
|
// 异常:删除需二次确认;删除走后端 DELETE;删除失败有兜底。
|
|
const page = readSource('src/pages/records/RecordsDigitalHumanVersionPage.vue')
|
|
assert.match(page, /此操作不可恢复/, '删除需危险二次确认')
|
|
assert.match(page, /删除失败/, '删除失败有兜底文案')
|
|
const api = readSource('src/pages/records/digitalhuman-api.ts')
|
|
assert.match(api, /http\.delete/, '删除调用 DELETE 适配')
|
|
})
|
|
|
|
test('test_task_261_dh_dependency_failure_returns_actionable_message', () => {
|
|
// 依赖失败:上传成功文案含“请在列表中点击发布”。
|
|
const page = readSource('src/pages/records/RecordsDigitalHumanVersionPage.vue')
|
|
assert.match(page, /上传成功!版本:/, '上传成功文案需含版本')
|
|
assert.match(page, /请在列表中点击“发布”按钮/, '上传成功引导发布')
|
|
})
|