import { describe, expect, test } from "bun:test"; import React from "react"; import { renderToStaticMarkup } from "react-dom/server"; import { MemoryRouter } from "react-router"; import type { DynamicToolUIPart } from "ai"; import { MessageListProvider } from "../src/components/chat/message-list-provider"; import { OpenWorkSessionCreateTool } from "../src/components/tools/openwork-session-create"; const noop = () => {}; function sessionCreatePart(): DynamicToolUIPart { return { type: "dynamic-tool", toolName: "openwork_session_create", toolCallId: "call-create-sessions", state: "output-available", input: { sessions: [ { title: "Dolphin research", prompt: "Research dolphins." }, { title: "Banana research", prompt: "Research bananas." }, { title: "Apple pie research", prompt: "Research apple pies." }, ], }, output: JSON.stringify({ ok: true, workspaceId: "workspace-a", workspace: "Research", created: [ { sessionId: "session-dolphins", title: "Dolphin research", started: true, route: "/workspace/workspace-a/session/session-dolphins" }, { sessionId: "session-bananas", title: "Banana research", started: true, route: "/workspace/workspace-a/session/session-bananas" }, { sessionId: "session-apple-pies", title: "Apple pie research", started: true, route: "/workspace/workspace-a/session/session-apple-pies" }, ], failures: [], }), }; } describe("OpenWorkSessionCreateTool", () => { test("renders named created-chat rows with an Open chat action for each session", () => { const html = renderToStaticMarkup( "connected"} onMcpReopenAuthorization={async () => {}} onMcpRetry={noop} > , ); expect(html).toContain("data-openwork-session-create-card"); expect(html).toContain('data-created-session-count="3"'); expect(html).toContain("Dolphin research"); expect(html).toContain("Banana research"); expect(html).toContain("Apple pie research"); expect(html.match(/data-open-created-session=/g)).toHaveLength(3); expect(html).toContain("Open chat"); expect(html).toContain('data-open-created-session="session-dolphins"'); }); });