From 9c589521708aef9d301d784fb010ee2a7ed1f5d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hartmut=20N=C3=B6renberg?= Date: Wed, 1 Apr 2026 00:44:29 +0200 Subject: [PATCH] test(api): cover assistant import export tools --- .../__tests__/assistant-tools-export.test.ts | 47 +++++++++++++++++++ .../__tests__/assistant-tools-import.test.ts | 41 ++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 packages/api/src/__tests__/assistant-tools-export.test.ts create mode 100644 packages/api/src/__tests__/assistant-tools-import.test.ts diff --git a/packages/api/src/__tests__/assistant-tools-export.test.ts b/packages/api/src/__tests__/assistant-tools-export.test.ts new file mode 100644 index 0000000..44bedeb --- /dev/null +++ b/packages/api/src/__tests__/assistant-tools-export.test.ts @@ -0,0 +1,47 @@ +import { beforeEach, describe, expect, it, vi } from "vitest"; +import { SystemRole } from "@capakraken/shared"; +import { + createToolContext, + executeTool, + resetAssistantImportToolTestState, +} from "./assistant-tools-import-dispo-webhooks-test-helpers.js"; + +describe("assistant export tools", () => { + beforeEach(async () => { + await resetAssistantImportToolTestState(); + }); + + it("exports resources CSV through the real import/export router path", async () => { + const ctx = createToolContext( + { + resource: { + findMany: vi.fn().mockResolvedValue([ + { + eid: "EMP-001", + displayName: "Carol Danvers", + email: "carol@example.com", + chapter: "Delivery", + lcrCents: 8000, + ucrCents: 12000, + currency: "EUR", + chargeabilityTarget: 0.8, + dynamicFields: {}, + }, + ]), + }, + blueprint: { + findMany: vi.fn().mockResolvedValue([]), + }, + }, + { userRole: SystemRole.CONTROLLER }, + ); + + const result = await executeTool("export_resources_csv", "{}", ctx); + + expect(JSON.parse(result.content)).toEqual({ + format: "csv", + lineCount: 2, + csv: "eid,displayName,email,chapter,lcrCents,ucrCents,currency,chargeabilityTarget\nEMP-001,Carol Danvers,carol@example.com,Delivery,8000,12000,EUR,0.8", + }); + }); +}); diff --git a/packages/api/src/__tests__/assistant-tools-import.test.ts b/packages/api/src/__tests__/assistant-tools-import.test.ts new file mode 100644 index 0000000..e6b4e47 --- /dev/null +++ b/packages/api/src/__tests__/assistant-tools-import.test.ts @@ -0,0 +1,41 @@ +import { beforeEach, describe, expect, it, vi } from "vitest"; +import { PermissionKey, SystemRole } from "@capakraken/shared"; +import { + createToolContext, + executeTool, + resetAssistantImportToolTestState, +} from "./assistant-tools-import-dispo-webhooks-test-helpers.js"; + +describe("assistant import tools", () => { + beforeEach(async () => { + await resetAssistantImportToolTestState(); + }); + + it("requires importData permission for CSV imports", async () => { + const ctx = createToolContext( + { + auditLog: { create: vi.fn() }, + }, + { + userRole: SystemRole.MANAGER, + permissions: [], + }, + ); + + const result = await executeTool( + "import_csv_data", + JSON.stringify({ + entityType: "resources", + rows: [{ eid: "EMP-001", displayName: "Carol Danvers" }], + dryRun: true, + }), + ctx, + ); + + expect(JSON.parse(result.content)).toEqual( + expect.objectContaining({ + error: expect.stringContaining(PermissionKey.IMPORT_DATA), + }), + ); + }); +});