summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/auth_tests/test_forms.py3
-rw-r--r--tests/logging_tests/logconfig.py6
-rw-r--r--tests/logging_tests/tests.py102
-rw-r--r--tests/middleware/tests.py9
4 files changed, 44 insertions, 76 deletions
diff --git a/tests/auth_tests/test_forms.py b/tests/auth_tests/test_forms.py
index 983fe8c39e..167722c617 100644
--- a/tests/auth_tests/test_forms.py
+++ b/tests/auth_tests/test_forms.py
@@ -4,6 +4,8 @@ import sys
import urllib.parse
from unittest import mock
+from mail.custombackend import FailingEmailBackend
+
from django import forms
from django.contrib.auth.forms import (
AdminPasswordChangeForm,
@@ -1382,6 +1384,7 @@ class PasswordResetFormTest(TestDataMixin, TestCase):
@override_settings(EMAIL_BACKEND="mail.custombackend.FailingEmailBackend")
def test_save_send_email_exceptions_are_catched_and_logged(self):
+ self.addCleanup(FailingEmailBackend.reset)
user, username, email = self.create_dummy_user()
form = PasswordResetForm({"email": email})
self.assertTrue(form.is_valid())
diff --git a/tests/logging_tests/logconfig.py b/tests/logging_tests/logconfig.py
index 35999989fb..4d9a73f1b4 100644
--- a/tests/logging_tests/logconfig.py
+++ b/tests/logging_tests/logconfig.py
@@ -1,7 +1,6 @@
import logging
from django.conf import settings
-from django.core.mail.backends.base import BaseEmailBackend
from django.views.debug import ExceptionReporter
@@ -11,11 +10,6 @@ class MyHandler(logging.Handler):
self.config = settings.LOGGING
-class MyEmailBackend(BaseEmailBackend):
- def send_messages(self, email_messages):
- pass
-
-
class CustomExceptionReporter(ExceptionReporter):
def get_traceback_text(self):
return "custom traceback text"
diff --git a/tests/logging_tests/tests.py b/tests/logging_tests/tests.py
index 9690147e81..d4cdbe7dd9 100644
--- a/tests/logging_tests/tests.py
+++ b/tests/logging_tests/tests.py
@@ -4,6 +4,7 @@ from io import StringIO
from unittest import TestCase, mock
from admin_scripts.tests import AdminScriptTestCase
+from mail.custombackend import FailingEmailBackend, OptionsCapturingBackend
from django.conf import settings
from django.core import mail
@@ -26,7 +27,6 @@ from django.utils.log import (
from django.views.debug import ExceptionReporter
from . import views
-from .logconfig import MyEmailBackend
class LoggingFiltersTest(SimpleTestCase):
@@ -286,9 +286,22 @@ class AdminEmailHandlerTest(SimpleTestCase):
h for h in logger.handlers if h.__class__.__name__ == "AdminEmailHandler"
][0]
- def test_fail_silently(self):
- admin_email_handler = self.get_admin_email_handler(self.logger)
- self.assertTrue(admin_email_handler.connection().fail_silently)
+ def make_log_record(self, url_path=None, *args, **kwargs):
+ record = self.logger.makeRecord(
+ "name", logging.ERROR, "function", "lno", "message", None, None
+ )
+ if url_path is not None:
+ record.request = self.request_factory.get(url_path, *args, **kwargs)
+ return record
+
+ @override_settings(
+ ADMINS=["admin@example.com"],
+ EMAIL_BACKEND="mail.custombackend.FailingEmailBackend",
+ )
+ def test_sends_using_fail_silently(self):
+ self.addCleanup(FailingEmailBackend.reset)
+ self.logger.error("All work and no play makes Jack a dull boy")
+ self.assertIs(FailingEmailBackend.init_kwargs[0]["fail_silently"], True)
@override_settings(
ADMINS=["admin@example.com"],
@@ -383,36 +396,16 @@ class AdminEmailHandlerTest(SimpleTestCase):
self.assertNotIn("\r", mail.outbox[0].subject)
self.assertEqual(mail.outbox[0].subject, expected_subject)
- @override_settings(
- ADMINS=["admin@example.com"],
- DEBUG=False,
- )
+ @override_settings(ADMINS=["admin@example.com"])
def test_uses_custom_email_backend(self):
- """
- Refs #19325
- """
- message = "All work and no play makes Jack a dull boy"
- admin_email_handler = self.get_admin_email_handler(self.logger)
- mail_admins_called = {"called": False}
-
- def my_mail_admins(*args, **kwargs):
- connection = kwargs["connection"]
- self.assertIsInstance(connection, MyEmailBackend)
- mail_admins_called["called"] = True
-
- # Monkeypatches
- orig_mail_admins = mail.mail_admins
- orig_email_backend = admin_email_handler.email_backend
- mail.mail_admins = my_mail_admins
- admin_email_handler.email_backend = "logging_tests.logconfig.MyEmailBackend"
-
- try:
- self.logger.error(message)
- self.assertTrue(mail_admins_called["called"])
- finally:
- # Revert Monkeypatches
- mail.mail_admins = orig_mail_admins
- admin_email_handler.email_backend = orig_email_backend
+ self.addCleanup(OptionsCapturingBackend.reset)
+ handler = AdminEmailHandler(
+ email_backend="mail.custombackend.OptionsCapturingBackend"
+ )
+ handler.emit(self.make_log_record("/"))
+ self.assertEqual(len(mail.outbox), 0)
+ self.assertIs(OptionsCapturingBackend.init_kwargs[0]["fail_silently"], True)
+ self.assertEqual(len(OptionsCapturingBackend.sent_messages), 1)
@override_settings(
ADMINS=["admin@example.com"],
@@ -423,12 +416,8 @@ class AdminEmailHandlerTest(SimpleTestCase):
request.
"""
handler = self.get_admin_email_handler(self.logger)
- record = self.logger.makeRecord(
- "name", logging.ERROR, "function", "lno", "message", None, None
- )
url_path = "/ยบ"
- record.request = self.request_factory.get(url_path)
- handler.emit(record)
+ handler.emit(self.make_log_record(url_path))
self.assertEqual(len(mail.outbox), 1)
msg = mail.outbox[0]
self.assertEqual(msg.to, ["admin@example.com"])
@@ -442,16 +431,10 @@ class AdminEmailHandlerTest(SimpleTestCase):
def test_customize_send_mail_method(self):
class ManagerEmailHandler(AdminEmailHandler):
def send_mail(self, subject, message, *args, **kwargs):
- mail.mail_managers(
- subject, message, *args, connection=self.connection(), **kwargs
- )
+ mail.mail_managers(subject, message, *args, **kwargs)
handler = ManagerEmailHandler()
- record = self.logger.makeRecord(
- "name", logging.ERROR, "function", "lno", "message", None, None
- )
- self.assertEqual(len(mail.outbox), 0)
- handler.emit(record)
+ handler.emit(self.make_log_record())
self.assertEqual(len(mail.outbox), 1)
self.assertEqual(mail.outbox[0].to, ["manager@example.com"])
@@ -480,14 +463,10 @@ class AdminEmailHandlerTest(SimpleTestCase):
@override_settings(ADMINS=["admin@example.com"])
def test_custom_exception_reporter_is_used(self):
- record = self.logger.makeRecord(
- "name", logging.ERROR, "function", "lno", "message", None, None
- )
- record.request = self.request_factory.get("/")
handler = AdminEmailHandler(
reporter_class="logging_tests.logconfig.CustomExceptionReporter"
)
- handler.emit(record)
+ handler.emit(self.make_log_record("/"))
self.assertEqual(len(mail.outbox), 1)
msg = mail.outbox[0]
self.assertEqual(msg.body, "message\n\ncustom traceback text")
@@ -496,16 +475,7 @@ class AdminEmailHandlerTest(SimpleTestCase):
def test_emit_no_form_tag(self):
"""HTML email doesn't contain forms."""
handler = AdminEmailHandler(include_html=True)
- record = self.logger.makeRecord(
- "name",
- logging.ERROR,
- "function",
- "lno",
- "message",
- None,
- None,
- )
- handler.emit(record)
+ handler.emit(self.make_log_record())
self.assertEqual(len(mail.outbox), 1)
msg = mail.outbox[0]
self.assertEqual(msg.subject, "[Django] ERROR: message")
@@ -517,15 +487,7 @@ class AdminEmailHandlerTest(SimpleTestCase):
@override_settings(ADMINS=[])
def test_emit_no_admins(self):
handler = AdminEmailHandler()
- record = self.logger.makeRecord(
- "name",
- logging.ERROR,
- "function",
- "lno",
- "message",
- None,
- None,
- )
+ record = self.make_log_record()
with mock.patch.object(
handler,
"format_subject",
diff --git a/tests/middleware/tests.py b/tests/middleware/tests.py
index a61c4b147f..a79fcf4577 100644
--- a/tests/middleware/tests.py
+++ b/tests/middleware/tests.py
@@ -7,6 +7,8 @@ from io import BytesIO
from unittest import mock
from urllib.parse import quote
+from mail.custombackend import FailingEmailBackend
+
from django.conf import settings
from django.core import mail
from django.core.exceptions import PermissionDenied
@@ -499,6 +501,13 @@ class BrokenLinkEmailsMiddlewareTest(SimpleTestCase):
BrokenLinkEmailsMiddleware(self.get_response)(self.req)
self.assertEqual(len(mail.outbox), 1)
+ @override_settings(EMAIL_BACKEND="mail.custombackend.FailingEmailBackend")
+ def test_sends_using_fail_silently(self):
+ self.addCleanup(FailingEmailBackend.reset)
+ self.req.META["HTTP_REFERER"] = "/another/url/"
+ BrokenLinkEmailsMiddleware(self.get_response)(self.req)
+ self.assertIs(FailingEmailBackend.init_kwargs[0]["fail_silently"], True)
+
@override_settings(ROOT_URLCONF="middleware.cond_get_urls")
class ConditionalGetMiddlewareTest(SimpleTestCase):