This commit is contained in:
2026-08-03 11:45:45 +08:00
parent 9fe5428c44
commit bc44a7942d
33 changed files with 555 additions and 86 deletions
+28 -26
View File
@@ -8,57 +8,59 @@ import {
} from './adminNavigation'
describe('adminNavigation', () => {
it('keeps phase-one pages grouped without exposing the deferred dashboard', () => {
it('keeps only implemented phase-one menus visible while retaining prototype nodes as comments', () => {
expect(adminNavigation.map((item) => item.title)).toEqual([
'业务管理',
'基础资料',
'客户管理',
'国内仓',
'头程订单',
'通用',
'系统管理',
])
expect(adminNavigation[0].children?.map((item) => item.title)).toEqual([
'客户管理',
'客户列表',
'企业审核',
'仓库管理',
'头程订单',
])
expect(adminNavigation[1].children?.map((item) => item.title)).toEqual(['快递公司', '往来单位'])
expect(adminNavigation[2].children?.map((item) => item.title)).toEqual([
'内部用户',
'角色管理',
expect(adminNavigation.find((item) => item.key === 'general')?.children?.map((item) => item.title)).toContain('快递公司')
expect(adminNavigation.find((item) => item.key === 'system')?.children?.map((item) => item.title)).toEqual([
'用户管理',
'角色权限',
'菜单权限',
])
})
it('assigns every page a unique path and permission code', () => {
it('assigns every page a unique path and keeps real permissions unique', () => {
const leaves = getNavigationLeaves(adminNavigation)
const paths = leaves.map((item) => item.path)
const permissions = leaves.map((item) => item.permission)
const permissions = leaves.flatMap((item) => item.permission ? [item.permission] : [])
expect(paths).toEqual([
'/customers',
'/customers/reviews',
'/warehouses',
'/orders/first-leg',
'/master-data/express-companies',
'/master-data/counterparties',
'/system/users',
'/system/roles',
'/system/permissions',
])
expect(paths).not.toContain('/dashboard')
expect(paths).not.toContain('/prototype/finance/profit-report')
expect(paths).not.toContain('/prototype/system-management/brand-settings')
expect(paths).toContain('/system/permissions')
expect(new Set(paths).size).toBe(paths.length)
expect(new Set(permissions).size).toBe(permissions.length)
expect(leaves.every((item) => Boolean(item.icon))).toBe(true)
})
it('recursively filters leaves without mutating the source tree', () => {
it('filters protected pages without mutating the source tree', () => {
const sourceSnapshot = JSON.stringify(adminNavigation, (key, value) => key === 'icon' ? '[icon]' : value)
const filtered = filterAdminNavigation(adminNavigation, new Set(['platform:permission:list']))
expect(getNavigationLeaves(filtered).map((item) => item.path)).toEqual(['/system/permissions'])
const paths = getNavigationLeaves(filtered).map((item) => item.path)
expect(paths).toContain('/system/permissions')
expect(paths).not.toContain('/prototype/finance/profit-report')
expect(paths).not.toContain('/customers')
expect(filtered).not.toBe(adminNavigation)
expect(filtered[0]).not.toBe(adminNavigation[2])
expect(filtered.find((item) => item.key === 'system')).not.toBe(adminNavigation.find((item) => item.key === 'system'))
expect(JSON.stringify(adminNavigation, (key, value) => key === 'icon' ? '[icon]' : value)).toBe(sourceSnapshot)
})
it('supports manually hiding a module without removing its route definition', () => {
const filtered = filterAdminNavigation([{ key: 'hidden', title: '隐藏模块', icon: adminNavigation[0].icon, path: '/hidden', hidden: true }], new Set())
expect(filtered).toEqual([])
})
it('keeps directories based on accessible descendants instead of a directory permission', () => {
const nodes: AdminNavigationNode[] = [{
key: 'operations',