File urlpattern.patch of Package python-djangorestframework.19337
From 36d5c0e74f562cbe3055f0d20818bd48d3c32359 Mon Sep 17 00:00:00 2001
From: Stanislav Levin <slev@altlinux.org>
Date: Tue, 7 May 2024 10:05:03 +0300
Subject: [PATCH] tests: Check urlpatterns after cleanups (#9400)
According to docs:
https://docs.python.org/3/library/unittest.html#unittest.TestCase.addClassCleanup
> Add a function to be called after tearDownClass() to cleanup resources
used during the test class. Functions will be called in reverse order to
the order they are added (LIFO).
This was revealed with recent change in pytest (`8.2.0`):
> pytest-dev/pytest#11728: For unittest-based tests, exceptions during
class cleanup (as raised by functions registered with
TestCase.addClassCleanup) are now reported instead of silently failing.
`check_urlpatterns` is called before `cleanup_url_patterns` and fails
(problem was hidden by `pytest < 8.2.0`).
`doClassCleanups` can be used instead to check after-cleanup state:
https://docs.python.org/3/library/unittest.html#unittest.TestCase.doClassCleanups
> This method is called unconditionally after tearDownClass(), or after
setUpClass() if setUpClass() raises an exception.
It is responsible for calling all the cleanup functions added by
addClassCleanup(). If you need cleanup functions to be called prior to
tearDownClass() then you can call doClassCleanups() yourself.
Fixes: https://github.com/encode/django-rest-framework/issues/9399
Signed-off-by: Stanislav Levin <slev@altlinux.org>
---
tests/test_testing.py | 13 +++++--------
1 file changed, 5 insertions(+), 8 deletions(-)
Index: django-rest-framework-3.14.0/tests/test_testing.py
===================================================================
--- django-rest-framework-3.14.0.orig/tests/test_testing.py
+++ django-rest-framework-3.14.0/tests/test_testing.py
@@ -319,10 +319,6 @@ class TestAPIRequestFactory(TestCase):
assert request.META['CONTENT_TYPE'] == 'application/json'
-def check_urlpatterns(cls):
- assert urlpatterns is not cls.urlpatterns
-
-
class TestUrlPatternTestCase(URLPatternsTestCase):
urlpatterns = [
path('', view),
@@ -334,12 +330,6 @@ class TestUrlPatternTestCase(URLPatterns
super().setUpClass()
assert urlpatterns is cls.urlpatterns
- if django.VERSION > (4, 0):
- cls.addClassCleanup(
- check_urlpatterns,
- cls
- )
-
if django.VERSION < (4, 0):
@classmethod
def tearDownClass(cls):
@@ -347,6 +337,12 @@ class TestUrlPatternTestCase(URLPatterns
super().tearDownClass()
assert urlpatterns is not cls.urlpatterns
+ @classmethod
+ def doClassCleanups(cls):
+ assert urlpatterns is cls.urlpatterns
+ super().doClassCleanups()
+ assert urlpatterns is not cls.urlpatterns
+
def test_urlpatterns(self):
assert self.client.get('/').status_code == 200