import { beforeEach, describe, expect, test } from "bun:test"; import { addToMessageQueue, clearPendingMessages, isQueueBridgeConnected, type QueuedMessage, setMessageQueueAdder, } from "../../cli/helpers/messageQueueBridge"; import { formatTaskNotification, formatTaskNotifications, type TaskNotification, } from "../../cli/helpers/taskNotifications"; describe("taskNotifications", () => { describe("formatTaskNotification", () => { test("formats single notification correctly", () => { const notification: TaskNotification = { taskId: "task_1", status: "completed", summary: 'Agent "Find files" completed', result: "Found 5 files in src/", outputFile: "/tmp/task_1.log", }; const formatted = formatTaskNotification(notification); expect(formatted).toContain(""); expect(formatted).toContain("task_1"); expect(formatted).toContain("completed"); expect(formatted).toContain( 'Agent "Find files" completed', ); expect(formatted).toContain("Found 5 files in src/"); expect(formatted).toContain(""); expect(formatted).toContain( "Full transcript available at: /tmp/task_1.log", ); }); test("escapes XML special characters in summary", () => { const notification: TaskNotification = { taskId: "task_1", status: "completed", summary: 'Agent completed', result: "Normal result", outputFile: "/tmp/task_1.log", }; const formatted = formatTaskNotification(notification); // Quotes don't need escaping in XML text content, only in attributes expect(formatted).toContain('<script>alert("xss")</script>'); expect(formatted).not.toContain("