Adjusted URLPatternsTestCase to use addClassCleanup() from Django 4.0.

Refs faba5b702a.

addClassCleanup() is available from Python 3.8, which is the minimum supported
Python from Django 4.0.
This commit is contained in:
Carlton Gibson 2021-09-22 10:00:49 +02:00
parent f651878df3
commit 2d9eee5d02
2 changed files with 39 additions and 13 deletions

View File

@ -3,6 +3,7 @@
import io import io
from importlib import import_module from importlib import import_module
import django
from django.conf import settings from django.conf import settings
from django.core.exceptions import ImproperlyConfigured from django.core.exceptions import ImproperlyConfigured
from django.core.handlers.wsgi import WSGIHandler from django.core.handlers.wsgi import WSGIHandler
@ -357,6 +358,13 @@ class APILiveServerTestCase(testcases.LiveServerTestCase):
client_class = APIClient client_class = APIClient
def cleanup_url_patterns(cls):
if hasattr(cls, '_module_urlpatterns'):
cls._module.urlpatterns = cls._module_urlpatterns
else:
del cls._module.urlpatterns
class URLPatternsTestCase(testcases.SimpleTestCase): class URLPatternsTestCase(testcases.SimpleTestCase):
""" """
Isolate URL patterns on a per-TestCase basis. For example, Isolate URL patterns on a per-TestCase basis. For example,
@ -385,8 +393,14 @@ class URLPatternsTestCase(testcases.SimpleTestCase):
cls._module.urlpatterns = cls.urlpatterns cls._module.urlpatterns = cls.urlpatterns
cls._override.enable() cls._override.enable()
if django.VERSION > (4, 0):
cls.addClassCleanup(cls._override.disable)
cls.addClassCleanup(cleanup_url_patterns, cls)
super().setUpClass() super().setUpClass()
if django.VERSION < (4, 0):
@classmethod @classmethod
def tearDownClass(cls): def tearDownClass(cls):
super().tearDownClass() super().tearDownClass()

View File

@ -1,5 +1,6 @@
from io import BytesIO from io import BytesIO
import django
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.shortcuts import redirect from django.shortcuts import redirect
from django.test import TestCase, override_settings from django.test import TestCase, override_settings
@ -282,6 +283,10 @@ class TestAPIRequestFactory(TestCase):
assert request.META['CONTENT_TYPE'] == 'application/json' assert request.META['CONTENT_TYPE'] == 'application/json'
def check_urlpatterns(cls):
assert urlpatterns is not cls.urlpatterns
class TestUrlPatternTestCase(URLPatternsTestCase): class TestUrlPatternTestCase(URLPatternsTestCase):
urlpatterns = [ urlpatterns = [
path('', view), path('', view),
@ -293,6 +298,13 @@ class TestUrlPatternTestCase(URLPatternsTestCase):
super().setUpClass() super().setUpClass()
assert urlpatterns is cls.urlpatterns assert urlpatterns is cls.urlpatterns
if django.VERSION > (4, 0):
cls.addClassCleanup(
check_urlpatterns,
cls
)
if django.VERSION < (4, 0):
@classmethod @classmethod
def tearDownClass(cls): def tearDownClass(cls):
assert urlpatterns is cls.urlpatterns assert urlpatterns is cls.urlpatterns