test(api): cover assistant system role configs
This commit is contained in:
@@ -0,0 +1,129 @@
|
||||
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.",
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user