import { cleanup, fireEvent, render, screen, waitFor } from "@testing-library/react";
import { afterEach, expect, test, vi } from "vitest";
import { fixtureTask } from "../fixtures";
import { ReplyCover } from "./ReplyCover";
afterEach(cleanup);
test("loads a local cover, opens details, and clears it on a new turn", async () => {
const task = fixtureTask({ title: "Design", turnId: "one", replyImage: { url: "/design.png", alt: "Design screenshot" } });
const load = vi.fn().mockResolvedValueOnce("data:image/png;base64,AAAA").mockResolvedValueOnce(null);
const open = vi.fn();
const { rerender } = render();
expect(await screen.findByAltText("Design screenshot")).toHaveAttribute("src", "data:image/png;base64,AAAA");
fireEvent.click(screen.getByRole("button")); expect(open).toHaveBeenCalledOnce();
rerender();
await waitFor(() => expect(screen.queryByRole("button")).not.toBeInTheDocument());
expect(screen.queryByRole("img")).not.toBeInTheDocument();
});
test("remote covers are hidden without starting an image request", async () => {
const task = fixtureTask({ title: "Chart", replyImage: {url: "https://example.com/chart.png", alt: "Chart"} });
const load = vi.fn();
render();
expect(screen.queryByRole("img")).not.toBeInTheDocument();
expect(load).not.toHaveBeenCalled();
await waitFor(() => expect(screen.queryByRole("button")).not.toBeInTheDocument());
});
test("a rejected local image read hides the cover", async () => {
const task = fixtureTask({ replyImage: {url: "/missing.png", alt: "Missing"} });
render();
await waitFor(() => expect(screen.queryByRole("button")).not.toBeInTheDocument());
});