Add contact point resolution contract

This commit is contained in:
2026-08-02 06:20:18 +02:00
parent ca35aad286
commit 9ecdc6d713
3 changed files with 248 additions and 1 deletions
+55
View File
@@ -0,0 +1,55 @@
from __future__ import annotations
import unittest
from datetime import UTC, datetime
from govoplan_core.core.contact_points import (
CAPABILITY_ADDRESSES_CONTACT_POINT_RESOLUTION,
CONTACT_POINT_CONTRACT_VERSION,
ContactPointResolutionRequest,
contact_point_resolution_provider,
)
from govoplan_core.core.distribution_lists import DistributionSourceReference
class _Registry:
def __init__(self, capability: object | None = None) -> None:
self._capability = capability
def has_capability(self, name: str) -> bool:
return (
name == CAPABILITY_ADDRESSES_CONTACT_POINT_RESOLUTION
and self._capability is not None
)
def capability(self, _name: str) -> object:
return self._capability
class ContactPointContractTests(unittest.TestCase):
def test_request_is_provider_neutral_and_versioned(self) -> None:
request = ContactPointResolutionRequest(
tenant_id="tenant-1",
subject=DistributionSourceReference(
provider="idm",
resource_type="identity",
resource_id="identity-1",
),
effective_at=datetime(2026, 8, 2, tzinfo=UTC),
requested_channels=("email", "postal"),
address_purpose="official",
fallback_rule="primary",
postal_format="international",
)
self.assertEqual("1.0", CONTACT_POINT_CONTRACT_VERSION)
self.assertEqual("idm", request.subject.provider)
self.assertEqual(("email", "postal"), request.requested_channels)
def test_accessor_rejects_objects_that_do_not_implement_the_protocol(self) -> None:
self.assertIsNone(contact_point_resolution_provider(None))
self.assertIsNone(contact_point_resolution_provider(_Registry(object())))
if __name__ == "__main__":
unittest.main()