Files

41 lines
2.4 KiB
TypeScript

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\/<columnKey>|"auto\/" \+ columnKey/, '后端含路由自动生成逻辑')
assert.match(java, /entity\.getColumnKey\(\)/, '编辑缺省保持原权限标识')
})