// @vitest-environment jsdom
import { act, fireEvent, render, screen, waitFor } from "@testing-library/react";
import type { AgentTask } from "@multica/core/types/agent";
import { describe, expect, it, vi } from "vitest";
import { TranscriptButton } from "./transcript-button";
import type { TimelineItem } from "./build-timeline";
vi.mock("@multica/core/api", () => ({
api: {
listTaskMessages: vi.fn(),
},
}));
vi.mock("./agent-transcript-dialog", () => ({
AgentTranscriptDialog: ({
open,
onOpenChange,
}: {
open: boolean;
onOpenChange: (open: boolean) => void;
}) =>
open ? (
) : null,
}));
const task: AgentTask = {
id: "task-1",
agent_id: "agent-1",
runtime_id: "",
issue_id: "issue-1",
status: "completed",
priority: 0,
dispatched_at: "2026-05-15T10:00:05.000Z",
started_at: "2026-05-15T10:00:06.000Z",
completed_at: "2026-05-15T10:00:10.000Z",
result: null,
error: null,
created_at: "2026-05-15T10:00:00.000Z",
};
const items: TimelineItem[] = [
{
seq: 1,
type: "text",
content: "hello world",
},
];
describe("TranscriptButton", () => {
it("closes the transcript dialog when desktop navigation starts", async () => {
render();
fireEvent.click(screen.getByRole("button", { name: "View transcript" }));
expect(screen.getByRole("dialog")).toBeInTheDocument();
act(() => {
window.dispatchEvent(
new CustomEvent("multica:navigate", {
detail: { path: "/acme/inbox?issue=MUL-123" },
}),
);
});
await waitFor(() => {
expect(screen.queryByRole("dialog")).not.toBeInTheDocument();
});
});
});