Files
huangzd1997 9f73af5911 task-21(会话/菜单/权限): 定义 AdminUser/AdminMenuNode 类型契约并对齐后端字段
admin.ts 增加 AdminRole 域与 roleKind/isSuperAdminRole/isAdminRole/roleLabel/
isSuperUser,AdminUser 补齐 isAdmin/creatorUsername/createdAt 等真实字段;
契约覆盖“分组可无 route、页面必有 route”。
2026-09-05 14:43:55 +08:00

69 lines
2.7 KiB
TypeScript

import test from 'node:test'
import assert from 'node:assert/strict'
import {
isAdminRole,
isSuperAdminRole,
isSuperUser,
roleKind,
roleLabel,
} from '../src/types/admin.ts'
test('test_task_021_type_contract_normal_primary_path', () => {
// 正常主路径:真实后端角色串映射到角色域。
assert.equal(roleKind('super_admin'), 'super_admin')
assert.equal(isSuperAdminRole('super_admin'), true)
assert.equal(isSuperUser({ role: 'super_admin' }), true)
})
test('test_task_021_type_contract_normal_variant_input', () => {
// 正常变体:admin/normal 归类正确,超级用户判定不为 true。
assert.equal(roleKind('admin'), 'admin')
assert.equal(roleKind('normal'), 'normal')
assert.equal(isSuperUser({ role: 'admin' }), false)
assert.equal(isAdminRole('admin'), true)
})
test('test_task_021_type_contract_normal_repeated_operation_is_idempotent', () => {
// 正常重复:角色归一稳定。
assert.equal(roleKind('SUPER_ADMIN'), roleKind('super_admin'))
assert.equal(roleLabel('admin'), roleLabel(' admin '))
})
test('test_task_021_type_contract_boundary_empty_input', () => {
// 边界空值:空角色/空用户不崩溃,归类为 null/非管理员。
assert.equal(roleKind(''), null)
assert.equal(roleKind(undefined), null)
assert.equal(roleKind(null), null)
assert.equal(isSuperUser(null), false)
assert.equal(isSuperUser(undefined), false)
})
test('test_task_021_type_contract_boundary_single_item', () => {
// 边界单元素:单个 super_admin 用户可进全部菜单。
assert.equal(isSuperUser({ role: 'super_admin' }), true)
assert.equal(roleLabel('super_admin'), '超级管理员')
})
test('test_task_021_type_contract_boundary_limit_or_missing_field', () => {
// 边界上限/缺字段:未知角色串不误判为管理员,展示空文案。
assert.equal(roleKind('owner'), null)
assert.equal(isAdminRole('owner'), false)
assert.equal(roleLabel('owner'), '')
})
test('test_task_021_type_contract_invalid_input_rejected', () => {
// 异常输入:大小写/空白容忍,非法字符串归类 null。
assert.equal(roleKind(' Super_Admin '), 'super_admin')
assert.equal(roleKind('xxx'), null)
assert.equal(isSuperAdminRole(''), false)
})
test('test_task_021_type_contract_dependency_failure_returns_actionable_message', () => {
// 依赖失败:菜单节点契约为分组可无 route、页面必须可路由。
const group = { key: 'admin_group_account', name: '账号权限' }
const page = { key: 'admin_users', name: '用户管理', route: '/account/users' }
assert.equal('route' in group, false, '分组节点允许无 route')
assert.equal(typeof page.route, 'string', '页面节点必须带 route')
assert.equal(roleLabel('super_admin').length > 0, true)
})