|
@@ -9,48 +9,14 @@ from StringIO import StringIO
|
|
|
import tempfile
|
|
|
import threading
|
|
|
|
|
|
-from django.conf import settings
|
|
|
from django.core import mail
|
|
|
from django.core.mail import (EmailMessage, mail_admins, mail_managers,
|
|
|
EmailMultiAlternatives, send_mail, send_mass_mail)
|
|
|
from django.core.mail.backends import console, dummy, locmem, filebased, smtp
|
|
|
from django.core.mail.message import BadHeaderError
|
|
|
from django.test import TestCase
|
|
|
+from django.test.utils import override_settings
|
|
|
from django.utils.translation import ugettext_lazy
|
|
|
-from django.utils.functional import wraps
|
|
|
-
|
|
|
-
|
|
|
-def alter_django_settings(**kwargs):
|
|
|
- oldvalues = {}
|
|
|
- nonexistant = []
|
|
|
- for setting, newvalue in kwargs.iteritems():
|
|
|
- try:
|
|
|
- oldvalues[setting] = getattr(settings, setting)
|
|
|
- except AttributeError:
|
|
|
- nonexistant.append(setting)
|
|
|
- setattr(settings, setting, newvalue)
|
|
|
- return oldvalues, nonexistant
|
|
|
-
|
|
|
-
|
|
|
-def restore_django_settings(state):
|
|
|
- oldvalues, nonexistant = state
|
|
|
- for setting, oldvalue in oldvalues.iteritems():
|
|
|
- setattr(settings, setting, oldvalue)
|
|
|
- for setting in nonexistant:
|
|
|
- delattr(settings, setting)
|
|
|
-
|
|
|
-
|
|
|
-def with_django_settings(**kwargs):
|
|
|
- def decorator(test):
|
|
|
- @wraps(test)
|
|
|
- def decorated_test(self):
|
|
|
- state = alter_django_settings(**kwargs)
|
|
|
- try:
|
|
|
- return test(self)
|
|
|
- finally:
|
|
|
- restore_django_settings(state)
|
|
|
- return decorated_test
|
|
|
- return decorator
|
|
|
|
|
|
|
|
|
class MailTests(TestCase):
|
|
@@ -251,7 +217,7 @@ class MailTests(TestCase):
|
|
|
shutil.rmtree(tmp_dir)
|
|
|
self.assertTrue(isinstance(mail.get_connection(), locmem.EmailBackend))
|
|
|
|
|
|
- @with_django_settings(
|
|
|
+ @override_settings(
|
|
|
EMAIL_BACKEND='django.core.mail.backends.locmem.EmailBackend',
|
|
|
ADMINS=[('nobody', 'nobody@example.com')],
|
|
|
MANAGERS=[('nobody', 'nobody@example.com')])
|
|
@@ -323,10 +289,11 @@ class BaseEmailBackendTests(object):
|
|
|
email_backend = None
|
|
|
|
|
|
def setUp(self):
|
|
|
- self.__settings_state = alter_django_settings(EMAIL_BACKEND=self.email_backend)
|
|
|
+ self.settings_override = override_settings(EMAIL_BACKEND=self.email_backend)
|
|
|
+ self.settings_override.enable()
|
|
|
|
|
|
def tearDown(self):
|
|
|
- restore_django_settings(self.__settings_state)
|
|
|
+ self.settings_override.disable()
|
|
|
|
|
|
def assertStartsWith(self, first, second):
|
|
|
if not first.startswith(second):
|
|
@@ -375,7 +342,7 @@ class BaseEmailBackendTests(object):
|
|
|
self.assertEqual(message.get_payload(), "Content")
|
|
|
self.assertEqual(message["from"], "=?utf-8?q?Firstname_S=C3=BCrname?= <from@example.com>")
|
|
|
|
|
|
- @with_django_settings(MANAGERS=[('nobody', 'nobody@example.com')])
|
|
|
+ @override_settings(MANAGERS=[('nobody', 'nobody@example.com')])
|
|
|
def test_html_mail_managers(self):
|
|
|
"""Test html_message argument to mail_managers"""
|
|
|
mail_managers('Subject', 'Content', html_message='HTML Content')
|
|
@@ -390,7 +357,7 @@ class BaseEmailBackendTests(object):
|
|
|
self.assertEqual(message.get_payload(1).get_payload(), 'HTML Content')
|
|
|
self.assertEqual(message.get_payload(1).get_content_type(), 'text/html')
|
|
|
|
|
|
- @with_django_settings(ADMINS=[('nobody', 'nobody@example.com')])
|
|
|
+ @override_settings(ADMINS=[('nobody', 'nobody@example.com')])
|
|
|
def test_html_mail_admins(self):
|
|
|
"""Test html_message argument to mail_admins """
|
|
|
mail_admins('Subject', 'Content', html_message='HTML Content')
|
|
@@ -405,8 +372,9 @@ class BaseEmailBackendTests(object):
|
|
|
self.assertEqual(message.get_payload(1).get_payload(), 'HTML Content')
|
|
|
self.assertEqual(message.get_payload(1).get_content_type(), 'text/html')
|
|
|
|
|
|
- @with_django_settings(ADMINS=[('nobody', 'nobody+admin@example.com')],
|
|
|
- MANAGERS=[('nobody', 'nobody+manager@example.com')])
|
|
|
+ @override_settings(
|
|
|
+ ADMINS=[('nobody', 'nobody+admin@example.com')],
|
|
|
+ MANAGERS=[('nobody', 'nobody+manager@example.com')])
|
|
|
def test_manager_and_admin_mail_prefix(self):
|
|
|
"""
|
|
|
String prefix + lazy translated subject = bad output
|
|
@@ -421,7 +389,7 @@ class BaseEmailBackendTests(object):
|
|
|
message = self.get_the_message()
|
|
|
self.assertEqual(message.get('subject'), '[Django] Subject')
|
|
|
|
|
|
- @with_django_settings(ADMINS=(), MANAGERS=())
|
|
|
+ @override_settings(ADMINS=(), MANAGERS=())
|
|
|
def test_empty_admins(self):
|
|
|
"""
|
|
|
Test that mail_admins/mail_managers doesn't connect to the mail server
|
|
@@ -501,13 +469,14 @@ class FileBackendTests(BaseEmailBackendTests, TestCase):
|
|
|
email_backend = 'django.core.mail.backends.filebased.EmailBackend'
|
|
|
|
|
|
def setUp(self):
|
|
|
- super(FileBackendTests, self).setUp()
|
|
|
self.tmp_dir = tempfile.mkdtemp()
|
|
|
- self.__settings_state = alter_django_settings(EMAIL_FILE_PATH=self.tmp_dir)
|
|
|
+ self.addCleanup(shutil.rmtree, self.tmp_dir)
|
|
|
+ self.settings_override = override_settings(EMAIL_FILE_PATH=self.tmp_dir)
|
|
|
+ self.settings_override.enable()
|
|
|
+ super(FileBackendTests, self).setUp()
|
|
|
|
|
|
def tearDown(self):
|
|
|
- restore_django_settings(self.__settings_state)
|
|
|
- shutil.rmtree(self.tmp_dir)
|
|
|
+ self.settings_override.disable()
|
|
|
super(FileBackendTests, self).tearDown()
|
|
|
|
|
|
def flush_mailbox(self):
|
|
@@ -642,13 +611,15 @@ class SMTPBackendTests(BaseEmailBackendTests, TestCase):
|
|
|
@classmethod
|
|
|
def setUpClass(cls):
|
|
|
cls.server = FakeSMTPServer(('127.0.0.1', 0), None)
|
|
|
- cls.settings = alter_django_settings(
|
|
|
+ cls.settings_override = override_settings(
|
|
|
EMAIL_HOST="127.0.0.1",
|
|
|
EMAIL_PORT=cls.server.socket.getsockname()[1])
|
|
|
+ cls.settings_override.enable()
|
|
|
cls.server.start()
|
|
|
|
|
|
@classmethod
|
|
|
def tearDownClass(cls):
|
|
|
+ cls.settings_override.disable()
|
|
|
cls.server.stop()
|
|
|
|
|
|
def setUp(self):
|