Implement governed hybrid campaign delivery
This commit is contained in:
@@ -180,6 +180,42 @@ def test_postbox_only_campaign_does_not_require_mail() -> None:
|
||||
}
|
||||
|
||||
|
||||
def test_print_only_campaign_requires_templates_and_an_explicit_target_not_mail() -> None:
|
||||
config = CampaignConfig.model_validate(
|
||||
{
|
||||
"version": "1.0",
|
||||
"campaign": {"id": "campaign-print", "name": "Printed notice", "mode": "send"},
|
||||
"template": {"subject": "Notice", "text": "Printed body", "body_mode": "text"},
|
||||
"entries": {
|
||||
"inline": [
|
||||
{
|
||||
"id": "recipient-1",
|
||||
"channel_policy": "print",
|
||||
"print_target": {
|
||||
"channel": "postal",
|
||||
"target": "Example Street 1",
|
||||
"target_key": "postal:example-street-1",
|
||||
},
|
||||
}
|
||||
]
|
||||
},
|
||||
"delivery": {
|
||||
"channel_policy": "print",
|
||||
"print": {"template_id": "template-1", "template_revision": 2},
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
available = validate_campaign_config(config, templates_available=True)
|
||||
unavailable = validate_campaign_config(config, templates_available=False)
|
||||
|
||||
assert "missing_mail_profile" not in {issue.code for issue in available.issues}
|
||||
assert "missing_sender" not in {issue.code for issue in available.issues}
|
||||
assert "print_template_missing" not in {issue.code for issue in available.issues}
|
||||
assert "print_target_missing" not in {issue.code for issue in available.issues}
|
||||
assert "templates_unavailable" in {issue.code for issue in unavailable.issues}
|
||||
|
||||
|
||||
def test_row_resolves_multiple_direct_and_field_derived_postboxes() -> None:
|
||||
config = _config()
|
||||
integration = _PostboxIntegration()
|
||||
|
||||
Reference in New Issue
Block a user