Source code for mails.tests.test_model_based_backend

from django.core.management import call_command
from django.test import TestCase

from mails.models import MailLog, MAIL_RENDERED, MAIL_NOT_RENDERED, MAIL_SENT
from mails.utils import DirectMailUtil
from submissions.factories import SubmissionFactory


[docs]class ModelEmailBackendTests(TestCase): """ Test the ModelEmailBackend object assuming the MailEngine and DirectMailUtil work properly. """
[docs] @classmethod def setUpTestData(cls): cls.submission = SubmissionFactory.create()
[docs] def test_non_rendered_database_entries(self): """Test non rendered mail database entries are correct after sending email.""" with self.settings(EMAIL_BACKEND='mails.backends.filebased.ModelEmailBackend'): mail_util = DirectMailUtil( 'tests/test_mail_code_1', subject='Test Subject Unique For Testing 93872', recipient_list=['test1@scipost.org'], bcc=['test2@scipost.org'], from_email='test3@scipost.org', from_name='Test Name', weird_variable_name='John Doe') self.assertFalse(mail_util.engine._mail_sent) mail_util.send_mail() self.assertTrue(mail_util.engine._mail_sent) mail_log = MailLog.objects.last() self.assertFalse(mail_log.processed) self.assertEqual(mail_log.status, MAIL_NOT_RENDERED) self.assertEqual(mail_log.mail_code, 'tests/test_mail_code_1') self.assertEqual(mail_log.subject, 'Test Subject Unique For Testing 93872') self.assertEqual(mail_log.body, '') self.assertEqual(mail_log.body_html, '') self.assertIn('test1@scipost.org', mail_log.to_recipients) self.assertIn('test2@scipost.org', mail_log.bcc_recipients) self.assertEqual('Test Name <test3@scipost.org>', mail_log.from_email)
[docs] def test_rendered_database_entries(self): """Test rendered mail database entries are correct after sending email.""" with self.settings(EMAIL_BACKEND='mails.backends.filebased.ModelEmailBackend'): mail_util = DirectMailUtil( 'tests/test_mail_code_1', delayed_processing=False, subject='Test Subject Unique For Testing 786234') # Use weird subject to confirm right instance. mail_util.send_mail() mail_log = MailLog.objects.last() self.assertEqual(mail_log.status, MAIL_RENDERED) self.assertEqual(mail_log.subject, 'Test Subject Unique For Testing 786234') self.assertNotEqual(mail_log.body, '') self.assertNotEqual(mail_log.body_html, '')
[docs] def test_context_saved_to_database(self): """Test mail database entries have relations with their context items.""" with self.settings(EMAIL_BACKEND='mails.backends.filebased.ModelEmailBackend'): mail_util = DirectMailUtil( 'tests/test_mail_code_1', subject='Test Subject Unique For Testing 786234', weird_variable_name='TestValue1', random_submission_relation=self.submission) mail_util.send_mail() mail_log = MailLog.objects.last() context = mail_log.get_full_context() self.assertEqual(mail_log.status, MAIL_NOT_RENDERED) self.assertEqual(mail_log.subject, 'Test Subject Unique For Testing 786234') self.assertIn('random_submission_relation', context) self.assertEqual(context['random_submission_relation'], self.submission) self.assertIn('weird_variable_name', context) self.assertEqual(context['weird_variable_name'], 'TestValue1')
[docs] def test_management_command(self): """Test if management command does the updating of the mail.""" with self.settings(EMAIL_BACKEND='mails.backends.filebased.ModelEmailBackend'): mail_util = DirectMailUtil('tests/test_mail_code_1', object=self.submission) mail_util.send_mail() mail_log = MailLog.objects.last() call_command('send_mails', id=mail_log.id) mail_log.refresh_from_db() self.assertNotEqual(mail_log.body, '') self.assertNotEqual(mail_log.body_html, '') self.assertEqual(mail_log.status, MAIL_SENT)