Skip to content

Commit 2d9eee5

Browse files
committed
Adjusted URLPatternsTestCase to use addClassCleanup() from Django 4.0.
Refs django/django@faba5b7. addClassCleanup() is available from Python 3.8, which is the minimum supported Python from Django 4.0.
1 parent f651878 commit 2d9eee5

File tree

2 files changed

+39
-13
lines changed

2 files changed

+39
-13
lines changed

rest_framework/test.py

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import io
44
from importlib import import_module
55

6+
import django
67
from django.conf import settings
78
from django.core.exceptions import ImproperlyConfigured
89
from django.core.handlers.wsgi import WSGIHandler
@@ -357,6 +358,13 @@ class APILiveServerTestCase(testcases.LiveServerTestCase):
357358
client_class = APIClient
358359

359360

361+
def cleanup_url_patterns(cls):
362+
if hasattr(cls, '_module_urlpatterns'):
363+
cls._module.urlpatterns = cls._module_urlpatterns
364+
else:
365+
del cls._module.urlpatterns
366+
367+
360368
class URLPatternsTestCase(testcases.SimpleTestCase):
361369
"""
362370
Isolate URL patterns on a per-TestCase basis. For example,
@@ -385,14 +393,20 @@ def setUpClass(cls):
385393
cls._module.urlpatterns = cls.urlpatterns
386394

387395
cls._override.enable()
396+
397+
if django.VERSION > (4, 0):
398+
cls.addClassCleanup(cls._override.disable)
399+
cls.addClassCleanup(cleanup_url_patterns, cls)
400+
388401
super().setUpClass()
389402

390-
@classmethod
391-
def tearDownClass(cls):
392-
super().tearDownClass()
393-
cls._override.disable()
403+
if django.VERSION < (4, 0):
404+
@classmethod
405+
def tearDownClass(cls):
406+
super().tearDownClass()
407+
cls._override.disable()
394408

395-
if hasattr(cls, '_module_urlpatterns'):
396-
cls._module.urlpatterns = cls._module_urlpatterns
397-
else:
398-
del cls._module.urlpatterns
409+
if hasattr(cls, '_module_urlpatterns'):
410+
cls._module.urlpatterns = cls._module_urlpatterns
411+
else:
412+
del cls._module.urlpatterns

tests/test_testing.py

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from io import BytesIO
22

3+
import django
34
from django.contrib.auth.models import User
45
from django.shortcuts import redirect
56
from django.test import TestCase, override_settings
@@ -282,6 +283,10 @@ def test_empty_request_content_type(self):
282283
assert request.META['CONTENT_TYPE'] == 'application/json'
283284

284285

286+
def check_urlpatterns(cls):
287+
assert urlpatterns is not cls.urlpatterns
288+
289+
285290
class TestUrlPatternTestCase(URLPatternsTestCase):
286291
urlpatterns = [
287292
path('', view),
@@ -293,11 +298,18 @@ def setUpClass(cls):
293298
super().setUpClass()
294299
assert urlpatterns is cls.urlpatterns
295300

296-
@classmethod
297-
def tearDownClass(cls):
298-
assert urlpatterns is cls.urlpatterns
299-
super().tearDownClass()
300-
assert urlpatterns is not cls.urlpatterns
301+
if django.VERSION > (4, 0):
302+
cls.addClassCleanup(
303+
check_urlpatterns,
304+
cls
305+
)
306+
307+
if django.VERSION < (4, 0):
308+
@classmethod
309+
def tearDownClass(cls):
310+
assert urlpatterns is cls.urlpatterns
311+
super().tearDownClass()
312+
assert urlpatterns is not cls.urlpatterns
301313

302314
def test_urlpatterns(self):
303315
assert self.client.get('/').status_code == 200

0 commit comments

Comments
 (0)