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();
});
});