import { describe, it, expect, afterEach } from "vitest"; import { render, cleanup, screen } from "@testing-library/react"; import { MailboxMessageContent } from "../MailboxMessageContent"; afterEach(() => { cleanup(); }); describe("MailboxMessageContent", () => { it("renders plain-text messages unchanged", () => { render(); expect(screen.getByText("Hello, this is plain text.")).toBeInTheDocument(); }); it("renders headings as semantic heading elements", () => { render(); const heading = screen.getByRole("heading", { level: 1, name: "Status Update" }); expect(heading).toBeInTheDocument(); }); it("renders bold and italic emphasis", () => { const { container } = render( , ); expect(container.querySelector("strong")?.textContent).toBe("bold"); expect(container.querySelector("em")?.textContent).toBe("italic"); }); it("renders unordered lists", () => { render(); const items = screen.getAllByRole("listitem"); expect(items).toHaveLength(3); expect(items[0]?.textContent).toBe("one"); }); it("renders inline code with code element", () => { const { container } = render( , ); const code = container.querySelector("code"); expect(code?.textContent).toBe("pnpm test"); }); it("renders fenced code blocks inside the markdown
 wrapper", () => {
    const content = "```\nnpm install\n```";
    const { container } = render();
    const pre = container.querySelector("pre.mailbox-markdown-pre");
    expect(pre).not.toBeNull();
    expect(pre?.textContent).toContain("npm install");
  });

  it("renders links with target=_blank and noopener noreferrer", () => {
    render(
      ,
    );
    const link = screen.getByRole("link", { name: "docs" });
    expect(link.getAttribute("href")).toBe("https://example.com/docs");
    expect(link.getAttribute("target")).toBe("_blank");
    expect(link.getAttribute("rel")).toContain("noopener");
    expect(link.getAttribute("rel")).toContain("noreferrer");
  });

  it("renders GFM tables with the mailbox-scoped class", () => {
    const content = ["| col a | col b |", "| --- | --- |", "| 1 | 2 |"].join("\n");
    const { container } = render();
    const table = container.querySelector("table.mailbox-markdown-table");
    expect(table).not.toBeNull();
    expect(table?.querySelectorAll("th")).toHaveLength(2);
    expect(table?.querySelectorAll("tbody td")).toHaveLength(2);
  });

  it("does NOT execute raw HTML in messages", () => {
    const content = "Hello";
    const { container } = render();
    // ReactMarkdown defaults disallow raw HTML — the