test_mail_backends.py 1.3 KB

123456789101112131415161718192021222324252627282930
  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(mail_backends.TASKS,
  8. {key: type('obj', (object,), {'delay': mail_backends.MultiLaneEmailBackend._run_task})
  9. for key in mail_backends.TASKS})
  10. class MultiLaneEmailBackendTestCase(TestCase):
  11. test_backend = settings.EMAIL_BACKEND
  12. def test_lanes(self):
  13. debug_params = {'foo': 'bar'}
  14. debug_params_orig = debug_params.copy()
  15. with self.settings(EMAIL_BACKEND='desecapi.mail_backends.MultiLaneEmailBackend'):
  16. for lane in ['email_slow_lane', 'email_fast_lane']:
  17. subject = f'Test subject for lane {lane}'
  18. connection = get_connection(lane=lane, backbackend=self.test_backend, debug=debug_params)
  19. EmailMessage(subject=subject, to=['to@test.invalid'], connection=connection).send()
  20. self.assertDictEqual(mail.outbox[-1].connection.task_kwargs['debug'], {'lane': lane, **debug_params})
  21. self.assertEqual(mail.outbox[-1].subject, subject)
  22. # Check that the backend hasn't modified the dict we passed
  23. self.assertEqual(debug_params, debug_params_orig)