test_mail_backends.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. from unittest import mock
  2. from django.conf import settings
  3. from django.core import mail
  4. from django.core.mail import EmailMessage, get_connection
  5. from django.test import TestCase
  6. from desecapi import mail_backends
  7. @mock.patch.dict(
  8. mail_backends.TASKS,
  9. {
  10. key: type(
  11. "obj", (object,), {"delay": mail_backends.MultiLaneEmailBackend._run_task}
  12. )
  13. for key in mail_backends.TASKS
  14. },
  15. )
  16. class MultiLaneEmailBackendTestCase(TestCase):
  17. test_backend = settings.EMAIL_BACKEND
  18. def test_lanes(self):
  19. debug_params = {"foo": "bar"}
  20. debug_params_orig = debug_params.copy()
  21. with self.settings(
  22. EMAIL_BACKEND="desecapi.mail_backends.MultiLaneEmailBackend"
  23. ):
  24. for lane in ["email_slow_lane", "email_fast_lane", None]:
  25. subject = f"Test subject for lane {lane}"
  26. connection = get_connection(
  27. lane=lane, backbackend=self.test_backend, debug=debug_params
  28. )
  29. EmailMessage(
  30. subject=subject, to=["to@test.invalid"], connection=connection
  31. ).send()
  32. self.assertEqual(
  33. mail.outbox[-1].connection.task_kwargs["debug"],
  34. {"lane": lane or "email_slow_lane", **debug_params},
  35. )
  36. self.assertEqual(mail.outbox[-1].subject, subject)
  37. # Check that the backend hasn't modified the dict we passed
  38. self.assertEqual(debug_params, debug_params_orig)