feat: govern autonomous campaign delivery schedules
This commit is contained in:
@@ -138,3 +138,39 @@ def test_eml_retention_removes_only_terminal_artifact(tmp_path) -> None:
|
||||
assert job.eml_local_path is None
|
||||
assert job.eml_storage_key is None
|
||||
session.add.assert_called_once_with(job)
|
||||
|
||||
|
||||
def test_eml_retention_preserves_unfinished_autonomous_schedule_source(tmp_path) -> None:
|
||||
now = datetime.now(timezone.utc)
|
||||
eml_path = tmp_path / "approved-source.eml"
|
||||
eml_path.write_bytes(b"approved message")
|
||||
job = SimpleNamespace(
|
||||
campaign_id="campaign-1",
|
||||
campaign_version_id="version-1",
|
||||
updated_at=now - timedelta(days=10),
|
||||
queue_status="draft",
|
||||
send_status="smtp_accepted",
|
||||
imap_status="appended",
|
||||
eml_local_path=str(eml_path),
|
||||
eml_storage_key=None,
|
||||
)
|
||||
schedule_query = MagicMock()
|
||||
schedule_query.filter.return_value.all.return_value = [("version-1",)]
|
||||
job_query = MagicMock()
|
||||
job_query.filter.return_value.order_by.return_value.all.return_value = [job]
|
||||
session = MagicMock()
|
||||
session.query.side_effect = [schedule_query, job_query]
|
||||
policy = SimpleNamespace(generated_eml_retention_days=1)
|
||||
|
||||
result = _apply_eml_retention(
|
||||
session,
|
||||
dry_run=False,
|
||||
now=now,
|
||||
policy_for_campaign_id=lambda _campaign_id: policy,
|
||||
)
|
||||
|
||||
assert result["skipped_schedule_source"] == 1
|
||||
assert result["metadata_cleared"] == 0
|
||||
assert eml_path.exists()
|
||||
assert job.eml_local_path == str(eml_path)
|
||||
session.add.assert_not_called()
|
||||
|
||||
Reference in New Issue
Block a user