130 lines
3.5 KiB
TypeScript
130 lines
3.5 KiB
TypeScript
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
import { SystemRole } from "@capakraken/shared";
|
|
|
|
import { createToolContext, executeTool } from "./assistant-tools-settings-test-helpers.js";
|
|
|
|
describe("assistant settings tools system role configuration", () => {
|
|
beforeEach(() => {
|
|
vi.clearAllMocks();
|
|
});
|
|
|
|
afterEach(() => {
|
|
vi.unstubAllGlobals();
|
|
vi.unstubAllEnvs();
|
|
});
|
|
|
|
it("lists system role configs for admin users through the real router path", async () => {
|
|
const findMany = vi.fn().mockResolvedValue([
|
|
{
|
|
role: SystemRole.ADMIN,
|
|
label: "Admin",
|
|
description: "System administrator",
|
|
color: "#000000",
|
|
sortOrder: 0,
|
|
defaultPermissions: ["users.read"],
|
|
},
|
|
]);
|
|
const ctx = createToolContext({
|
|
systemRoleConfig: {
|
|
findMany,
|
|
},
|
|
});
|
|
|
|
const result = await executeTool("list_system_role_configs", JSON.stringify({}), ctx);
|
|
|
|
expect(JSON.parse(result.content)).toEqual([
|
|
{
|
|
role: "ADMIN",
|
|
label: "Admin",
|
|
description: "System administrator",
|
|
color: "#000000",
|
|
sortOrder: 0,
|
|
defaultPermissions: ["users.read"],
|
|
},
|
|
]);
|
|
expect(findMany).toHaveBeenCalledWith({
|
|
orderBy: { sortOrder: "asc" },
|
|
});
|
|
});
|
|
|
|
it("updates one system role config for admin users through the real router path", async () => {
|
|
const findUnique = vi.fn().mockResolvedValue({
|
|
role: SystemRole.MANAGER,
|
|
label: "Manager",
|
|
description: "Before",
|
|
color: "#111111",
|
|
defaultPermissions: ["projects.read"],
|
|
});
|
|
const update = vi.fn().mockResolvedValue({
|
|
role: SystemRole.MANAGER,
|
|
label: "Delivery Manager",
|
|
description: "Updated",
|
|
color: "#222222",
|
|
sortOrder: 1,
|
|
defaultPermissions: ["projects.read", "projects.write"],
|
|
});
|
|
const ctx = createToolContext({
|
|
systemRoleConfig: {
|
|
findUnique,
|
|
update,
|
|
},
|
|
});
|
|
|
|
const result = await executeTool(
|
|
"update_system_role_config",
|
|
JSON.stringify({
|
|
role: "MANAGER",
|
|
label: "Delivery Manager",
|
|
description: "Updated",
|
|
color: "#222222",
|
|
defaultPermissions: ["projects.read", "projects.write"],
|
|
}),
|
|
ctx,
|
|
);
|
|
|
|
expect(JSON.parse(result.content)).toEqual({
|
|
role: "MANAGER",
|
|
label: "Delivery Manager",
|
|
description: "Updated",
|
|
color: "#222222",
|
|
sortOrder: 1,
|
|
defaultPermissions: ["projects.read", "projects.write"],
|
|
});
|
|
expect(findUnique).toHaveBeenCalledWith({
|
|
where: { role: "MANAGER" },
|
|
});
|
|
expect(update).toHaveBeenCalledWith({
|
|
where: { role: "MANAGER" },
|
|
data: {
|
|
label: "Delivery Manager",
|
|
description: "Updated",
|
|
color: "#222222",
|
|
defaultPermissions: ["projects.read", "projects.write"],
|
|
},
|
|
});
|
|
});
|
|
|
|
it("rejects system role config tools for non-admin assistant users", async () => {
|
|
const ctx = createToolContext(
|
|
{
|
|
systemRoleConfig: {
|
|
findMany: vi.fn(),
|
|
findUnique: vi.fn(),
|
|
update: vi.fn(),
|
|
},
|
|
},
|
|
SystemRole.MANAGER,
|
|
);
|
|
|
|
for (const [toolName, payload] of [
|
|
["list_system_role_configs", {}],
|
|
["update_system_role_config", { role: "MANAGER", label: "Manager" }],
|
|
] as const) {
|
|
const result = await executeTool(toolName, JSON.stringify(payload), ctx);
|
|
expect(JSON.parse(result.content)).toEqual({
|
|
error: "You do not have permission to perform this action.",
|
|
});
|
|
}
|
|
});
|
|
});
|