Files
huangzd1997 a0f6582914 feat(密钥管理): 代理配置后台明文展示 + 按次统计各密钥调用损耗
- 后台密钥管理「代理设置」列改为完整明文展示(含账号密码),便于运维核对;
  新增 full 字段仅对代理模块下发,密钥两列保持脱敏
- 新增 biz_user_secret_usage_daily(V117):用户 × 模块 × 天累计真实对外请求次数
- 计次口径:LLM 每次真实 HTTP 请求(含重试)计 1 次;代理每次成功提取计 1 次
- LLM 埋点走 SecretUsageContext 上下文(批次外设置、线程池内快照恢复)
- 新增内部上报接口 /api/internal/user-secret-usage(X-Internal-Token)
- 新增后台页「密钥用量统计」:日期范围 + 用户名 + 分组筛选,含范围内汇总
2026-09-13 21:56:46 +08:00

76 lines
3.1 KiB
TypeScript

import test from 'node:test'
import assert from 'node:assert/strict'
import { readSource } from './helpers.ts'
import {
isLazyLoader,
isPageModule,
PAGE_LOADING_DELAY,
PAGE_LOADING_TEXT,
PAGE_LOADING_TIMEOUT,
PAGE_LOAD_ERROR_TEXT,
} from '../src/router/lazy-config.ts'
import { adminPages } from '../src/router/routes.ts'
test('test_task_010_lazy_page_boundary_normal_primary_path', () => {
// 正常主路径:所有注册页面都是懒加载器,可被路由异步边界包裹。
assert.ok(adminPages.length >= 18, '业务页至少 18(随版本递增,不设上限断言)')
for (const page of adminPages) {
assert.equal(isLazyLoader(page.load), true, `页面 ${page.path} 必须是懒加载函数`)
}
})
test('test_task_010_lazy_page_boundary_normal_variant_input', async () => {
// 正常变体:加载器产物为页面模块(含 default)时识别成功。
const loader = async () => ({ default: {} })
const mod = await loader()
assert.equal(isPageModule(mod), true)
})
test('test_task_010_lazy_page_boundary_normal_repeated_operation_is_idempotent', () => {
// 正常重复:懒加载判定稳定。
assert.equal(isLazyLoader(() => Promise.resolve({})), true)
assert.equal(isLazyLoader(() => Promise.resolve({})), true)
})
test('test_task_010_lazy_page_boundary_boundary_empty_input', () => {
// 边界空值:缺省/空输入按非加载器/非页面模块处理,不崩溃。
assert.equal(isLazyLoader(undefined), false)
assert.equal(isLazyLoader(null), false)
assert.equal(isPageModule(null), false)
assert.equal(isPageModule(undefined), false)
})
test('test_task_010_lazy_page_boundary_boundary_single_item', () => {
// 边界单元素:单个含 default 的模块即可作为页面。
assert.equal(isPageModule({ default: () => null }), true)
})
test('test_task_010_lazy_page_boundary_boundary_limit_or_missing_field', () => {
// 边界上限:loading 延迟/超时为正且超时足够等待网络;文案不空。
assert.ok(PAGE_LOADING_DELAY > 0)
assert.ok(PAGE_LOADING_TIMEOUT > PAGE_LOADING_DELAY)
assert.ok(PAGE_LOADING_TIMEOUT <= 60000, '页面加载超时应处于合理上限内')
assert.ok(PAGE_LOADING_TEXT.length > 0)
})
test('test_task_010_lazy_page_boundary_invalid_input_rejected', () => {
// 异常输入:非函数/数组对象都不是懒加载器;无 default 模块不是页面模块。
assert.equal(isLazyLoader('load'), false)
assert.equal(isLazyLoader(123), false)
assert.equal(isLazyLoader({}), false)
assert.equal(isPageModule({}), false)
assert.equal(isPageModule([]), false)
})
test('test_task_010_lazy_page_boundary_dependency_failure_returns_actionable_message', () => {
// 依赖失败:router 对懒加载统一加异步边界;失败/加载中有样式与文案兜底。
const router = readSource('src/router/index.ts')
assert.match(router, /defineLazyPage/)
assert.equal(router.includes('adminRouteRecords.map'), true)
const lazyPage = readSource('src/router/lazy-page.ts')
assert.match(lazyPage, /PAGE_LOAD_ERROR_TEXT/)
const css = readSource('src/styles/main.css')
assert.match(css, /\.page-loading/)
assert.match(css, /\.page-error/)
})