From 303560bb63d921e04879f60d5e50e9e293f74161 Mon Sep 17 00:00:00 2001 From: Jens Kleineheismann Date: Thu, 28 Mar 2019 10:29:36 +0100 Subject: [PATCH] UPD: improved email tests. --- dav_auth/tests/test_emails.py | 7 ++++--- dav_base/tests/generic.py | 18 +++++------------ dav_base/tests/test_emails.py | 36 +++++++++++++++++++++------------ dav_events/tests/test_emails.py | 9 ++++----- 4 files changed, 36 insertions(+), 34 deletions(-) diff --git a/dav_auth/tests/test_emails.py b/dav_auth/tests/test_emails.py index 7619f41..b962ec1 100644 --- a/dav_auth/tests/test_emails.py +++ b/dav_auth/tests/test_emails.py @@ -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) diff --git a/dav_base/tests/generic.py b/dav_base/tests/generic.py index dbbb3b7..785e9d9 100644 --- a/dav_base/tests/generic.py +++ b/dav_base/tests/generic.py @@ -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 ' 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 diff --git a/dav_base/tests/test_emails.py b/dav_base/tests/test_emails.py index c5484cc..c71c3ff 100644 --- a/dav_base/tests/test_emails.py +++ b/dav_base/tests/test_emails.py @@ -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') diff --git a/dav_events/tests/test_emails.py b/dav_events/tests/test_emails.py index ff3fb3e..9f6c182 100644 --- a/dav_events/tests/test_emails.py +++ b/dav_events/tests/test_emails.py @@ -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