import type { PermissionCode } from '@lingxi/shared'; import { describe, expect, it } from 'vitest'; import { filterNavByPermissions, findActiveNav, getBreadcrumbs, NAV_MODULES } from './nav-config'; describe('导航配置', () => { it('拥有全部权限时展示全部模块与菜单', () => { const permissions = new Set( NAV_MODULES.flatMap((module) => module.items.map((item) => item.permission)).filter( (code): code is PermissionCode => code !== undefined, ), ); const modules = filterNavByPermissions(NAV_MODULES, permissions); expect(modules.map((module) => module.key)).toEqual(NAV_MODULES.map((module) => module.key)); }); it('缺少权限点时过滤菜单,模块没有子菜单时整组隐藏', () => { const modules = filterNavByPermissions(NAV_MODULES, new Set(['script:read'])); const script = modules.find((module) => module.key === 'script'); expect(script?.items.map((item) => item.key)).toEqual(['library']); expect(modules.some((module) => module.key === 'platform')).toBe(false); }); it('只有无权限要求的菜单时仍然可见', () => { const modules = filterNavByPermissions(NAV_MODULES, new Set()); expect(modules.map((module) => module.key)).toEqual(['dashboard']); }); it('按路径定位当前模块与菜单', () => { const active = findActiveNav(NAV_MODULES, '/material/quick-review'); expect(active?.module.key).toBe('material'); expect(active?.item?.label).toBe('快筛'); expect(findActiveNav(NAV_MODULES, '/not-exists')).toBeNull(); }); it('面包屑从导航配置派生', () => { expect(getBreadcrumbs(NAV_MODULES, '/')).toEqual([{ key: 'home', label: '工作台', path: '/' }]); const breadcrumbs = getBreadcrumbs(NAV_MODULES, '/platform/users'); expect(breadcrumbs.map((entry) => entry.label)).toEqual(['工作台', '平台', '用户与组织']); }); });