import { describe, expect, it } from "vitest"; import { PermissionKey, SystemRole } from "@capakraken/shared"; import { executeTool, getAvailableAssistantToolsForContext, } from "../router/assistant-tools.js"; function createToolContext( userRole: SystemRole, permissions: PermissionKey[] = [], ) { return { db: {} as never, userId: "user_1", userRole, permissions: new Set(permissions), session: { user: { email: "user@example.com", name: "User", image: null }, expires: "2099-01-01T00:00:00.000Z", }, dbUser: { id: "user_1", systemRole: userRole, permissionOverrides: null, }, roleDefaults: null, }; } describe("assistant tool registry access", () => { it("derives admin-only settings tools directly from tool metadata", () => { const adminNames = getAvailableAssistantToolsForContext(new Set(), SystemRole.ADMIN) .map((tool) => tool.function.name); const managerNames = getAvailableAssistantToolsForContext(new Set(), SystemRole.MANAGER) .map((tool) => tool.function.name); expect(adminNames).toContain("get_ai_configured"); expect(adminNames).toContain("list_system_role_configs"); expect(managerNames).not.toContain("get_ai_configured"); expect(managerNames).not.toContain("list_system_role_configs"); }); it("keeps cost-sensitive registry tools hidden until viewCosts is granted", () => { const managerWithoutCosts = getAvailableAssistantToolsForContext( new Set(), SystemRole.MANAGER, ).map((tool) => tool.function.name); const managerWithCosts = getAvailableAssistantToolsForContext( new Set([PermissionKey.VIEW_COSTS]), SystemRole.MANAGER, ).map((tool) => tool.function.name); expect(managerWithoutCosts).not.toContain("get_budget_forecast"); expect(managerWithoutCosts).not.toContain("lookup_rate"); expect(managerWithCosts).toContain("get_budget_forecast"); expect(managerWithCosts).toContain("lookup_rate"); }); it("enforces metadata-derived permission checks before executing cost tools", async () => { const result = await executeTool( "lookup_rate", JSON.stringify({ chapter: "Animation" }), createToolContext(SystemRole.MANAGER), ); expect(JSON.parse(result.content)).toEqual({ error: `Permission denied: you need the "${PermissionKey.VIEW_COSTS}" permission to perform this action.`, }); }); });