import test from 'node:test' import assert from 'node:assert/strict' import { readSource } from './helpers.ts' import { isRouteAllowed } from '../src/router/helpers.ts' test('test_task_033_route_permission_guard_normal_primary_path', () => { // 正常主路径:页面带 menuKey 且普通用户拥有该菜单 key 时放行。 const tree = [{ key: 'admin_users', name: '用户管理', route: '/account/users' }] assert.equal(isRouteAllowed(false, 'admin_users', tree), true) }) test('test_task_033_route_permission_guard_normal_variant_input', () => { // 正常变体:超级管理员即便不带该 key 也放行;无 menuKey 页面不受限。 assert.equal(isRouteAllowed(true, 'whatever', []), true) assert.equal(isRouteAllowed(false, undefined, []), true) }) test('test_task_033_route_permission_guard_normal_repeated_operation_is_idempotent', () => { // 正常重复:判定纯函数,输入不变结果稳定。 const tree = [{ key: 'g', name: '组', children: [{ key: 'users', name: '用户', route: '/users' }] }] assert.equal(isRouteAllowed(false, 'users', tree), isRouteAllowed(false, 'users', tree)) }) test('test_task_033_route_permission_guard_boundary_empty_input', () => { // 边界空值:空菜单树对普通用户视为无权限(除无 menuKey 页面外)。 assert.equal(isRouteAllowed(false, 'admin_users', []), false) assert.equal(isRouteAllowed(false, undefined, []), true) }) test('test_task_033_route_permission_guard_boundary_single_item', () => { // 边界单元素:只有单个可路由页面时的命中与未命中。 const tree = [{ key: 'solo', name: '单页', route: '/solo' }] assert.equal(isRouteAllowed(false, 'solo', tree), true) assert.equal(isRouteAllowed(false, 'other', tree), false) }) test('test_task_033_route_permission_guard_boundary_limit_or_missing_field', () => { // 边界上限/缺字段:深层叶子菜单 key 也能命中。 const tree = [{ key: 'g', name: '组', children: [{ key: 'inner', name: '内', route: '/inner' }] }] assert.equal(isRouteAllowed(false, 'inner', tree), true) }) test('test_task_033_route_permission_guard_invalid_input_rejected', () => { // 异常输入:null/空 key 视为无菜单门槛页面一律放行(不误拦开放页)。 assert.equal(isRouteAllowed(false, null as unknown as string, []), true) assert.equal(isRouteAllowed(false, '', []), true) assert.equal(isRouteAllowed(false, 'x', []), false) }) test('test_task_033_route_permission_guard_dependency_failure_returns_actionable_message', () => { // 依赖失败:守卫把越权路由回退给首个可见页/根路由,复用统一判定。 const router = readSource('src/router/index.ts') assert.match(router, /isRouteAllowed/, '路由守卫使用共享权限判定') assert.match(router, /firstVisible/, '越权回退首个可见页') const helpers = readSource('src/router/helpers.ts') assert.match(helpers, /export function isRouteAllowed/) assert.match(helpers, /hasMenuKey/) })