first commit

This commit is contained in:
npc0-hue
2026-07-11 14:56:10 +08:00
commit 7e05d0a4e7
660 changed files with 78119 additions and 0 deletions
+86
View File
@@ -0,0 +1,86 @@
import { describe, expect, it } from "vitest";
import { defaultPageForUser, firstPartyRoutes, hashForPage, navigationRoutesForUser, resolveRouteHash, routeForPage } from "./routes";
import { initialNavigationState } from "../stores/navigation";
import { capabilitiesForRoles, type CurrentUserView } from "../contracts/workspace";
const platformAdmin: CurrentUserView = {
id: "user-admin",
displayName: "Admin",
status: "active",
roles: ["platformAdmin"],
capabilities: capabilitiesForRoles(["platformAdmin"]),
profile: {},
source: "local"
};
const serverAdmin: CurrentUserView = {
id: "user-server",
displayName: "Server Operator",
status: "active",
roles: ["serverAdmin"],
capabilities: capabilitiesForRoles(["serverAdmin"]),
profile: {},
source: "local"
};
describe("console shell routes", () => {
it("resolves known hashes and paths", () => {
expect(resolveRouteHash("#/servers", platformAdmin).route.id).toBe("servers");
expect(resolveRouteHash("#/profile", platformAdmin).route.id).toBe("profileSettings");
expect(resolveRouteHash("#/aiProviders", platformAdmin).route.id).toBe("aiProviders");
expect(resolveRouteHash("#/ai-providers", platformAdmin).route.id).toBe("aiProviders");
expect(resolveRouteHash("#/unknown", platformAdmin).route.id).toBe("home");
expect(resolveRouteHash("#/plugins", platformAdmin).route.id).toBe("plugins");
});
it("resolves server detail hashes with params", () => {
const resolved = resolveRouteHash("#/servers/server-example-1", platformAdmin);
expect(resolved.route.id).toBe("serverDetail");
expect(resolved.params.serverId).toBe("server-example-1");
expect(hashForPage("serverDetail", { serverId: "server-example-1" })).toBe("#/servers/server-example-1");
});
it("keeps route metadata available for shell navigation", () => {
expect(firstPartyRoutes.map((route) => route.id)).toContain("maintenance");
expect(firstPartyRoutes.map((route) => route.id)).toContain("profileSettings");
expect(routeForPage("users")).toMatchObject({ label: "用户管理", hash: "#/users" });
expect(routeForPage("profileSettings")).toMatchObject({ label: "个人设置", hash: "#/profile" });
});
it("routes platform administrators to the platform overview by default", () => {
expect(defaultPageForUser(platformAdmin)).toBe("home");
expect(initialNavigationState(platformAdmin, "").pageId).toBe("home");
});
it("routes server owners and administrators to the server list by default", () => {
expect(defaultPageForUser(serverAdmin)).toBe("servers");
expect(initialNavigationState(serverAdmin, "").pageId).toBe("servers");
});
it("hides platform-only navigation from server-only users", () => {
const labels = navigationRoutesForUser(serverAdmin).map((route) => route.label);
expect(labels).toContain("服务器管理");
expect(labels).not.toContain("平台概览");
expect(labels).not.toContain("用户管理");
expect(labels).not.toContain("AI 提供商管理");
expect(labels).not.toContain("系统维护");
expect(labels).not.toContain("个人设置");
});
it("shows all platform areas to platform administrators", () => {
const labels = navigationRoutesForUser(platformAdmin).map((route) => route.label);
expect(labels).toEqual(["平台概览", "服务器管理", "插件市场", "用户管理", "AI 提供商管理", "系统维护"]);
});
it("allows every authenticated role to open profile settings", () => {
expect(initialNavigationState(platformAdmin, "#/profile").pageId).toBe("profileSettings");
expect(initialNavigationState(serverAdmin, "#/profile").pageId).toBe("profileSettings");
});
it("redirects unauthorized hashes to the role default workspace", () => {
expect(initialNavigationState(serverAdmin, "#/home").pageId).toBe("servers");
expect(initialNavigationState(serverAdmin, "#/users").pageId).toBe("servers");
expect(initialNavigationState(serverAdmin, "#/servers/server-1").pageId).toBe("serverDetail");
});
});