import { fireEvent, render, screen } from "@testing-library/react"; import { describe, expect, it, vi } from "vitest"; vi.mock("../PrPanel", () => ({ PrPanel: () =>
PR Panel
, })); import { makeTask, noop, noopDelete, noopMerge, noopMove, noopOpenDetail, setupTaskDetailModalHooks, } from "./TaskDetailModal.test-helpers"; import { TaskDetailModal } from "../TaskDetailModal"; setupTaskDetailModalHooks(); describe("TaskDetailModal Pull Request tab", () => { it("shows Pull Request tab only for in-review tasks", () => { const { rerender } = render( , ); expect(screen.queryByRole("button", { name: "Pull Request" })).toBeNull(); rerender( , ); expect(screen.getByRole("button", { name: "Pull Request" })).toBeInTheDocument(); }); it("renders PrPanel and in-review stall badge in Pull Request tab, not Definition tab", () => { const inReviewStall = { code: "merge-failed" as const, reason: "merge failed", observedAt: "2026-01-01T00:00:00Z", consecutiveFailures: 2, mergeRetries: 2, maxAutoMergeRetries: 3, }; const { container } = render( , ); expect(screen.queryByTestId("pr-panel-stub")).toBeNull(); expect(container.querySelector(".detail-in-review-stall")).toBeNull(); fireEvent.click(screen.getByRole("button", { name: "Pull Request" })); expect(screen.getByTestId("pr-panel-stub")).toBeInTheDocument(); expect(container.querySelector(".detail-in-review-stall")).toBeTruthy(); }); });