feat(admin): 提示词控制面页 + 概览/状态页重做 + 接入 vitest
- 新增「提示词」页(/prompts):接 /api/v1/prompts,建版本/激活热下发/ 对比激活版行级 diff/撤销,挂到配置组 - 概览页重做为系统控制塔:吃 admin/overview(全平台口径)——平台任务/ 评测/用户规模/服务在线 + 模型路由态 + 提示词覆盖态 + 健康拓扑 + 30s自刷 - 服务状态页重做:中性克制风 + 请求链路做成深色实时数据管道(流动光点/ 节点辉光) + MCP 工具改能力域配色小卡片 - 接入 vitest(此前零测试):41 单测(api 控制面/lib diff/路由派生) - api.ts 增 statsOverview/adminOverview/prompt 控制面四接口 + groupPrompts Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
import { describe, it, expect } from "vitest";
|
||||
import { routes, navGroups, defaultPath } from "./routes";
|
||||
|
||||
// routes 是控制台导航的单一事实源 —— 派生分组必须保序、不丢项、不串组。
|
||||
describe("navGroups", () => {
|
||||
it("按注册顺序归并分组,每条路由都落到对应组", () => {
|
||||
const groups = navGroups();
|
||||
const flat = groups.flatMap((g) => g.items);
|
||||
// 不丢项、不重复
|
||||
expect(flat).toHaveLength(routes.length);
|
||||
expect(new Set(flat.map((r) => r.path)).size).toBe(routes.length);
|
||||
});
|
||||
|
||||
it("分组首次出现的顺序即组顺序(保持注册顺序)", () => {
|
||||
const seen: string[] = [];
|
||||
for (const r of routes) if (!seen.includes(r.group)) seen.push(r.group);
|
||||
expect(navGroups().map((g) => g.group)).toEqual(seen);
|
||||
});
|
||||
|
||||
it("同组路由保持注册时的相对顺序", () => {
|
||||
for (const g of navGroups()) {
|
||||
const expected = routes.filter((r) => r.group === g.group).map((r) => r.path);
|
||||
expect(g.items.map((r) => r.path)).toEqual(expected);
|
||||
}
|
||||
});
|
||||
|
||||
it("defaultPath 指向一个真实存在的路由", () => {
|
||||
expect(routes.some((r) => r.path === defaultPath)).toBe(true);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user