44 lines
1.4 KiB
TypeScript
44 lines
1.4 KiB
TypeScript
import { describe, expect, it, vi } from "vitest";
|
|
|
|
import { createAgentEventHandler, createChatRunState } from "./server-chat.js";
|
|
|
|
describe("agent event handler", () => {
|
|
it("emits chat delta for assistant text-only events", () => {
|
|
const nowSpy = vi.spyOn(Date, "now").mockReturnValue(1_000);
|
|
const broadcast = vi.fn();
|
|
const nodeSendToSession = vi.fn();
|
|
const agentRunSeq = new Map<string, number>();
|
|
const chatRunState = createChatRunState();
|
|
chatRunState.registry.add("run-1", { sessionKey: "session-1", clientRunId: "client-1" });
|
|
|
|
const handler = createAgentEventHandler({
|
|
broadcast,
|
|
nodeSendToSession,
|
|
agentRunSeq,
|
|
chatRunState,
|
|
resolveSessionKeyForRun: () => undefined,
|
|
clearAgentRunContext: vi.fn(),
|
|
});
|
|
|
|
handler({
|
|
runId: "run-1",
|
|
seq: 1,
|
|
stream: "assistant",
|
|
ts: Date.now(),
|
|
data: { text: "Hello world" },
|
|
});
|
|
|
|
const chatCalls = broadcast.mock.calls.filter(([event]) => event === "chat");
|
|
expect(chatCalls).toHaveLength(1);
|
|
const payload = chatCalls[0]?.[1] as {
|
|
state?: string;
|
|
message?: { content?: Array<{ text?: string }> };
|
|
};
|
|
expect(payload.state).toBe("delta");
|
|
expect(payload.message?.content?.[0]?.text).toBe("Hello world");
|
|
const sessionChatCalls = nodeSendToSession.mock.calls.filter(([, event]) => event === "chat");
|
|
expect(sessionChatCalls).toHaveLength(1);
|
|
nowSpy.mockRestore();
|
|
});
|
|
});
|