feat: harden campaign delivery and editing
This commit is contained in:
@@ -5,7 +5,9 @@ from types import SimpleNamespace
|
||||
import unittest
|
||||
from unittest.mock import patch
|
||||
|
||||
from govoplan_core.core.postbox import PostboxDeliveryReceiptSummaryRef
|
||||
from govoplan_campaign.backend.reports.campaigns import (
|
||||
_campaign_postbox_receipt_summary,
|
||||
_job_evidence_row,
|
||||
_latest_by_job_id,
|
||||
_load_delivery_info,
|
||||
@@ -161,6 +163,64 @@ def test_aggregate_report_omits_recipient_level_failures_by_default() -> None:
|
||||
assert payload.call_args.kwargs["include_recent_failures"] is False
|
||||
|
||||
|
||||
def test_postbox_receipt_report_aggregates_provider_state_without_identities() -> None:
|
||||
class _Query:
|
||||
def join(self, *args, **kwargs):
|
||||
return self
|
||||
|
||||
def filter(self, *args, **kwargs):
|
||||
return self
|
||||
|
||||
def all(self):
|
||||
return [("delivery-1",), ("delivery-2",), ("delivery-1",)]
|
||||
|
||||
integration = SimpleNamespace(
|
||||
receipt_evidence_available=True,
|
||||
delivery_receipt_summaries=lambda session, **kwargs: {
|
||||
"delivery-1": PostboxDeliveryReceiptSummaryRef(
|
||||
delivery_id="delivery-1",
|
||||
message_id="message-1",
|
||||
postbox_id="postbox-1",
|
||||
delivery_status="accepted",
|
||||
accepted_at=_dt(),
|
||||
currently_readable=True,
|
||||
read_receipt_count=2,
|
||||
acknowledged_receipt_count=1,
|
||||
routed_message_count=1,
|
||||
),
|
||||
"delivery-2": PostboxDeliveryReceiptSummaryRef(
|
||||
delivery_id="delivery-2",
|
||||
message_id="message-2",
|
||||
postbox_id="postbox-2",
|
||||
delivery_status="accepted_vacant",
|
||||
accepted_at=_dt(),
|
||||
currently_readable=False,
|
||||
expired_message_count=1,
|
||||
),
|
||||
},
|
||||
)
|
||||
session = SimpleNamespace(query=lambda *args: _Query())
|
||||
with patch(
|
||||
"govoplan_campaign.backend.reports.campaigns.postbox_integration",
|
||||
return_value=integration,
|
||||
):
|
||||
report = _campaign_postbox_receipt_summary(
|
||||
session, # type: ignore[arg-type]
|
||||
tenant_id="tenant-1",
|
||||
campaign_id="campaign-1",
|
||||
version=SimpleNamespace(id="version-1"),
|
||||
)
|
||||
|
||||
assert report["delivery_count"] == 2
|
||||
assert report["currently_readable_delivery_count"] == 1
|
||||
assert report["read_delivery_count"] == 1
|
||||
assert report["acknowledged_delivery_count"] == 1
|
||||
assert report["routed_message_count"] == 1
|
||||
assert report["expired_message_count"] == 1
|
||||
assert "account_id" not in repr(report)
|
||||
assert "identity_id" not in repr(report)
|
||||
|
||||
|
||||
class CampaignReportProjectionTests(unittest.TestCase):
|
||||
def test_evidence_projection(self) -> None:
|
||||
test_job_evidence_row_contains_transport_and_message_evidence()
|
||||
|
||||
Reference in New Issue
Block a user