import assert from "node:assert/strict"; import test from "node:test"; import { validateCampaignCreateInput, validateCampaignUpdateInput, } from "../lib/campaign-validation"; test("campaign mutation validation normalizes and enforces fixed Germany context", () => { const payload = validateCampaignCreateInput({ status: "active", recurrence: "daily", postalCode: "10115", radiusKm: 10, maxNewLeadsPerRun: 5, maxAuditsPerRun: 5, }); assert.equal(payload.countryCode, "DE"); assert.equal(payload.country, "Deutschland"); }); test("campaign validation rejects invalid German PLZ", () => { assert.throws( () => validateCampaignCreateInput({ status: "active", recurrence: "daily", postalCode: "1234", radiusKm: 10, maxNewLeadsPerRun: 5, maxAuditsPerRun: 5, }), (error: unknown) => { return ( error instanceof Error && error.message.includes("5") && /PLZ|Postleitzahl/i.test(error.message) ); }, ); }); test("campaign validation rejects decimal limits", () => { assert.throws( () => validateCampaignCreateInput({ status: "active", recurrence: "daily", postalCode: "10115", radiusKm: 10.5, maxNewLeadsPerRun: 5, maxAuditsPerRun: 5, }), (error: unknown) => { return error instanceof Error && error.message.includes("ganze"); }, ); }); test("campaign validation rejects invalid recurrence/status in German", () => { assert.throws( () => validateCampaignCreateInput({ status: "running", recurrence: "daily", postalCode: "10115", radiusKm: 10, maxNewLeadsPerRun: 5, maxAuditsPerRun: 5, }), (error: unknown) => error instanceof Error && error.message.includes("Status"), ); assert.throws( () => validateCampaignCreateInput({ status: "active", recurrence: "hourly", postalCode: "10115", radiusKm: 10, maxNewLeadsPerRun: 5, maxAuditsPerRun: 5, }), (error: unknown) => error instanceof Error && /Frequenz|ungültig/.test(error.message), ); }); test("campaign update validation rejects partial Germany-context payloads", () => { assert.throws( () => validateCampaignUpdateInput({ countryCode: "DE", }), (error: unknown) => error instanceof Error && /vollständig|Deutschland-Kontext/.test(error.message), ); });