import { describe, expect, mock, test } from "bun:test"; mock.module("cloudflare:workers", () => ({ env: {} })); mock.module("./db", () => ({ run: async () => ({ meta: { changes: 0 } }) })); const { securityTxt } = await import("./legal"); const base = { forgeName: "gitfor", publicUrl: "https://gitfor.dev/", entity: null, contactEmail: "legal@gitfor.dev", address: null, jurisdiction: null, dmcaEmail: null, securityEmail: null, supportEmail: null, draft: true, }; describe("securityTxt", () => { test("emits RFC 9116 fields with Expires one year out", () => { const now = Date.UTC(2026, 9, 12); const body = securityTxt({ ...base, securityEmail: "security@gitfor.dev" }, now); expect(body).toContain("Contact: mailto:security@gitfor.dev\n"); expect(body).toContain("Expires: 2027-10-11T00:00:00Z\n"); expect(body).toContain("Policy: https://gitfor.dev/security\n"); expect(body).toContain("Canonical: https://gitfor.dev/.well-known/security.txt\n"); expect(body).toContain("Preferred-Languages: en\n"); }); test("falls back to the legal contact, and publishes nothing without any contact", () => { expect(securityTxt(base, 0)).toContain("Contact: mailto:legal@gitfor.dev"); const bare = securityTxt({ ...base, contactEmail: null }, 0); expect(bare).toContain("Contact: https://gitfor.dev/security"); expect(securityTxt({ ...base, contactEmail: null, publicUrl: "" }, 0)).toBeNull(); }); });