import { renderToStaticMarkup } from "react-dom/server"; import { describe, expect, test } from "vitest"; import { AgentConversation, AgentMessage, AgentPromptInput, type AgentChatMessage, } from "./AgentChat"; import { getToolTraceSummary } from "./agentChatModel"; const assistantMessage: AgentChatMessage = { id: "assistant-1", role: "assistant", content: "Deine groesste Ausgabe war Miete.", toolTrace: [ { name: "summarize_transactions", inputSummary: "Mai 2026", resultSummary: "12 Umsaetze zusammengefasst", }, { name: "list_transactions", inputSummary: "Miete", resultSummary: "1 Treffer", }, ], }; describe("AgentChat phase 1 components", () => { test("summarizes tool traces for compact agent transparency", () => { expect(getToolTraceSummary(undefined)).toBe("Keine Werkzeuge"); expect(getToolTraceSummary([])).toBe("Keine Werkzeuge"); expect(getToolTraceSummary(assistantMessage.toolTrace)).toBe("2 Werkzeuge verwendet"); }); test("renders conversation messages with assistant tool trace details", () => { const markup = renderToStaticMarkup( , ); expect(markup).toContain("Was war teuer?"); expect(markup).toContain("Deine groesste Ausgabe war Miete."); expect(markup).toContain("2 Werkzeuge verwendet"); expect(markup).toContain("summarize_transactions"); expect(markup).toContain("12 Umsaetze zusammengefasst"); }); test("renders the prompt input with ready and busy states", () => { const readyMarkup = renderToStaticMarkup( undefined} onSubmit={() => undefined} />, ); const busyMarkup = renderToStaticMarkup( undefined} onSubmit={() => undefined} />, ); expect(readyMarkup).toContain("Welche Auswertung soll ich machen?"); expect(readyMarkup).toContain("Senden"); expect(busyMarkup).toContain("Antwort laeuft"); expect(busyMarkup).toContain("disabled"); }); test("disables prompt submit for whitespace-only input", () => { const markup = renderToStaticMarkup( undefined} onSubmit={() => undefined} />, ); expect(markup).toContain("disabled"); }); test("renders a thinking indicator while the agent is submitting", () => { const markup = renderToStaticMarkup( , ); expect(markup).toContain("Denk mit der KI nach..."); }); test("renders a single message without a tool section when no trace exists", () => { const markup = renderToStaticMarkup( , ); expect(markup).toContain("Assistant"); expect(markup).toContain("Hallo"); expect(markup).not.toContain("Werkzeuge verwendet"); }); });