import test from 'node:test' import assert from 'node:assert/strict' import { readSource } from './helpers.ts' import { emptyMenuManageForm, toMenuCreateRequest, toMenuUpdateRequest, validateMenuManageForm } from '../src/pages/account/menu-manage-model.ts' // 验收反馈:权限标识/路由由后台自动生成,不再出现在菜单表单里。 // 前端契约:表单不采集、校验不要求、请求体不携带;后端创建时自动生成、编辑时保持原值。 test('align_menu_auto_key_normal_primary_path', () => { const page = readSource('src/pages/account/MenusPage.vue') assert.ok(!page.includes('权限标识'), '表单不应再有“权限标识”项') assert.ok(!page.includes('label="路由"'), '表单不应再有“路由”项') }) test('align_menu_auto_key_normal_variant_input', () => { const createReq = toMenuCreateRequest({ ...emptyMenuManageForm(), name: '新菜单' }) const updateReq = toMenuUpdateRequest({ ...emptyMenuManageForm(), name: '改名' }) assert.ok(!('columnKey' in createReq), '创建请求不携带权限标识') assert.ok(!('routePath' in createReq), '创建请求不携带路由') assert.ok(!('columnKey' in updateReq), '更新请求不携带权限标识') assert.ok(!('routePath' in updateReq), '更新请求不携带路由') }) test('align_menu_auto_key_boundary_empty_input', () => { const result = validateMenuManageForm({ ...emptyMenuManageForm(), name: '有名称' }) assert.equal(result.valid, true, '未填权限标识/路由也应通过表单校验') }) test('align_menu_auto_key_repeated_operation_is_idempotent', () => { const model = readSource('src/pages/account/menu-manage-model.ts') assert.match(model, /后台自动生成/, 'model 需注释说明自动生成语义') }) test('align_menu_auto_key_dependency_failure_returns_actionable_message', () => { // 后端契约:创建缺省自动生成 menu_auto_<类型>_<时间戳> 与 auto/<标识>,编辑缺省保持原值。 const java = readSource('../backend-java/src/main/java/com/nanri/aiimage/modules/permission/service/PermissionMenuService.java') assert.match(java, /generateColumnKey|menu_auto_/, '后端含权限标识自动生成逻辑') assert.match(java, /generateRoutePath|auto\/|"auto\/" \+ columnKey/, '后端含路由自动生成逻辑') assert.match(java, /entity\.getColumnKey\(\)/, '编辑缺省保持原权限标识') })