import test from 'node:test' import assert from 'node:assert/strict' import { readSource } from './helpers.ts' import { firstVisiblePath } from '../src/router/helpers.ts' test('test_task_034_unauthorized_fallback_normal_primary_path', () => { // 正常主路径:越权页面回退到菜单树首个可见页面。 const tree = [{ key: 'g', name: '组', children: [{ key: 'users', name: '用户管理', route: '/account/users' }] }] assert.equal(firstVisiblePath(tree), '/account/users') }) test('test_task_034_unauthorized_fallback_normal_variant_input', () => { // 正常变体:多个可路由页面时取深度优先的首个。 const tree = [ { key: 'a', name: 'A', route: '/a', sort: 9 }, { key: 'b', name: 'B', route: '/b', sort: 1 }, ] assert.equal(firstVisiblePath(tree), '/a', '前端保序,不按 sort 重排') }) test('test_task_034_unauthorized_fallback_normal_repeated_operation_is_idempotent', () => { // 正常重复:查找不修改树、结果稳定。 const tree = [{ key: 'g', name: '组', children: [{ key: 'p', name: '页', route: '/p' }] }] assert.equal(firstVisiblePath(tree), firstVisiblePath(tree)) }) test('test_task_034_unauthorized_fallback_boundary_empty_input', () => { // 边界空值:无任何可见页面时回退空串,由守卫回根路由空态。 assert.equal(firstVisiblePath([]), '') assert.equal(firstVisiblePath(null), '') }) test('test_task_034_unauthorized_fallback_boundary_single_item', () => { // 边界单元素:单个页面即回退目标。 assert.equal(firstVisiblePath([{ key: 's', name: '单', route: '/solo' }]), '/solo') }) test('test_task_034_unauthorized_fallback_boundary_limit_or_missing_field', () => { // 边界上限/缺字段:深层叶页面也被当作回退目标。 const tree = [{ key: 'g', name: '组', children: [{ key: 'g2', name: '子组', children: [{ key: 'deep', name: '深', route: '/deep' }] }] }] assert.equal(firstVisiblePath(tree), '/deep') }) test('test_task_034_unauthorized_fallback_invalid_input_rejected', () => { // 异常输入:畸形节点(无 route 无 children)被跳过,不影响回退目标。 const tree = [{ key: 'bad', name: '坏' }, { key: 'ok', name: '好', route: '/ok' }] assert.equal(firstVisiblePath(tree), '/ok') }) test('test_task_034_unauthorized_fallback_dependency_failure_returns_actionable_message', () => { // 依赖失败:路由守卫对越权页以首个可见页/根路由作为回退目标。 const router = readSource('src/router/index.ts') assert.match(router, /session\.firstVisible\s*\|\|\s*'\/'/, '越权页回退首个可见页,全无则根路由') assert.match(router, /isRouteAllowed/) })