101 lines
2.5 KiB
TypeScript
101 lines
2.5 KiB
TypeScript
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),
|
|
);
|
|
});
|