feat: govern attachment exceptions and ownership transfers
This commit is contained in:
@@ -11,6 +11,8 @@ from govoplan_campaign.backend.reports.campaigns import (
|
||||
_job_evidence_row,
|
||||
_latest_by_job_id,
|
||||
_load_delivery_info,
|
||||
_review_decision_summary,
|
||||
_review_decisions_by_job,
|
||||
generate_campaign_report,
|
||||
)
|
||||
|
||||
@@ -84,7 +86,21 @@ def test_job_evidence_row_contains_transport_and_message_evidence() -> None:
|
||||
updated_at=_dt(),
|
||||
)
|
||||
|
||||
row = _job_evidence_row(job, latest_smtp=smtp, latest_imap=imap)
|
||||
row = _job_evidence_row(
|
||||
job,
|
||||
latest_smtp=smtp,
|
||||
latest_imap=imap,
|
||||
review_decision={
|
||||
"decision": "accept",
|
||||
"reason": "Recipient confirmed no attachment was expected.",
|
||||
"actor_user_id": "reviewer-1",
|
||||
"decided_at": "2026-07-08T12:30:00+00:00",
|
||||
"review_key": "recipient-1",
|
||||
"message_sha256": "abc123",
|
||||
"issue_fingerprint": "def456",
|
||||
"issue_codes": ["missing_optional_attachment"],
|
||||
},
|
||||
)
|
||||
|
||||
assert row["campaign_id"] == "campaign-1"
|
||||
assert row["campaign_version_id"] == "version-1"
|
||||
@@ -103,6 +119,38 @@ def test_job_evidence_row_contains_transport_and_message_evidence() -> None:
|
||||
assert "latest_imap_error_message" not in row
|
||||
assert "eml_storage_key" not in row
|
||||
assert "eml_local_path" not in row
|
||||
assert row["review_decision"] == "accept"
|
||||
assert row["review_actor_user_id"] == "reviewer-1"
|
||||
assert row["review_issue_codes"] == "missing_optional_attachment"
|
||||
assert "review_message_sha256" not in row
|
||||
|
||||
|
||||
def test_report_uses_only_review_decisions_for_the_current_build() -> None:
|
||||
decision = {
|
||||
"job_id": "job-1",
|
||||
"decision": "accept",
|
||||
"issue_codes": ["missing_optional_attachment"],
|
||||
}
|
||||
version = SimpleNamespace(
|
||||
build_summary={"build_token": "build-2"},
|
||||
editor_state={
|
||||
"review_send": {
|
||||
"build_token": "build-2",
|
||||
"inspection_complete": True,
|
||||
"issue_decisions": [decision],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
decisions = _review_decisions_by_job(version)
|
||||
|
||||
assert decisions == {"job-1": decision}
|
||||
assert _review_decision_summary(decisions) == {
|
||||
"exception_decision_count": 1,
|
||||
"by_issue_code": {"missing_optional_attachment": 1},
|
||||
}
|
||||
version.editor_state["review_send"]["build_token"] = "stale-build"
|
||||
assert _review_decisions_by_job(version) == {}
|
||||
|
||||
|
||||
def test_latest_by_job_id_keeps_highest_attempt_number() -> None:
|
||||
|
||||
Reference in New Issue
Block a user