from django.template.exceptions import TemplateDoesNotExist
from django.test import TestCase
from mails.core import MailEngine
from mails.exceptions import ConfigurationError
[docs]class MailLogModelTests(TestCase):
"""
Test the MailEngine object.
"""
[docs] def test_valid_instantiation(self):
"""Test if init method of the engine works properly."""
# Test no mail_code given fails.
with self.assertRaises(TypeError):
MailEngine()
# Test only mail_code given works.
try:
MailEngine('tests/test_mail_code_1')
except:
# For whatever reason possible...
self.fail('MailEngine() raised unexpectedly!')
# Test all extra arguments are accepted.
try:
MailEngine(
'tests/test_mail_code_1',
subject='Test subject A',
recipient_list=['test_A@example.org', 'test_B@example.org'],
bcc=['test_C@example.com', 'test_D@example.com'],
from_email='test@example.org',
from_name='John Doe')
except KeyError:
self.fail('MailEngine() does not accept all keyword arguments!')
# Test if only proper arguments are accepted.
with self.assertRaises(ConfigurationError):
engine = MailEngine('tests/test_mail_code_1', recipient_list='test_A@example.org')
engine.validate()
with self.assertRaises(ConfigurationError):
engine = MailEngine('tests/test_mail_code_1', bcc='test_A@example.org')
engine.validate()
with self.assertRaises(ConfigurationError):
engine = MailEngine('tests/test_mail_code_1', from_email=['test_A@example.org'])
engine.validate()
# See if any other keyword argument is accepted and saved as template variable.
try:
engine = MailEngine(
'tests/test_mail_code_1',
fake='Test subject A',
extra=['test_A@example.org'])
except KeyError:
self.fail('MailEngine() does not accept extra keyword arguments!')
self.assertIs(engine.template_variables['fake'], 'Test subject A')
self.assertListEqual(engine.template_variables['extra'], ['test_A@example.org'])
[docs] def test_invalid_mail_code(self):
"""Test if invalid configuration files are handled properly."""
with self.assertRaises(ImportError):
engine = MailEngine('tests/fake_mail_code_1')
engine.validate()
with self.assertRaises(ConfigurationError):
engine = MailEngine('tests/test_mail_code_fault_1')
engine.validate()
with self.assertRaises(TemplateDoesNotExist):
engine = MailEngine('tests/test_mail_code_no_template_1')
engine.validate()
[docs] def test_positive_validation_delayed_rendering(self):
"""Test if validation works and rendering is delayed."""
engine = MailEngine('tests/test_mail_code_1')
engine.validate() # Should validate without rendering
self.assertIn('subject', engine.mail_data)
self.assertIn('recipient_list', engine.mail_data)
self.assertIn('from_email', engine.mail_data)
self.assertNotIn('message', engine.mail_data)
self.assertNotIn('html_message', engine.mail_data)
self.assertEqual(engine.mail_data['subject'], 'SciPost Test')
self.assertIn('test@scipost.org', engine.mail_data['recipient_list'])
self.assertEqual(engine.mail_data['from_email'], 'admin@scipost.org')
[docs] def test_positive_direct_validation(self):
"""Test if validation and rendering works as required."""
engine = MailEngine('tests/test_mail_code_1')
engine.validate(render_template=True) # Should validate and render
self.assertIn('message', engine.mail_data)
self.assertIn('html_message', engine.mail_data)
self.assertNotEqual(engine.mail_data['message'], '')
self.assertNotEqual(engine.mail_data['html_message'], '')
[docs] def test_additional_parameters(self):
"""Test if validation and rendering works as required if given extra parameters."""
engine = MailEngine(
'tests/test_mail_code_1',
subject='Test Subject 2',
recipient_list=['test1@scipost.org'],
bcc=['test2@scipost.org'],
from_email='test3@scipost.org',
from_name='Test Name',
weird_variable_name='John Doe')
engine.validate()
self.assertEqual(engine.mail_data['subject'], 'Test Subject 2')
self.assertIn('test1@scipost.org', engine.mail_data['recipient_list'])
self.assertIn('test2@scipost.org', engine.mail_data['bcc'])
self.assertEqual(engine.mail_data['from_email'], 'test3@scipost.org')
self.assertEqual(engine.mail_data['from_name'], 'Test Name')
self.assertNotIn('weird_variable_name', engine.mail_data)
self.assertIn('weird_variable_name', engine.template_variables)
self.assertEqual(engine.template_variables['weird_variable_name'], 'John Doe')