/* Unit tests for markdown hygiene covering normalizeGeneratedMarkdownText; canonicalizeGeneratedMarkdownText; formatGeneratedMarkdownListItem. It also guards the documented public contract and regression-sensitive edge cases. Not a contract source of truth — the module under test owns the authoritative behavior; fixtures are minimal scaffolding only. RFC-1311: Compass header sweep — declares the markdown suite's contract for test-file scaffold coverage. */ import { describe, expect, it } from "vitest"; import { canonicalizeGeneratedMarkdownText, formatGeneratedMarkdownListItem, normalizeGeneratedMarkdownText, } from "../markdown-hygiene.ts"; describe("normalizeGeneratedMarkdownText", () => { it("returns empty string for undefined", () => { expect(normalizeGeneratedMarkdownText(undefined)).toBe(""); }); it("normalizes CRLF to LF", () => { expect(normalizeGeneratedMarkdownText("a\r\nb")).toBe("a\nb"); }); it("converts
tags to newlines", () => { expect(normalizeGeneratedMarkdownText("a
b")).toBe("a\nb"); expect(normalizeGeneratedMarkdownText("a
b")).toBe("a\nb"); }); it("converts date slashes to ISO format", () => { expect(normalizeGeneratedMarkdownText("2024/1/5")).toBe("2024-01-05"); expect(normalizeGeneratedMarkdownText("2024/12/15")).toBe("2024-12-15"); }); it("fixes - --- to ---", () => { expect(normalizeGeneratedMarkdownText("- ---\n")).toBe("---"); }); it("fixes - - to - ", () => { expect(normalizeGeneratedMarkdownText("- - item")).toBe("- item"); }); it("fixes - # to #", () => { expect(normalizeGeneratedMarkdownText("- ## Heading")).toBe("## Heading"); }); it("trims trailing whitespace", () => { expect(normalizeGeneratedMarkdownText("text \n")).toBe("text"); }); }); describe("canonicalizeGeneratedMarkdownText", () => { it("strips default language prefix from URLs", () => { const result = canonicalizeGeneratedMarkdownText( "Link to [page](https://example.com/de/page)", { baseUrl: "https://example.com", defaultLanguage: "de", }, ); expect(result).toBe("Link to [page](https://example.com/page)"); }); it("does not strip when no baseUrl/defaultLanguage", () => { const result = canonicalizeGeneratedMarkdownText("https://example.com/de/page"); expect(result).toBe("https://example.com/de/page"); }); }); describe("formatGeneratedMarkdownListItem", () => { it("wraps plain text as list item", () => { expect(formatGeneratedMarkdownListItem("Simple text")).toEqual(["- Simple text"]); }); it("returns empty array for empty text", () => { expect(formatGeneratedMarkdownListItem("")).toEqual([]); }); it("splits markdown blocks into lines", () => { const result = formatGeneratedMarkdownListItem("## Heading\n\nParagraph"); expect(result).toEqual(["## Heading", "", "Paragraph"]); }); });