/* Copyright 2026 Marimo. All rights reserved. */
import { cleanup, render, screen } from "@testing-library/react";
import { afterEach, describe, expect, it } from "vitest";
import { ResultRenderer } from "../tool-result";
afterEach(cleanup);
describe("ResultRenderer", () => {
it.each([
{ status: "success", message: "No output was returned." },
{ status: "success", next_steps: ["Run the edited cells."] },
{
status: "success",
action_url: null,
next_steps: null,
meta: null,
message: "Finished",
},
{
status: "success",
action_url: "/notebook",
next_steps: ["Review the output."],
meta: { source: "notebook" },
cellsToOutput: { cell: { cellOutput: "Hello", consoleOutput: "" } },
},
])("renders structured results with optional fields: %j", (result) => {
render();
expect(screen.getByRole("heading", { name: "Tool Result" })).toBeVisible();
expect(screen.getByText("success")).toBeVisible();
});
it("displays messages and tool-specific output without metadata", () => {
render(
,
);
expect(screen.getByText("Cells finished running.")).toBeVisible();
expect(screen.getByText("cellsToOutput")).toBeVisible();
expect(screen.getByText(/"cellOutput": "Hello"/)).toBeVisible();
});
it("preserves the fallback for unstructured results", () => {
render();
expect(screen.queryByRole("heading", { name: "Tool Result" })).toBeNull();
expect(screen.getByText("Plain text result")).toBeVisible();
});
});