From bc8afeb139f713a30e6e6d52e3f554e1f7648196 Mon Sep 17 00:00:00 2001 From: Albrecht Degering Date: Wed, 22 Jul 2026 20:30:00 +0200 Subject: [PATCH] test(campaign): align synchronous send security contract --- tests/test_api_smoke.py | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/tests/test_api_smoke.py b/tests/test_api_smoke.py index 1cc68a1..8b4b96a 100644 --- a/tests/test_api_smoke.py +++ b/tests/test_api_smoke.py @@ -4211,18 +4211,17 @@ class ApiSmokeTests(unittest.TestCase): "enqueue_imap_task": False, }, ) - self.assertEqual(sent.status_code, 200, sent.text) - self.assertEqual(sent.json()["result"]["sent_count"], 0) - self.assertEqual(sent.json()["result"]["failed_count"], 1) - self.assertIn("changed after this campaign was built", sent.json()["result"]["results"][0]["message"]) + self.assertEqual(sent.status_code, 422, sent.text) + self.assertIn("Synchronous preflight stopped before contacting SMTP", sent.json()["detail"]) with SessionLocal() as session: job = session.query(CampaignJob).filter(CampaignJob.campaign_version_id == version_id).one() - self.assertEqual(job.send_status, "failed_permanent") - attempt = session.query(SendAttempt).filter(SendAttempt.job_id == job.id).one() - self.assertIn("changed after this campaign was built", attempt.error_message) - self.assertNotIn("smtp.example.invalid", attempt.error_message) - self.assertIsNone(attempt.smtp_response) + self.assertEqual(job.queue_status, "draft") + self.assertEqual(job.send_status, "not_queued") + self.assertEqual( + session.query(SendAttempt).filter(SendAttempt.job_id == job.id).count(), + 0, + ) def test_send_now_sends_exact_generated_eml_bytes(self) -> None: headers, _ = self._login() @@ -4286,11 +4285,15 @@ class ApiSmokeTests(unittest.TestCase): "enqueue_imap_task": False, }, ) - self.assertEqual(sent.status_code, 200, sent.text) - self.assertEqual(sent.json()["result"]["failed_count"], 1) - self.assertIn("Generated EML", sent.json()["result"]["results"][0]["message"]) + self.assertEqual(sent.status_code, 422, sent.text) + self.assertIn("Synchronous preflight stopped before contacting SMTP", sent.json()["detail"]) self.assertEqual(list_records(kind="smtp"), []) + with SessionLocal() as session: + job = session.query(CampaignJob).filter(CampaignJob.campaign_version_id == version_id).one() + self.assertEqual(job.queue_status, "draft") + self.assertEqual(job.send_status, "not_queued") + def test_partial_smtp_recipient_refusal_is_recorded_without_retrying_accepted_delivery(self) -> None: headers, _ = self._login() from govoplan_mail.backend.dev.mock_mailbox import set_failures @@ -4349,7 +4352,8 @@ class ApiSmokeTests(unittest.TestCase): self.assertEqual(sent.status_code, 200, sent.text) result = sent.json()["result"] self.assertEqual(result["sent_count"], 1, sent.text) - self.assertIn("refused recipients", result["results"][0]["message"]) + self.assertEqual(result["results"][0]["status"], "smtp_accepted") + self.assertNotIn("message", result["results"][0]) finally: set_failures(smtp_reject_recipients_containing=None)