Files
CapaKraken/packages/api/src/__tests__/assistant-tools-broadcast-send-validation-errors.test.ts
T

81 lines
2.2 KiB
TypeScript

import { beforeEach, describe, expect, it, vi } from "vitest";
import { SystemRole } from "@capakraken/shared";
import { executeTool } from "./assistant-tools-broadcast-send-test-helpers.js";
import { createToolContext } from "./assistant-tools-notification-test-helpers.js";
describe("assistant broadcast send validation errors", () => {
beforeEach(() => {
vi.clearAllMocks();
});
it("returns a stable assistant error when broadcast scheduledAt is invalid", async () => {
const ctx = createToolContext({}, SystemRole.MANAGER);
const result = await executeTool(
"send_broadcast",
JSON.stringify({
title: "Office update",
targetType: "all",
scheduledAt: "not-a-datetime",
}),
ctx,
);
expect(JSON.parse(result.content)).toEqual({
error: "Invalid scheduledAt: not-a-datetime",
});
});
it("returns a stable assistant error when a broadcast target resolves to no recipients", async () => {
const create = vi.fn().mockResolvedValue({
id: "broadcast_empty",
title: "Office update",
targetType: "user",
});
const ctx = createToolContext(
{
notificationBroadcast: {
create,
},
},
SystemRole.MANAGER,
);
const result = await executeTool(
"send_broadcast",
JSON.stringify({
title: "Office update",
targetType: "user",
}),
ctx,
);
expect(JSON.parse(result.content)).toEqual({
error: "No recipients matched the broadcast target.",
});
expect(create).not.toHaveBeenCalled();
});
it("returns a stable assistant error for scheduled broadcasts with task metadata", async () => {
const ctx = createToolContext({}, SystemRole.MANAGER);
const result = await executeTool(
"send_broadcast",
JSON.stringify({
title: "Approve later",
targetType: "all",
category: "TASK",
taskAction: "approve_vacation:vac_1",
dueDate: "2099-04-11T08:00:00.000Z",
scheduledAt: "2099-04-10T08:00:00.000Z",
}),
ctx,
);
expect(JSON.parse(result.content)).toEqual({
error: "Scheduled broadcasts with task metadata are not supported yet.",
});
});
});