import { renderToStaticMarkup } from "react-dom/server";
import ReactMarkdown from "react-markdown";
import remarkGfm from "remark-gfm";
import { describe, expect, it } from "vite-plus/test";
import { remarkGithubAlerts } from "./markdown-github-alerts";
function renderMarkdown(markdown: string): string {
return renderToStaticMarkup(
{markdown},
);
}
describe("remarkGithubAlerts", () => {
it("tags a quote whose first line is a marker, and drops the marker line", () => {
const html = renderMarkdown("> [!NOTE]\n> The content of the note.");
expect(html).toContain('data-alert="note"');
expect(html).not.toContain("[!NOTE]");
expect(html).toContain("The content of the note.");
});
it("keeps content that follows a marker-only paragraph", () => {
const html = renderMarkdown("> [!WARNING]\n>\n> ### A heading\n>\n> And a paragraph.");
expect(html).toContain('data-alert="warning"');
expect(html).not.toContain("[!WARNING]");
expect(html).toContain("A heading");
expect(html).toContain("And a paragraph.");
});
it("tags a quote whose next line opens with an inline node rather than text", () => {
const html = renderMarkdown("> [!NOTE]\n> **Medium Risk** Changes live transcript routing.");
expect(html).toContain('data-alert="note"');
expect(html).not.toContain("[!NOTE]");
expect(html).toContain("Medium Risk");
expect(html).toContain("Changes live transcript routing.");
});
it("reads the marker case-insensitively, normalizing the kind", () => {
const html = renderMarkdown("> [!important]\n> Read this.");
expect(html).toContain('data-alert="important"');
});
it("leaves a quote alone when the marker shares its line with anything else", () => {
const html = renderMarkdown("> [!NOTE] an ordinary quote");
expect(html).not.toContain("data-alert");
expect(html).toContain("[!NOTE] an ordinary quote");
});
it("leaves an unknown marker as the text it is", () => {
const html = renderMarkdown("> [!DANGER]\n> Not one of GitHub's.");
expect(html).not.toContain("data-alert");
expect(html).toContain("[!DANGER]");
});
});