summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNatalia <124304+nessita@users.noreply.github.com>2025-06-04 16:12:13 -0300
committerNatalia <124304+nessita@users.noreply.github.com>2025-06-06 09:07:48 -0300
commit15e4df1d3379ac69f628d0d2660ce65e7c45dbc2 (patch)
tree9be7002542ea0f7f0986fe4050a869bdc62bb1f4
parent976e34a2a5be067cce0c41d94367000d47947147 (diff)
[5.1.x] Refactored logging_tests to reuse assertions for log records.
Backport of 9d72e7daf7299ef1ece56fd657a02f77a469efe9 from main.
-rw-r--r--tests/logging_tests/tests.py61
1 files changed, 24 insertions, 37 deletions
diff --git a/tests/logging_tests/tests.py b/tests/logging_tests/tests.py
index 7e2ae2c2ba..6ce5f2443b 100644
--- a/tests/logging_tests/tests.py
+++ b/tests/logging_tests/tests.py
@@ -98,23 +98,28 @@ class LoggingAssertionMixin:
def assertLogRecord(
self,
logger_cm,
- level,
msg,
+ levelno,
status_code,
+ request=None,
exc_class=None,
):
self.assertEqual(
records_len := len(logger_cm.records),
1,
- f"Wrong number of calls for {logger_cm=} in {level=} (expected 1, got "
+ f"Wrong number of calls for {logger_cm=} in {levelno=} (expected 1, got "
f"{records_len}).",
)
record = logger_cm.records[0]
self.assertEqual(record.getMessage(), msg)
+ self.assertEqual(record.levelno, levelno)
self.assertEqual(record.status_code, status_code)
+ if request is not None:
+ self.assertEqual(record.request, request)
if exc_class:
self.assertIsNotNone(record.exc_info)
self.assertEqual(record.exc_info[0], exc_class)
+ return record
def assertLogsRequest(
self, url, level, msg, status_code, logger="django.request", exc_class=None
@@ -124,7 +129,9 @@ class LoggingAssertionMixin:
self.client.get(url)
except views.UncaughtException:
pass
- self.assertLogRecord(cm, level, msg, status_code, exc_class)
+ self.assertLogRecord(
+ cm, msg, getattr(logging, level), status_code, exc_class=exc_class
+ )
@override_settings(DEBUG=True, ROOT_URLCONF="logging_tests.urls")
@@ -156,21 +163,17 @@ class HandlerLoggingTests(
)
async def test_async_page_not_found_warning(self):
- logger = "django.request"
- level = "WARNING"
- with self.assertLogs(logger, level) as cm:
+ with self.assertLogs("django.request", "WARNING") as cm:
await self.async_client.get("/does_not_exist/")
- self.assertLogRecord(cm, level, "Not Found: /does_not_exist/", 404)
+ self.assertLogRecord(cm, "Not Found: /does_not_exist/", logging.WARNING, 404)
async def test_async_control_chars_escaped(self):
- logger = "django.request"
- level = "WARNING"
- with self.assertLogs(logger, level) as cm:
+ with self.assertLogs("django.request", "WARNING") as cm:
await self.async_client.get(r"/%1B[1;31mNOW IN RED!!!1B[0m/")
self.assertLogRecord(
- cm, level, r"Not Found: /\x1b[1;31mNOW IN RED!!!1B[0m/", 404
+ cm, r"Not Found: /\x1b[1;31mNOW IN RED!!!1B[0m/", logging.WARNING, 404
)
def test_page_not_found_raised(self):
@@ -707,24 +710,10 @@ class LogFormattersTests(SimpleTestCase):
)
-class LogResponseRealLoggerTests(TestCase):
+class LogResponseRealLoggerTests(LoggingAssertionMixin, TestCase):
request = RequestFactory().get("/test-path/")
- def assertResponseLogged(self, logger_cm, msg, levelno, status_code, request):
- self.assertEqual(
- records_len := len(logger_cm.records),
- 1,
- f"Unexpected number of records for {logger_cm=} in {levelno=} (expected 1, "
- f"got {records_len}).",
- )
- record = logger_cm.records[0]
- self.assertEqual(record.getMessage(), msg)
- self.assertEqual(record.levelno, levelno)
- self.assertEqual(record.status_code, status_code)
- self.assertEqual(record.request, request)
- return record
-
def test_missing_response_raises_attribute_error(self):
with self.assertRaises(AttributeError):
log_response("No response provided", response=None, request=self.request)
@@ -733,7 +722,7 @@ class LogResponseRealLoggerTests(TestCase):
response = HttpResponse(status=403)
with self.assertLogs("django.request", level="INFO") as cm:
log_response(msg := "Missing request", response=response, request=None)
- self.assertResponseLogged(cm, msg, logging.WARNING, 403, request=None)
+ self.assertLogRecord(cm, msg, logging.WARNING, 403, request=None)
def test_logs_5xx_as_error(self):
response = HttpResponse(status=508)
@@ -741,7 +730,7 @@ class LogResponseRealLoggerTests(TestCase):
log_response(
msg := "Server error occurred", response=response, request=self.request
)
- self.assertResponseLogged(cm, msg, logging.ERROR, 508, self.request)
+ self.assertLogRecord(cm, msg, logging.ERROR, 508, self.request)
def test_logs_4xx_as_warning(self):
response = HttpResponse(status=418)
@@ -749,13 +738,13 @@ class LogResponseRealLoggerTests(TestCase):
log_response(
msg := "This is a teapot!", response=response, request=self.request
)
- self.assertResponseLogged(cm, msg, logging.WARNING, 418, self.request)
+ self.assertLogRecord(cm, msg, logging.WARNING, 418, self.request)
def test_logs_2xx_as_info(self):
response = HttpResponse(status=201)
with self.assertLogs("django.request", level="INFO") as cm:
log_response(msg := "OK response", response=response, request=self.request)
- self.assertResponseLogged(cm, msg, logging.INFO, 201, self.request)
+ self.assertLogRecord(cm, msg, logging.INFO, 201, self.request)
def test_custom_log_level(self):
response = HttpResponse(status=403)
@@ -766,14 +755,14 @@ class LogResponseRealLoggerTests(TestCase):
request=self.request,
level="debug",
)
- self.assertResponseLogged(cm, msg, logging.DEBUG, 403, self.request)
+ self.assertLogRecord(cm, msg, logging.DEBUG, 403, self.request)
def test_logs_only_once_per_response(self):
response = HttpResponse(status=500)
with self.assertLogs("django.request", level="ERROR") as cm:
log_response("First log", response=response, request=self.request)
log_response("Second log", response=response, request=self.request)
- self.assertResponseLogged(cm, "First log", logging.ERROR, 500, self.request)
+ self.assertLogRecord(cm, "First log", logging.ERROR, 500, self.request)
def test_exc_info_output(self):
response = HttpResponse(status=500)
@@ -787,9 +776,7 @@ class LogResponseRealLoggerTests(TestCase):
request=self.request,
exception=exc,
)
- self.assertResponseLogged(
- cm, "With exception", logging.ERROR, 500, self.request
- )
+ self.assertLogRecord(cm, "With exception", logging.ERROR, 500, self.request)
self.assertIn("ValueError", "\n".join(cm.output)) # Stack trace included
def test_format_args_are_applied(self):
@@ -803,7 +790,7 @@ class LogResponseRealLoggerTests(TestCase):
request=self.request,
)
msg = "Something went wrong: DB error (42)"
- self.assertResponseLogged(cm, msg, logging.ERROR, 500, self.request)
+ self.assertLogRecord(cm, msg, logging.ERROR, 500, self.request)
def test_logs_with_custom_logger(self):
handler = logging.StreamHandler(log_stream := StringIO())
@@ -877,7 +864,7 @@ class LogResponseRealLoggerTests(TestCase):
response = HttpResponse(status=318)
log_response(msg, case, response=response, level="error")
- record = self.assertResponseLogged(
+ record = self.assertLogRecord(
cm,
msg % expected,
levelno=logging.ERROR,