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();
});
});