Files
Nexus/packages/api/src/__tests__/assistant-tools-resource-admin-create-persistence-errors.test.ts
T

107 lines
3.0 KiB
TypeScript

import { beforeEach, describe, expect, it, vi } from "vitest";
import { PermissionKey, SystemRole } from "@capakraken/shared";
import { TRPCError } from "@trpc/server";
import {
createToolContext,
executeTool,
} from "./assistant-tools-resource-admin-create-test-helpers.js";
describe("assistant resource admin create tools - persistence errors", () => {
beforeEach(() => {
vi.clearAllMocks();
});
it("returns a generic assistant error when role resolution fails internally during resource creation", async () => {
const resourceCreate = vi.fn();
const ctx = createToolContext(
{
resource: {
findFirst: vi.fn().mockResolvedValue(null),
create: resourceCreate,
},
role: {
findUnique: vi.fn().mockRejectedValue(
new TRPCError({
code: "INTERNAL_SERVER_ERROR",
message: "role resolver connection exhausted",
}),
),
},
assignment: {
findMany: vi.fn().mockResolvedValue([]),
},
demandRequirement: {
findMany: vi.fn().mockResolvedValue([]),
},
},
{
userRole: SystemRole.ADMIN,
permissions: [PermissionKey.MANAGE_RESOURCES],
},
);
const result = await executeTool(
"create_resource",
JSON.stringify({
eid: "EMP-500",
displayName: "Role Failure",
email: "role-failure@example.com",
lcrCents: 8000,
roleName: "Designer",
}),
ctx,
);
expect(JSON.parse(result.content)).toEqual({
error: "The tool could not complete due to an internal error.",
});
expect(resourceCreate).not.toHaveBeenCalled();
});
it("returns a stable assistant error when the selected resource role disappears before creation", async () => {
const resourceCreate = vi.fn().mockRejectedValue({
code: "P2003",
message: "Foreign key constraint failed",
meta: { field_name: "Resource_roleId_fkey" },
});
const ctx = createToolContext(
{
resource: {
findFirst: vi.fn().mockResolvedValue(null),
create: resourceCreate,
},
role: {
findUnique: vi.fn().mockResolvedValue({ id: "role_1", name: "Designer" }),
findFirst: vi.fn().mockResolvedValue(null),
},
assignment: {
findMany: vi.fn().mockResolvedValue([]),
},
demandRequirement: {
findMany: vi.fn().mockResolvedValue([]),
},
},
{
userRole: SystemRole.ADMIN,
permissions: [PermissionKey.MANAGE_RESOURCES],
},
);
const result = await executeTool(
"create_resource",
JSON.stringify({
eid: "EMP-002",
displayName: "Carol Danvers",
email: "carol@example.com",
lcrCents: 8000,
roleName: "Designer",
}),
ctx,
);
expect(JSON.parse(result.content)).toEqual({
error: "Role not found with the given criteria.",
});
});
});