// @vitest-environment jsdom import { cleanup, fireEvent, render, screen, waitFor } from "@testing-library/react"; import { afterEach, describe, expect, it, vi } from "vitest"; import { AgentMessageBlock } from "./AgentMessageBlock"; vi.mock("./AgentToolGroupRow", () => ({ AgentToolGroupRow: () => null })); afterEach(cleanup); describe("AgentMessageBlock edit retry", () => { it("prefills the exact first text block and submits only edited text with turn identity", async () => { const onSubmit = vi.fn().mockResolvedValue(true); render( ); fireEvent.click(screen.getByRole("button", { name: "Edit message" })); const editor = screen.getByRole("textbox", { name: "Edit message" }) as HTMLTextAreaElement; expect(editor.value).toBe("raw original"); fireEvent.change(editor, { target: { value: "edited text" } }); fireEvent.click(screen.getByRole("button", { name: "Save and retry" })); await waitFor(() => expect(onSubmit).toHaveBeenCalledWith({ editedText: "edited text", turnId: "turn-latest" }) ); }); it("keeps the edited draft when the durable command reports failure", async () => { const onSubmit = vi.fn().mockResolvedValue(false); render( ); fireEvent.click(screen.getByRole("button", { name: "Edit message" })); const editor = screen.getByRole("textbox", { name: "Edit message" }); fireEvent.change(editor, { target: { value: "keep this draft" } }); fireEvent.click(screen.getByRole("button", { name: "Save and retry" })); await waitFor(() => expect(onSubmit).toHaveBeenCalledOnce()); expect( ( screen.getByRole("textbox", { name: "Edit message" }) as HTMLTextAreaElement ).value ).toBe("keep this draft"); }); });