import assert from "node:assert/strict"; import { describe, it } from "node:test"; import { validateInquiry } from "./schema.ts"; import { offerIds } from "../../content/offer-ids.ts"; describe("validateInquiry", () => { const valid = { name: "Anna Müller", email: "anna@example.com", company: "Glaswerk", message: "Wir brauchen eine belastbare Abbildung unseres Satzprozesses.", locale: "de", website: "", }; it("accepts a complete inquiry", () => { const result = validateInquiry(valid); assert.equal(result.ok, true); if (result.ok) { assert.equal(result.data.email, "anna@example.com"); assert.equal(result.data.company, "Glaswerk"); } }); it("rejects a filled honeypot", () => { const result = validateInquiry({ ...valid, website: "https://spam.test" }); assert.equal(result.ok, false); if (!result.ok) assert.equal(result.code, "spam"); }); it("rejects short messages and invalid email", () => { assert.equal(validateInquiry({ ...valid, message: "Hallo" }).ok, false); assert.equal(validateInquiry({ ...valid, email: "not-an-email" }).ok, false); }); it("allows an empty company field", () => { const result = validateInquiry({ ...valid, company: " " }); assert.equal(result.ok, true); if (result.ok) assert.equal(result.data.company, undefined); }); it("accepts every published offer id", () => { for (const topic of offerIds) { const result = validateInquiry({ ...valid, topic }); assert.equal(result.ok, true); if (result.ok) assert.equal(result.data.topic, topic); } }); it("rejects an unknown topic", () => { const result = validateInquiry({ ...valid, topic: "casino" }); assert.equal(result.ok, false); if (!result.ok) assert.equal(result.field, "topic"); }); it("treats a blank topic as omitted", () => { const result = validateInquiry({ ...valid, topic: " " }); assert.equal(result.ok, true); if (result.ok) assert.equal(result.data.topic, undefined); }); });