UPD: improved email tests.

This commit is contained in:
2019-03-28 10:29:36 +01:00
parent 5cd22bd122
commit 303560bb63
4 changed files with 36 additions and 34 deletions

View File

@@ -1,8 +1,9 @@
# -*- coding: utf-8 -*-
from django.contrib.auth import get_user_model
from django.core import mail as django_mail
from django.test import TestCase
from dav_base.tests.generic import EmailTestCase
from dav_base.tests.generic import EmailTestMixin
from ..emails import PasswordSetEmail
@@ -20,9 +21,9 @@ URL: {base_url}/
"""
class TestCase(EmailTestCase):
class EmailTestCase(EmailTestMixin, TestCase):
def setUp(self):
super(TestCase, self).setUp()
super(EmailTestCase, self).setUp()
model = get_user_model()
self.user = model.objects.create_user(username=TEST_USERNAME, password=TEST_PASSWORD, email=TEST_EMAIL)

View File

@@ -1,9 +1,8 @@
import datetime
import os
import sys
import urllib
from unittest import skip, SkipTest
from django.apps import apps
from django.contrib.auth.models import AbstractUser
from django.contrib.staticfiles.testing import StaticLiveServerTestCase
from django.test import SimpleTestCase, TestCase, tag
from django.urls import reverse
@@ -12,13 +11,6 @@ from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def skip_unless_tag_option():
if '--tag' in sys.argv:
return lambda func: func
else:
return skip('Skipped unless --tag option is used')
class AppSetting(object):
def __init__(self, name, of=None):
self.name = name
@@ -47,7 +39,7 @@ class AppsTestCase(SimpleTestCase):
self.assertIsInstance(value, of)
class EmailTestCase(TestCase):
class EmailTestMixin(object):
email_sender = 'Automatic Software Test <root@localhost>'
email_base_url = 'http://localhost'
email_subject_prefix = '[Test]'
@@ -57,8 +49,9 @@ class EmailTestCase(TestCase):
def assertRecipients(self, mail, recipients):
self.assertEqual(len(mail.recipients()), len(recipients))
for recipient in recipients:
expected_recipient = u'"%s" <%s>' % (recipient.get_full_name(), recipient.email)
for expected_recipient in recipients:
if isinstance(expected_recipient, AbstractUser):
expected_recipient = u'"%s" <%s>' % (expected_recipient.get_full_name(), expected_recipient.email)
recipients = mail.recipients()
self.assertIn(expected_recipient, recipients)
@@ -83,7 +76,6 @@ class EmailTestCase(TestCase):
self.assertEqual(mail.body, body)
def setUp(self):
super(EmailTestCase, self).setUp()
app_config = apps.get_app_config('dav_base')
app_config.settings.email_sender = self.email_sender
app_config.settings.email_base_url = self.email_base_url

View File

@@ -1,20 +1,30 @@
from django.core.exceptions import ImproperlyConfigured
from django.core import mail as django_mail
from django.test import SimpleTestCase
from ..emails import AbstractMail
from .generic import EmailTestMixin
class EmailsTestCase(SimpleTestCase):
def setUp(self):
self.email = AbstractMail()
class ConcreteMail(AbstractMail):
_subject = u'No subject'
_template_name = 'dav_base/base.html'
def __init__(self, recipient, *args, **kwargs):
self._recipient = recipient
def _get_recipients(self):
return [self._recipient]
class TestCase(EmailTestMixin, SimpleTestCase):
def test_send(self):
try:
self.email.send()
self.fail('AbstractEmail.send() does not raise an Exception')
except NotImplementedError:
pass
except ImproperlyConfigured:
pass
except Exception:
self.fail('AbstractEmail.send() raised unexpected Exception')
recipient = 'root@localhost'
email = ConcreteMail(recipient)
email.send()
self.assertEqual(len(django_mail.outbox), 1)
mail = django_mail.outbox[0]
self.assertSender(mail)
self.assertRecipients(mail, [recipient])
self.assertSubject(mail, u'No subject')

View File

@@ -3,13 +3,12 @@ import datetime
from django.apps import apps
from django.contrib.auth import get_user_model
from django.core import mail as django_mail
from django.utils import timezone
from django.test import TestCase
from dav_base.tests.generic import EmailTestCase
from dav_base.tests.generic import EmailTestMixin
from ..models.event import Event
from ..models.oneclickaction import OneClickAction
from .. import emails
from .generic import RoleMixin
@@ -155,9 +154,9 @@ Ausschreibung:
{event_text}"""
class TestCase(RoleMixin, EmailTestCase):
class EmailTestCase(EmailTestMixin, RoleMixin, TestCase):
def setUp(self):
super(TestCase, self).setUp()
super(EmailTestCase, self).setUp()
app_config = apps.get_containing_app_config(__package__)
app_config.settings.enable_email_on_update = False