diff options
| author | Daniyal <abbasi.daniyal98@gmail.com> | 2020-12-12 01:00:50 +0530 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2021-03-30 07:58:09 +0200 |
| commit | 7c08f26bf0439c1ed593b51b51ad847f7e262bc1 (patch) | |
| tree | 1b8279c7034f160610a2702f0bbac34cbba082be /tests/check_framework | |
| parent | 0c0b87725bbcffca3bc3a7a2c649995695a5ae3b (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.py | 42 | ||||
| -rw-r--r-- | tests/check_framework/urls/bad_class_based_error_handlers.py | 16 | ||||
| -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.py | 9 | ||||
| -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 |
