summaryrefslogtreecommitdiff
path: root/tests/check_framework
diff options
context:
space:
mode:
authorDaniyal <abbasi.daniyal98@gmail.com>2020-12-12 01:00:50 +0530
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2021-03-30 07:58:09 +0200
commit7c08f26bf0439c1ed593b51b51ad847f7e262bc1 (patch)
tree1b8279c7034f160610a2702f0bbac34cbba082be /tests/check_framework
parent0c0b87725bbcffca3bc3a7a2c649995695a5ae3b (diff)
Fixed #32260 -- Made View.as_view() do not use update_wrapper().
View.as_view() should not use update_wrapper() for copying attributes it's unintended and have side-effects such as adding `self` to the signature. This also fixes system check for arguments of custom error handler views with class-based views. Co-authored-by: Nick Pope <nick.pope@flightdataservices.com>
Diffstat (limited to 'tests/check_framework')
-rw-r--r--tests/check_framework/test_urls.py42
-rw-r--r--tests/check_framework/urls/bad_class_based_error_handlers.py16
-rw-r--r--tests/check_framework/urls/bad_function_based_error_handlers.py (renamed from tests/check_framework/urls/bad_error_handlers.py)0
-rw-r--r--tests/check_framework/urls/good_class_based_error_handlers.py9
-rw-r--r--tests/check_framework/urls/good_function_based_error_handlers.py (renamed from tests/check_framework/urls/good_error_handlers.py)0
5 files changed, 61 insertions, 6 deletions
diff --git a/tests/check_framework/test_urls.py b/tests/check_framework/test_urls.py
index f0c257bc77..2ef3d5b07f 100644
--- a/tests/check_framework/test_urls.py
+++ b/tests/check_framework/test_urls.py
@@ -167,20 +167,41 @@ class UpdatedToPathTests(SimpleTestCase):
class CheckCustomErrorHandlersTests(SimpleTestCase):
- @override_settings(ROOT_URLCONF='check_framework.urls.bad_error_handlers')
- def test_bad_handlers(self):
+ @override_settings(
+ ROOT_URLCONF='check_framework.urls.bad_function_based_error_handlers',
+ )
+ def test_bad_function_based_handlers(self):
result = check_url_config(None)
self.assertEqual(len(result), 4)
for code, num_params, error in zip([400, 403, 404, 500], [2, 2, 2, 1], result):
with self.subTest('handler{}'.format(code)):
self.assertEqual(error, Error(
- "The custom handler{} view "
- "'check_framework.urls.bad_error_handlers.bad_handler' "
+ "The custom handler{} view 'check_framework.urls."
+ "bad_function_based_error_handlers.bad_handler' "
"does not take the correct number of arguments (request{})."
.format(code, ', exception' if num_params == 2 else ''),
id='urls.E007',
))
+ @override_settings(
+ ROOT_URLCONF='check_framework.urls.bad_class_based_error_handlers',
+ )
+ def test_bad_class_based_handlers(self):
+ result = check_url_config(None)
+ self.assertEqual(len(result), 4)
+ for code, num_params, error in zip([400, 403, 404, 500], [2, 2, 2, 1], result):
+ with self.subTest('handler%s' % code):
+ self.assertEqual(error, Error(
+ "The custom handler%s view 'check_framework.urls."
+ "bad_class_based_error_handlers.HandlerView.as_view."
+ "<locals>.view' does not take the correct number of "
+ "arguments (request%s)." % (
+ code,
+ ', exception' if num_params == 2 else '',
+ ),
+ id='urls.E007',
+ ))
+
@override_settings(ROOT_URLCONF='check_framework.urls.bad_error_handlers_invalid_path')
def test_bad_handlers_invalid_path(self):
result = check_url_config(None)
@@ -204,8 +225,17 @@ class CheckCustomErrorHandlersTests(SimpleTestCase):
id='urls.E008',
))
- @override_settings(ROOT_URLCONF='check_framework.urls.good_error_handlers')
- def test_good_handlers(self):
+ @override_settings(
+ ROOT_URLCONF='check_framework.urls.good_function_based_error_handlers',
+ )
+ def test_good_function_based_handlers(self):
+ result = check_url_config(None)
+ self.assertEqual(result, [])
+
+ @override_settings(
+ ROOT_URLCONF='check_framework.urls.good_class_based_error_handlers',
+ )
+ def test_good_class_based_handlers(self):
result = check_url_config(None)
self.assertEqual(result, [])
diff --git a/tests/check_framework/urls/bad_class_based_error_handlers.py b/tests/check_framework/urls/bad_class_based_error_handlers.py
new file mode 100644
index 0000000000..346e7f59be
--- /dev/null
+++ b/tests/check_framework/urls/bad_class_based_error_handlers.py
@@ -0,0 +1,16 @@
+urlpatterns = []
+
+
+class HandlerView:
+ @classmethod
+ def as_view(cls):
+ def view():
+ pass
+
+ return view
+
+
+handler400 = HandlerView.as_view()
+handler403 = HandlerView.as_view()
+handler404 = HandlerView.as_view()
+handler500 = HandlerView.as_view()
diff --git a/tests/check_framework/urls/bad_error_handlers.py b/tests/check_framework/urls/bad_function_based_error_handlers.py
index d639d707df..d639d707df 100644
--- a/tests/check_framework/urls/bad_error_handlers.py
+++ b/tests/check_framework/urls/bad_function_based_error_handlers.py
diff --git a/tests/check_framework/urls/good_class_based_error_handlers.py b/tests/check_framework/urls/good_class_based_error_handlers.py
new file mode 100644
index 0000000000..56e6408a71
--- /dev/null
+++ b/tests/check_framework/urls/good_class_based_error_handlers.py
@@ -0,0 +1,9 @@
+from django.views.generic import View
+
+urlpatterns = []
+
+
+handler400 = View.as_view()
+handler403 = View.as_view()
+handler404 = View.as_view()
+handler500 = View.as_view()
diff --git a/tests/check_framework/urls/good_error_handlers.py b/tests/check_framework/urls/good_function_based_error_handlers.py
index 69bea650f7..69bea650f7 100644
--- a/tests/check_framework/urls/good_error_handlers.py
+++ b/tests/check_framework/urls/good_function_based_error_handlers.py