From 6329695fc28611767bbeb513c81e0273cbc620d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E8=87=AA=E8=BE=BE?= <980324341@qq.com> Date: Sat, 5 Sep 2026 22:25:51 +0800 Subject: [PATCH] =?UTF-8?q?task-268(admin.html=E8=A7=82=E6=84=9F=E5=AF=B9?= =?UTF-8?q?=E9=BD=90):=2015=20=E9=A1=B5=E9=9D=99=E6=80=81=E8=87=AA?= =?UTF-8?q?=E6=9F=A5=E4=B8=8D=E5=8F=98=E5=BC=8F=E6=B5=8B=E8=AF=95=EF=BC=88?= =?UTF-8?q?=E8=8F=9C=E5=8D=95=E6=97=A0=E4=B8=8A=E4=B8=8B=E7=A7=BB/?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E7=BB=9F=E4=B8=80/=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E4=B8=AD=E6=96=87/=E6=8E=A5=E7=BA=BF=E5=85=A5=E5=8F=A3/?= =?UTF-8?q?=E4=BE=8B=E5=A4=96=E9=A1=B5=E8=87=AA=E6=B4=BD=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- admin-frontend-vue/tests/task-268.test.ts | 87 +++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 admin-frontend-vue/tests/task-268.test.ts diff --git a/admin-frontend-vue/tests/task-268.test.ts b/admin-frontend-vue/tests/task-268.test.ts new file mode 100644 index 00000000..a9d755ab --- /dev/null +++ b/admin-frontend-vue/tests/task-268.test.ts @@ -0,0 +1,87 @@ +import test from 'node:test' +import assert from 'node:assert/strict' +import { readSource } from './helpers.ts' +import { ADMIN_THEME } from '../src/styles/theme.ts' + +// module 13 task 268:15 页逐页对齐的静态自查——校验战役成果不回归、 +// 关键页面的“已淘汰交互/中文展示/统一时间”等约定保持。 + +const PAGES = [ + 'src/pages/account/UsersPage.vue', + 'src/pages/account/MenusPage.vue', + 'src/pages/account/GroupsPage.vue', + 'src/pages/asin/DedupeRegistryPage.vue', + 'src/pages/asin/AsinInvalidPage.vue', + 'src/pages/asin/ProductCategoryPage.vue', + 'src/pages/asin/QueryAsinPage.vue', + 'src/pages/asin/SkipPricePage.vue', + 'src/pages/records/RecordsHistoryPage.vue', + 'src/pages/records/RecordsSoftwareVersionPage.vue', + 'src/pages/records/RecordsDigitalHumanVersionPage.vue', + 'src/pages/shop/ShopKeysPage.vue', + 'src/pages/shop/ShopManagePage.vue', + 'src/pages/tasks/ImageVideoTasksPage.vue', + 'src/pages/tasks/ShopDataTasksPage.vue', +] + +test('test_task_268_audit_normal_primary_path', () => { + // 蓝白浅色 token 保持(不变量来自 241/243)。 + assert.equal(ADMIN_THEME.primary, '#4f78a5') + assert.equal(ADMIN_THEME.sidebar, '#f8fbfe') +}) + +test('test_task_268_audit_normal_variant_input', () => { + // 菜单页不再有上移/下移与列表内权限标识/路由列(产品已淘汰)。 + const page = readSource(PAGES[1]) + assert.equal(/上移|下移|moveMenuRow/.test(page), false, '菜单页无上移/下移') + assert.equal(/]*prop="(columnKey|routePath)"/.test(page), false) + assert.match(page, /menuForm\.sortOrder/, '排序仍由对话框维护') +}) + +test('test_task_268_audit_normal_repeated_operation_is_idempotent', () => { + // 用户页角色中文 + 新建按钮已接线(非空按钮)。 + const users = readSource(PAGES[0]) + assert.match(users, /roleLabel\(/, '角色走中文映射') + assert.match(users, /@click="openCreate"/, '新建用户已绑定弹窗') + assert.match(users, /CreateUserDialog/, '新建弹窗接入') +}) + +test('test_task_268_audit_boundary_empty_input', () => { + // 15 个对齐目标页文件全部存在(防止任务漏做/误删)。 + for (const p of PAGES) { + const src = readSource(p) + assert.ok(src.length > 0, `${p} 存在且非空`) + } +}) + +test('test_task_268_audit_boundary_single_item', () => { + // 时间统一:含“时间”展示内容的页面引用 formatDateTime;无时间列页面不强引。 + for (const p of PAGES) { + const src = readSource(p) + if (/创建时间|更新时间|生成时间|发布时间|提交时间|完成时间|修改时间|上架时间/.test(src)) { + assert.match(src, /formatDateTime/, `${p} 含时间展示但未用 formatDateTime`) + } + } +}) + +test('test_task_268_audit_boundary_limit_or_missing_field', () => { + // 去重汇总已补齐导入/导出/删除导入入口(任务 254 接线成果)。 + const dedupe = readSource(PAGES[3]) + assert.match(dedupe, /导出/, '去重汇总有导出') + assert.match(dedupe, /导入/, '去重汇总有导入相关入口') +}) + +test('test_task_268_audit_invalid_input_rejected', () => { + // 例外页 DuplicateCheck 保持自洽:不引用换皮 token 专属的 formatDateTime 时间列约定—— + // 这里校验它仍是独立文件且未被改成表格时间直出(防御误回退)。 + const dup = readSource('src/pages/tasks/DuplicateCheckPage.vue') + assert.ok(dup.length > 0, '例外页文件存在') + assert.match(dup, /dup-console|matrix|kpi/i, '例外页保留自身设计') +}) + +test('test_task_268_audit_dependency_failure_returns_actionable_message', () => { + // 分组页编辑器已接入且删除/编辑权限按组长限制(任务 253 接线)。 + const groups = readSource(PAGES[2]) + assert.match(groups, /GroupEditorDialog/, '分组编辑器接入') + assert.match(groups, /确定删除分组/, '删除确认含分组名') +})