This commit is contained in:
2026-05-04 17:24:41 +02:00
parent f1694ac99b
commit 7950bc9f64
10 changed files with 255 additions and 96 deletions
+18 -13
View File
@@ -103,7 +103,7 @@ class MailerTests(unittest.TestCase):
self.assertEqual(result["attempts"][1]["status"], "ok")
fallback_smtp.send_message.assert_called_once()
def test_send_email_message_rejects_unauthorized_from_address(self) -> None:
def test_send_email_message_retries_with_smtp_username_when_from_is_rejected(self) -> None:
settings = SimpleNamespace(
smtp_host="smtp.example.com",
smtp_port=587,
@@ -116,25 +116,30 @@ class MailerTests(unittest.TestCase):
smtp_timeout=15,
)
smtp = MagicMock()
smtp.send_message.side_effect = smtplib.SMTPDataError(
551, b"5.7.1 Not authorised to send from this header address"
)
smtp.send_message.side_effect = [
smtplib.SMTPDataError(551, b"5.7.1 Not authorised to send from this header address"),
{},
]
smtp_factory = MagicMock(return_value=_SMTPContext(smtp))
with patch("media_library_viewer_api.services.mailer.smtplib.SMTP", smtp_factory), patch(
"media_library_viewer_api.services.mailer.smtplib.SMTP_SSL"
) as smtp_ssl:
with self.assertRaises(RuntimeError) as ctx:
send_email_message(
settings,
recipients=["alex@example.com"],
subject="Hello",
html_body="<p>Hello</p>",
)
result = send_email_message(
settings,
recipients=["alex@example.com"],
subject="Hello",
html_body="<p>Hello</p>",
)
smtp_ssl.assert_not_called()
self.assertIn("authorized alias", str(ctx.exception).lower())
self.assertEqual(smtp.send_message.call_count, 1)
self.assertEqual(result["from_address"], "mailer@example.com")
self.assertEqual(smtp.send_message.call_count, 2)
first_message = smtp.send_message.call_args_list[0].args[0]
second_message = smtp.send_message.call_args_list[1].args[0]
self.assertEqual(first_message["From"], "Manage <alias@example.com>")
self.assertEqual(second_message["From"], "Manage <mailer@example.com>")
self.assertEqual(second_message["Reply-To"], "alias@example.com")
def test_describe_smtp_error_handles_timeout(self) -> None:
detail = describe_smtp_error(TimeoutError("timed out"))