Release govoplan-campaign v0.1.28: stabilize saving, review and delivery recovery
Module Package Release / publish-packages (push) Successful in 12s

This commit is contained in:
2026-09-08 01:32:26 +02:00
parent 1b32427813
commit c51fc180fb
111 changed files with 6905 additions and 980 deletions
@@ -0,0 +1,34 @@
import assert from "node:assert/strict";
import test from "node:test";
import { groupCampaignValidationIssues } from "../src/features/campaigns/review/validationIssueGroups.ts";
const cause = { code: "missing_required_attachment", severity: "warning", path: "/entries/recipient-1/attachments/0", message: "No file matched filter" };
const outcome = { code: "missing_attachment_coverage", severity: "info", path: "/entries/recipient-1", message: "Policy excludes this message without attachments" };
test("one grouped condition preserves the missing-rule cause and policy outcome regardless of order", () => {
for (const records of [[cause, outcome], [outcome, cause]]) {
const groups = groupCampaignValidationIssues(records);
assert.equal(groups.length, 1);
assert.deepEqual(groups[0].causes, [cause]);
assert.deepEqual(groups[0].outcomes, [outcome]);
assert.deepEqual(groups[0].evidence, records);
assert.equal(groups[0].severity, "warning");
}
});
test("different recipients, unmatched rule without coverage, and unrelated errors are never collapsed", () => {
const email = { code: "missing_email", severity: "error", path: "/entries/recipient-1", message: "No address" };
const other = { ...cause, path: "/entries/recipient-2/attachments/0" };
const groups = groupCampaignValidationIssues([cause, outcome, email, other]);
assert.equal(groups.length, 3);
assert.deepEqual(groups[1].evidence, [email]);
assert.deepEqual(groups[2].evidence, [other]);
});
test("multiple rule causes remain visible and a real block is not downgraded by an informational outcome", () => {
const blocked = { ...cause, severity: "error", path: "/entries/recipient-1/attachments/1" };
const [group] = groupCampaignValidationIssues([cause, blocked, outcome]);
assert.equal(group.severity, "error");
assert.equal(group.causes.length, 2);
assert.equal(group.evidence.length, 3);
});