File test-helper3.patch of Package python-Django.39541

From ba24ee34f98cb17d99b1f82bc1ede45ff311a70b Mon Sep 17 00:00:00 2001
From: Natalia <124304+nessita@users.noreply.github.com>
Date: Wed, 4 Jun 2025 16:12:13 -0300
Subject: [PATCH] [4.2.x] Refactored logging_tests to reuse assertions for log
 records.

Backport of 9d72e7daf7299ef1ece56fd657a02f77a469efe9 from main.
---
 tests/logging_tests/tests.py | 61 ++++++++++++++----------------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/tests/logging_tests/tests.py b/tests/logging_tests/tests.py
index cda0a62f2c1..03409094f23 100644
--- a/tests/logging_tests/tests.py
+++ b/tests/logging_tests/tests.py
@@ -97,23 +97,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
@@ -123,7 +128,9 @@ def assertLogsRequest(
                 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")
@@ -155,21 +162,17 @@ def test_control_chars_escaped(self):
         )
 
     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):
@@ -688,23 +691,9 @@ def patch_django_server_logger():
             )
 
 
-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)
@@ -713,7 +702,7 @@ def test_missing_request_logs_with_none(self):
         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)
@@ -721,7 +710,7 @@ def test_logs_5xx_as_error(self):
             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)
@@ -729,13 +718,13 @@ def test_logs_4xx_as_warning(self):
             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)
@@ -746,14 +735,14 @@ def test_custom_log_level(self):
                 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)
@@ -767,9 +756,7 @@ def test_exc_info_output(self):
                     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):
@@ -783,7 +770,7 @@ def test_format_args_are_applied(self):
                 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())
@@ -855,7 +842,7 @@ def test_unicode_escape_escaping(self):
                     response = HttpResponse(status=318)
                     log_response(msg, case, response=response, level="error")
 
-                    record = self.assertResponseLogged(
+                    record = self.assertLogRecord(
                         cm,
                         msg % expected,
                         levelno=logging.ERROR,
openSUSE Build Service is sponsored by