import test from 'node:test' import assert from 'node:assert/strict' import { readSource } from './helpers.ts' import { digitalHumanChangelogShort, digitalHumanVersionFileSizeText, normalizeDigitalHumanStatus, } from '../src/pages/records/digitalhuman-dto.ts' import { digitalHumanStatusDisplay } from '../src/pages/records/digitalhuman-status-display.ts' import { releaseDigitalHumanConfirmText } from '../src/pages/records/digitalhuman-release.ts' import { setLatestDigitalHumanConfirmText } from '../src/pages/records/digitalhuman-latest.ts' import { validateDigitalHumanUpload } from '../src/pages/records/digitalhuman-upload-model.ts' /** 对齐 admin.js:6331-6358/6520-6550:三态、固定两位MB、50字符说明、下载按钮条件、确认文案、zip 校验、上传进度。 */ test('align_digital_human_status_three_states', () => { assert.equal(normalizeDigitalHumanStatus('DRAFT'), 'DRAFT') assert.equal(normalizeDigitalHumanStatus('RELEASED'), 'RELEASED') assert.equal(normalizeDigitalHumanStatus('DEPRECATED'), 'DEPRECATED') assert.equal(normalizeDigitalHumanStatus('unknown'), 'DEPRECATED') assert.equal(normalizeDigitalHumanStatus(''), 'DEPRECATED') assert.deepEqual(digitalHumanStatusDisplay('DRAFT'), { text: '草稿', tag: 'info' }) assert.deepEqual(digitalHumanStatusDisplay('RELEASED'), { text: '已发布', tag: 'success' }) assert.deepEqual(digitalHumanStatusDisplay('DEPRECATED'), { text: '已废弃', tag: 'danger' }) }) test('align_digital_human_file_size_fixed_two_decimals_mb', () => { assert.equal(digitalHumanVersionFileSizeText(2 * 1024 * 1024), '2.00 MB') assert.equal(digitalHumanVersionFileSizeText(1.5 * 1024 * 1024), '1.50 MB') assert.equal(digitalHumanVersionFileSizeText(undefined), '-') assert.equal(digitalHumanVersionFileSizeText(0), '-') }) test('align_digital_human_changelog_50_char_truncate', () => { assert.equal(digitalHumanChangelogShort(''), '-') assert.equal(digitalHumanChangelogShort('短说明'), '短说明') const long = 'x'.repeat(60) assert.equal(digitalHumanChangelogShort(long), 'x'.repeat(50) + '...') }) test('align_digital_human_confirm_texts', () => { assert.equal(releaseDigitalHumanConfirmText('1.0.1'), '确认发布版本 1.0.1 吗?') assert.equal(setLatestDigitalHumanConfirmText('1.0.1'), '确认将版本 1.0.1 设为最新吗?客户端会自动检测更新。') }) test('align_digital_human_upload_zip_only', () => { // 仅 zip + 对应错误文案(对齐 admin.js:6520-6523)。 const { errors } = validateDigitalHumanUpload({ version: '1.0.1', file: { name: 'pkg.rar', size: 100 } }) assert.equal(errors.file, '仅支持 .zip 格式') assert.equal(validateDigitalHumanUpload({ version: '1.0.1', file: { name: 'pkg.zip', size: 100 } }).valid, true) }) test('align_digital_human_api_download_url', () => { const api = readSource('src/pages/records/digitalhuman-api.ts') assert.match(api, /download-url/, '含下载链接端点') assert.match(api, /onUploadProgress/, '上传带进度回调') }) test('align_digital_human_page_wiring', () => { const page = readSource('src/pages/records/RecordsDigitalHumanVersionPage.vue') assert.match(page, /pageSize\s*=\s*ref\(10\)/, '分页大小默认 10(全站统一)') assert.match(page, /page-nums/, '数字页码分页(像素复刻旧版)') assert.match(page, /设为最新/, '按钮名对齐“设为最新”') assert.match(page, /上传新版本/, '页头上传按钮名对齐') assert.match(page, /上传数字人程序 ZIP 包,系统会自动计算 MD5 并存储到 OSS。上传后状态为草稿,需要手动发布/, '上传弹窗描述对齐') assert.match(page, /正在上传/, '上传进度文案') assert.match(page, /digitalHumanDeleteConfirmText/, '删除确认文案走对齐模型') assert.match(page, /fetchDigitalHumanDownloadUrl/, 'RELEASED 下载按钮点击取链接') assert.match(page, /digitalHumanStatusDisplay/, '状态走展示层模型') const display = readSource('src/pages/records/digitalhuman-status-display.ts') assert.match(display, /已废弃/, '状态三态接入(草稿/已发布/已废弃)') assert.match(page, /digitalHumanChangelogShort/, '更新说明 50 字符截断') })