9f73af5911
admin.ts 增加 AdminRole 域与 roleKind/isSuperAdminRole/isAdminRole/roleLabel/ isSuperUser,AdminUser 补齐 isAdmin/creatorUsername/createdAt 等真实字段; 契约覆盖“分组可无 route、页面必有 route”。
69 lines
2.7 KiB
TypeScript
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)
|
|
})
|