import { describe, expect, test } from "bun:test"; import { markdownToEmailHtml } from "../email/html-renderer.js"; describe("markdownToEmailHtml", () => { test("wraps plain text in email template", () => { const result = markdownToEmailHtml("Hello world"); expect(result).toContain(""); expect(result).toContain("
Hello world
"); expect(result).toContain("max-width:600px"); }); test("converts markdown bold to ", () => { const result = markdownToEmailHtml("This is **bold** text"); expect(result).toContain("bold"); }); test("converts markdown links", () => { const result = markdownToEmailHtml("Visit [Vellum](https://vellum.ai)"); expect(result).toContain('Vellum'); }); test("converts markdown lists", () => { const result = markdownToEmailHtml("- item one\n- item two\n- item three"); expect(result).toContain("");
expect(result).toContain("console.log(");
});
test("converts line breaks (GFM breaks mode)", () => {
const result = markdownToEmailHtml("line one\nline two");
expect(result).toContain("
");
});
test("returns raw HTML input as-is", () => {
const rawHtml = "Already HTML";
const result = markdownToEmailHtml(rawHtml);
expect(result).toBe(rawHtml);
});
test("handles empty string", () => {
const result = markdownToEmailHtml("");
expect(result).toBe("");
});
test("converts literal backslash-n after normalization", () => {
// LLMs often produce literal "\n" instead of real newlines.
// handleEmailSend normalizes them before calling markdownToEmailHtml.
const raw = "Hi Noa,\\n\\nTesting line breaks!\\n\\nThanks!";
const normalized = raw.replace(/\\n/g, "\n");
const result = markdownToEmailHtml(normalized);
expect(result).toContain("Hi Noa,
");
expect(result).toContain("Testing line breaks!
");
expect(result).toContain("Thanks!
");
expect(result).not.toContain("\\n");
});
test("handles multiline markdown email", () => {
const md = `Hi there,
Thanks for reaching out! Here's what I found:
1. **First point** — some details
2. **Second point** — more details
Let me know if you need anything else.
Best,
Assistant`;
const result = markdownToEmailHtml(md);
expect(result).toContain("");
expect(result).toContain("First point");
expect(result).toContain("");
expect(result).toContain("- ");
});
});