123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- from django.conf import settings
- from django.core.mail import EmailMultiAlternatives, send_mail, EmailMessage
- from django.core.mail.backends.base import BaseEmailBackend
- from django.test import TestCase
- from django.test.utils import override_settings
-
- from ..models import Email, STATUS, PRIORITY
- from ..settings import get_backend
-
-
- class ErrorRaisingBackend(BaseEmailBackend):
- """
- An EmailBackend that always raises an error during sending
- to test if django_mailer handles sending error correctly
- """
-
- def send_messages(self, email_messages):
- raise Exception('Fake Error')
-
-
- class BackendTest(TestCase):
-
- @override_settings(EMAIL_BACKEND='post_office.EmailBackend')
- def test_email_backend(self):
- """
- Ensure that email backend properly queue email messages.
- """
- send_mail('Test', 'Message', 'from@example.com', ['to@example.com'])
- email = Email.objects.latest('id')
- self.assertEqual(email.subject, 'Test')
- self.assertEqual(email.status, STATUS.queued)
- self.assertEqual(email.priority, PRIORITY.medium)
-
- def test_email_backend_setting(self):
- """
-
- """
- old_email_backend = getattr(settings, 'EMAIL_BACKEND', None)
- old_post_office_backend = getattr(settings, 'POST_OFFICE_BACKEND', None)
- if hasattr(settings, 'EMAIL_BACKEND'):
- delattr(settings, 'EMAIL_BACKEND')
- if hasattr(settings, 'POST_OFFICE_BACKEND'):
- delattr(settings, 'POST_OFFICE_BACKEND')
-
- previous_settings = settings.POST_OFFICE
- delattr(settings, 'POST_OFFICE')
- # If no email backend is set, backend should default to SMTP
- self.assertEqual(get_backend(), 'django.core.mail.backends.smtp.EmailBackend')
-
- # If EMAIL_BACKEND is set to PostOfficeBackend, use SMTP to send by default
- setattr(settings, 'EMAIL_BACKEND', 'post_office.EmailBackend')
- self.assertEqual(get_backend(), 'django.core.mail.backends.smtp.EmailBackend')
-
- # If EMAIL_BACKEND is set on new dictionary-styled settings, use that
- setattr(settings, 'POST_OFFICE', {'EMAIL_BACKEND': 'test'})
- self.assertEqual(get_backend(), 'test')
- delattr(settings, 'POST_OFFICE')
-
- if old_email_backend:
- setattr(settings, 'EMAIL_BACKEND', old_email_backend)
- else:
- delattr(settings, 'EMAIL_BACKEND')
- setattr(settings, 'POST_OFFICE', previous_settings)
-
- @override_settings(EMAIL_BACKEND='post_office.EmailBackend')
- def test_sending_html_email(self):
- """
- "text/html" attachments to Email should be persisted into the database
- """
- message = EmailMultiAlternatives('subject', 'body', 'from@example.com',
- ['recipient@example.com'])
- message.attach_alternative('html', "text/html")
- message.send()
- email = Email.objects.latest('id')
- self.assertEqual(email.html_message, 'html')
-
- @override_settings(EMAIL_BACKEND='post_office.EmailBackend')
- def test_headers_sent(self):
- """
- Test that headers are correctly set on the outgoing emails.
- """
- message = EmailMessage('subject', 'body', 'from@example.com',
- ['recipient@example.com'],
- headers={'Reply-To': 'reply@example.com'})
- message.send()
- email = Email.objects.latest('id')
- self.assertEqual(email.headers, {'Reply-To': 'reply@example.com'})
-
- @override_settings(EMAIL_BACKEND='post_office.EmailBackend')
- def test_backend_attachments(self):
- message = EmailMessage('subject', 'body', 'from@example.com',
- ['recipient@example.com'])
-
- message.attach('attachment.txt', 'attachment content')
- message.send()
-
- email = Email.objects.latest('id')
- self.assertEqual(email.attachments.count(), 1)
- self.assertEqual(email.attachments.all()[0].name, 'attachment.txt')
- self.assertEqual(email.attachments.all()[0].file.read(), b'attachment content')
-
- @override_settings(
- EMAIL_BACKEND='post_office.EmailBackend',
- POST_OFFICE={
- 'DEFAULT_PRIORITY': 'now',
- 'BACKENDS': {'default': 'django.core.mail.backends.dummy.EmailBackend'}
- }
- )
- def test_default_priority_now(self):
- # If DEFAULT_PRIORITY is "now", mails should be sent right away
- send_mail('Test', 'Message', 'from1@example.com', ['to@example.com'])
- email = Email.objects.latest('id')
- self.assertEqual(email.status, STATUS.sent)
|