/* FNXC:TaskDetailTabs 2026-06-17-08:20: FN-6532 made Chat the default TaskDetailModal tab. Tests that assert Definition-only sections must opt into `initialTab="definition"` so they verify the intended surface instead of the Chat landing state. */ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest"; import { render, screen, fireEvent, act, waitFor } from "@testing-library/react"; // FNXC:Markdown 2026-06-23-03:30: Mock the heavy `mermaid` library so the shared // markdown pipeline's MermaidDiagram resolves without loading the real renderer. vi.mock("mermaid", () => ({ default: { initialize: vi.fn(), render: vi.fn().mockResolvedValue({ svg: "" }), }, })); import userEvent from "@testing-library/user-event"; import { makeTask, noop, noopDelete, noopMerge, noopMove, noopOpenDetail, noopRetry, mockConfirm, mockUsePluginUiSlots, expectBaseRule, readDashboardStylesSource, setupTaskDetailModalHooks, } from "./TaskDetailModal.test-helpers"; import { TaskDetailModal, TaskDetailContent } from "../TaskDetailModal"; import * as dashboardApi from "../../api"; import { FileBrowserProvider } from "../../context/FileBrowserContext"; setupTaskDetailModalHooks(); describe("TaskDetailModal", () => { it("renders clickable file links in markdown inline code while preserving code wrappers", async () => { const openFile = vi.fn(); render( , ); const fileLinks = screen.getAllByRole("button", { name: "packages/dashboard/app/App.tsx:12" }); expect(fileLinks.length).toBeGreaterThan(0); const code = fileLinks[0]?.closest("code"); expect(code).toBeTruthy(); expect(code?.querySelector("button.file-path-link")).toBe(fileLinks[0]); await userEvent.click(fileLinks[0]!); expect(openFile).toHaveBeenCalledWith("packages/dashboard/app/App.tsx", { line: 12, col: undefined }); }); /* FNXC:Markdown 2026-06-23-03:30: The task DESCRIPTION (spec/prompt) + SUMMARY now share the markdown pipeline's rehype-raw -> rehype-sanitize chain, so embedded raw HTML renders as real elements (not literal text), HTML comments drop, ", "", "```mermaid", "graph TD; A-->B;", "```", ].join("\n"); const { container } = render( , ); // Raw
/ renders as a real disclosure element. const details = container.querySelector(".markdown-body details"); expect(details).not.toBeNull(); expect(details?.querySelector("summary")?.textContent).toBe("Disclosure title"); expect(details?.textContent).toContain("Hidden detail body."); // HTML comment is dropped, never shown as literal text. expect(container.textContent).not.toContain("secret comment"); //