import test from 'node:test' import assert from 'node:assert/strict' import { readSource } from './helpers.ts' import { adminPages, adminRouteRecords, routeOf, validateAdminPages, } from '../src/router/routes.ts' test('test_task_008_domain_route_registry_normal_primary_path', () => { // 正常主路径:注册表首批 account 域页面登记为可消费路由记录。 assert.ok(adminPages.length >= 18, '业务页至少 18(随版本递增,不设上限断言)') assert.equal(adminRouteRecords.length, adminPages.length) const first = adminRouteRecords[0] assert.equal(first.path, 'account/users') assert.equal((first.meta as { title?: string }).title, '用户管理') assert.equal((first.meta as { menuKey?: string }).menuKey, 'admin_users') assert.deepEqual(validateAdminPages(adminPages), []) }) test('test_task_008_domain_route_registry_normal_variant_input', () => { // 正常变体:无 menuKey 的页面元数据不携带菜单 key,仍带标题。 const record = routeOf({ path: 'tasks/plain', title: '无菜单页', load: async () => ({ default: {} }) }) const meta = record.meta as { title?: string; menuKey?: string } assert.equal(meta.title, '无菜单页') assert.equal('menuKey' in meta, false) }) test('test_task_008_domain_route_registry_normal_repeated_operation_is_idempotent', () => { // 正常重复:从同一注册表重复生成记录结果稳定。 const once = JSON.stringify(adminPages.map(routeOf)) const twice = JSON.stringify(adminPages.map(routeOf)) assert.equal(once, twice) assert.deepEqual(validateAdminPages(adminPages), validateAdminPages(adminPages)) }) test('test_task_008_domain_route_registry_boundary_empty_input', () => { // 边界空值:空注册表可校验、可映射为空路由列表。 assert.deepEqual(validateAdminPages([]), []) assert.equal([].map(routeOf).length, 0) }) test('test_task_008_domain_route_registry_boundary_single_item', () => { // 边界单元素:单页面登记生成唯一路由记录。 const records = [routeOf({ path: 'shop/list', title: '店铺列表', load: async () => ({ default: {} }) })] assert.equal(records.length, 1) assert.equal(records[0].path, 'shop/list') }) test('test_task_008_domain_route_registry_boundary_limit_or_missing_field', () => { // 边界上限/缺字段:路径重复、前导斜杠、缺 title、混入 base 前缀都被校验拒绝。 const base = { title: 'T', load: async () => ({ default: {} }) } const issues = validateAdminPages([ { ...base, path: 'a/b' }, { ...base, path: 'a/b' }, { ...base, path: '/lead' }, { path: '', title: '', load: async () => ({ default: {} }) }, { path: '/admin-vue/x', title: 'X', load: async () => ({ default: {} }) }, ]) assert.ok(issues.some((i) => i.includes('路径重复'))) assert.ok(issues.some((i) => i.includes('相对子路径'))) assert.ok(issues.some((i) => i.includes('缺少标题'))) assert.ok(issues.some((i) => i.includes('base 前缀'))) }) test('test_task_008_domain_route_registry_invalid_input_rejected', () => { // 异常输入:非法页面定义在生成路由时被拒绝并给出可操作消息。 assert.throws(() => routeOf({ path: '', title: 'T', load: async () => ({ default: {} }) }), /路由注册表页面定义非法/) assert.throws(() => routeOf({ path: 'x', title: '', load: async () => ({ default: {} }) }), /路由注册表页面定义非法/) }) test('test_task_008_domain_route_registry_dependency_failure_returns_actionable_message', () => { // 依赖失败:router 消费注册表,不再内联页面懒加载与路径字面量。 const router = readSource('src/router/index.ts') assert.match(router, /adminRouteRecords/) assert.equal(router.includes('account/users'), false, '路径字面量应只存在于 routes.ts 注册表') assert.equal(router.includes('() => import(\'@/pages'), false, '页面懒加载应只存在于注册表') })