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

81 lines
3.7 KiB
TypeScript

import test from 'node:test'
import assert from 'node:assert/strict'
import { readSource } from './helpers.ts'
import { historyPanelTypeLabel } from '../src/pages/records/history-type.ts'
import { parseHistoryUserOptions } from '../src/pages/records/history-user-option.ts'
import { buildPreviewDescriptor } from '../src/pages/records/history-preview.ts'
import type { HistoryRecordItem } from '../src/pages/records/history-dto.ts'
// module 13 task 259:生成记录页对齐 admin panel-history(指定用户下拉 + 起止时间、类型中文、缩略图预览、空态)。
test('test_task_259_history_normal_primary_path', () => {
// 正常主路径:类型映射覆盖常见 panel_type。
assert.equal(historyPanelTypeLabel('textToImage'), '反推词')
assert.equal(historyPanelTypeLabel('productMainImage'), '产品主图')
assert.equal(historyPanelTypeLabel('imageEdit'), '图片编辑')
})
test('test_task_259_history_normal_variant_input', () => {
// 正常变体:未知/空类型回退原文或占位。
assert.equal(historyPanelTypeLabel('someNew'), 'someNew')
assert.equal(historyPanelTypeLabel(''), '—')
assert.equal(historyPanelTypeLabel(null), '—')
})
test('test_task_259_history_normal_repeated_operation_is_idempotent', () => {
assert.equal(historyPanelTypeLabel('buyerShow'), '买家秀')
assert.equal(historyPanelTypeLabel('buyerShow'), '买家秀')
})
test('test_task_259_history_boundary_empty_input', () => {
// 边界:用户下拉解析过滤无 id/非法项。
const parsed = parseHistoryUserOptions({
success: true,
data: { items: [{ id: 1, username: 'admin' }, { id: 2, username: 'bob' }, { username: 'no-id' }, null] },
})
assert.deepEqual(parsed, [
{ id: 1, username: 'admin' },
{ id: 2, username: 'bob' },
])
assert.deepEqual(parseHistoryUserOptions({ success: true, data: { items: [] } }), [])
})
test('test_task_259_history_boundary_single_item', () => {
// 边界:预览描述单条去重与限数。
const item: HistoryRecordItem = {
id: 1,
userId: 1,
username: 'u',
createdAt: '',
panelType: 'x',
originalUrls: [],
resultUrls: ['http://a/1.png', 'http://a/1.png', 'http://a/2.png'],
longImageUrl: 'http://a/long.png',
}
assert.deepEqual(buildPreviewDescriptor(item, 2).images, ['http://a/1.png', 'http://a/2.png'])
})
test('test_task_259_history_boundary_limit_or_missing_field', () => {
const page = readSource('src/pages/records/RecordsHistoryPage.vue')
assert.match(page, /指定用户/, '筛选需有“指定用户”标签(admin 语义)')
assert.match(page, /el-date-picker/, '需用日期时间选择器')
assert.match(page, /historyPanelTypeLabel|panelTypeLabel/, '类型列需走中文映射')
assert.match(page, /formatDateTime/, '时间统一格式化')
})
test('test_task_259_history_invalid_input_rejected', () => {
const page = readSource('src/pages/records/RecordsHistoryPage.vue')
assert.match(page, /historyEmptyText/, '空态文案来自 history-feedback')
const feedback = readSource('src/pages/records/history-feedback.ts')
assert.match(feedback, /暂无/, 'history-feedback 提供“暂无”空态文案')
assert.match(page, /buildPreviewDescriptor|preview/, '需有结果预览能力')
})
test('test_task_259_history_dependency_failure_returns_actionable_message', () => {
// 依赖失败:用户下拉由 API 适配加载(不内联裸 fetch 拼 /api/admin/users 在页面)。
const page = readSource('src/pages/records/RecordsHistoryPage.vue')
assert.match(page, /fetchHistoryUserOptions|fetchUserList|loadUserOptions/, '用户选项应经适配函数加载')
const api = readSource('src/pages/records/history-api.ts')
assert.match(api, /\/api\/admin\/users/, '适配层请求用户列表')
})