/* Copyright 2026 Marimo. All rights reserved. */ import { act, fireEvent, render, screen, waitFor, } from "@testing-library/react"; import { Provider } from "jotai"; import type { ComponentProps } from "react"; import { JsonRpcError } from "use-acp"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import { MockRequestClient } from "@/__mocks__/requests"; import type { PromptInput } from "@/components/editor/ai/add-cell-with-ai"; import { TooltipProvider } from "@/components/ui/tooltip"; import { toast } from "@/components/ui/use-toast"; import { pendingAiPromptAtom } from "@/core/ai/state"; import { requestClientAtom } from "@/core/network/requests"; import { cwdAtom, filenameAtom } from "@/core/saving/file-state"; import { store } from "@/core/state/jotai"; import AgentPanel from "../agent-panel"; import { parseContextFromPrompt } from "../context-utils"; import { addSession, agentSessionStateAtom, selectedTabAtom, updateSessionExternalAgentSessionId, } from "../state"; import type { ExternalAgentSessionId } from "../types"; const { agent, client } = vi.hoisted(() => { const agent = { initialize: vi.fn().mockResolvedValue({}), prompt: vi.fn().mockResolvedValue({ stopReason: "end_turn" }), cancel: vi.fn().mockResolvedValue({}), }; return { agent, client: { agent, activeSessionId: "session-1", connectionState: { status: "connected" }, notifications: [], connect: vi.fn().mockResolvedValue(undefined), disconnect: vi.fn(), setActiveSessionId: vi.fn(), }, }; }); vi.mock("use-acp", async (importOriginal) => ({ ...(await importOriginal()), useAcpClient: () => client, })); vi.mock("@/components/editor/ai/add-cell-with-ai", () => ({ PromptInput: ({ value, onChange, onAddFiles, onSubmit, }: ComponentProps) => ( <>