feat: harden campaign delivery and editing
This commit is contained in:
@@ -1,11 +1,13 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import unittest
|
||||
from datetime import UTC, datetime
|
||||
|
||||
from govoplan_core.core.postbox import (
|
||||
PostboxDeliveryCatalogRef,
|
||||
PostboxDirectoryEntryRef,
|
||||
PostboxDeliveryRequest,
|
||||
PostboxDeliveryReceiptSummaryRef,
|
||||
PostboxDeliveryResult,
|
||||
PostboxTargetRef,
|
||||
)
|
||||
@@ -55,11 +57,39 @@ class _PostboxDelivery:
|
||||
classification="internal",
|
||||
)
|
||||
|
||||
def link_evidence(self, session, *, tenant_id, message_id, attachment):
|
||||
del session, tenant_id, message_id, attachment
|
||||
return None
|
||||
|
||||
def delivery_receipt_summaries(
|
||||
self,
|
||||
session,
|
||||
*,
|
||||
tenant_id,
|
||||
producer_module,
|
||||
delivery_ids,
|
||||
):
|
||||
del session
|
||||
assert tenant_id == "tenant-1"
|
||||
assert producer_module == "campaigns"
|
||||
return {
|
||||
delivery_id: PostboxDeliveryReceiptSummaryRef(
|
||||
delivery_id=delivery_id,
|
||||
message_id="message-1",
|
||||
postbox_id="postbox-1",
|
||||
delivery_status="accepted",
|
||||
accepted_at=datetime(2026, 7, 30, tzinfo=UTC),
|
||||
currently_readable=True,
|
||||
read_receipt_count=1,
|
||||
)
|
||||
for delivery_id in delivery_ids
|
||||
}
|
||||
|
||||
|
||||
class PostboxCampaignIntegrationTests(unittest.TestCase):
|
||||
def test_optional_delivery_boundary_is_typed_and_explicit(self) -> None:
|
||||
delegate = _PostboxDelivery()
|
||||
integration = PostboxCampaignIntegration(delegate, delegate)
|
||||
integration = PostboxCampaignIntegration(delegate, delegate, delegate)
|
||||
request = PostboxDeliveryRequest(
|
||||
tenant_id="tenant-1",
|
||||
target=PostboxTargetRef(postbox_id="postbox-1"),
|
||||
@@ -73,8 +103,15 @@ class PostboxCampaignIntegrationTests(unittest.TestCase):
|
||||
result = integration.deliver(object(), request)
|
||||
|
||||
self.assertTrue(integration.available)
|
||||
self.assertTrue(integration.receipt_evidence_available)
|
||||
self.assertEqual("delivery-1", result.delivery_id)
|
||||
self.assertEqual(request, delegate.requests[0][1])
|
||||
summaries = integration.delivery_receipt_summaries(
|
||||
object(),
|
||||
tenant_id="tenant-1",
|
||||
delivery_ids=["delivery-1"],
|
||||
)
|
||||
self.assertEqual(1, summaries["delivery-1"].read_receipt_count)
|
||||
|
||||
def test_missing_postbox_is_reported_without_importing_module_code(
|
||||
self,
|
||||
@@ -91,6 +128,15 @@ class PostboxCampaignIntegrationTests(unittest.TestCase):
|
||||
)
|
||||
|
||||
self.assertFalse(integration.available)
|
||||
self.assertFalse(integration.receipt_evidence_available)
|
||||
self.assertEqual(
|
||||
{},
|
||||
integration.delivery_receipt_summaries(
|
||||
object(),
|
||||
tenant_id="tenant-1",
|
||||
delivery_ids=["delivery-1"],
|
||||
),
|
||||
)
|
||||
with self.assertRaises(PostboxDeliveryUnavailable):
|
||||
integration.deliver(object(), request)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user