import assert from "node:assert/strict"; import { mkdtemp, mkdir, readFile, readdir, rm, writeFile } from "node:fs/promises"; import os from "node:os"; import path from "node:path"; import test, { type TestContext } from "node:test"; import { createClient } from "@supabase/supabase-js"; import { Resend } from "resend"; import { renderEmail } from "../src/emails/render.ts"; import type { Database } from "../src/types/db.ts"; import { collectRecipients, loadAnnouncement, main, sendAnnouncement } from "./send-announcement.mts"; const announcement = { id: "test-notice", title: "Creator notice", message: "Please review your credits.", ready: true }; const message = { from: "Hackdex ", replyTo: "test@example.com", subject: announcement.title, html: "

Please review your credits.

", text: announcement.message }; const recipients = [{ email: "creator@example.com", userIds: ["00000000-0000-4000-8000-000000000001"], hacks: ["hack-one"] }]; async function temporaryDirectory(t: TestContext) { const directory = await mkdtemp(path.join(os.tmpdir(), "hackdex-announcement-")); t.after(() => rm(directory, { recursive: true, force: true })); return directory; } test("announcement escapes content, preserves paragraphs, and links URLs", async () => { const html = await renderEmail("announcement", { title: ' & news', message: 'Hello \n\nRead https://www.hackdex.app/terms?a=1&b=2.\njavascript:alert(1)', }); assert.ok(html.includes("<img")); assert.ok(html.includes("<script>")); assert.ok(html.includes("

")); assert.ok(html.includes('href="https://www.hackdex.app/terms?a=1&b=2"')); assert.ok(html.includes("You can reply to this email")); assert.ok(!html.includes("Please do not reply")); assert.ok(!html.includes("