diff options
author | François Freitag <mail@franek.fr> | 2018-09-19 10:53:05 +0200 |
---|---|---|
committer | Tim Graham <timograham@gmail.com> | 2018-12-21 19:01:11 -0500 |
commit | e671337e8b35427b379303cbf6808855f04083e8 (patch) | |
tree | fb814965339eef4f86f47032ef83ea9d20235e61 /tests/generic_views | |
parent | 19e863a844db137045499276f0b0494b180f3f1a (diff) | |
download | django-e671337e8b35427b379303cbf6808855f04083e8.tar.gz |
Fixed #29750 -- Added View.setup() hook for class-based views.
Diffstat (limited to 'tests/generic_views')
-rw-r--r-- | tests/generic_views/test_base.py | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/tests/generic_views/test_base.py b/tests/generic_views/test_base.py index d3e4510e6b..da12b1bbe8 100644 --- a/tests/generic_views/test_base.py +++ b/tests/generic_views/test_base.py @@ -233,6 +233,32 @@ class ViewTest(SimpleTestCase): self.assertNotIn(attribute, dir(bare_view)) self.assertIn(attribute, dir(view)) + def test_overridden_setup(self): + class SetAttributeMixin: + def setup(self, request, *args, **kwargs): + self.attr = True + super().setup(request, *args, **kwargs) + + class CheckSetupView(SetAttributeMixin, SimpleView): + def dispatch(self, request, *args, **kwargs): + assert hasattr(self, 'attr') + return super().dispatch(request, *args, **kwargs) + + response = CheckSetupView.as_view()(self.rf.get('/')) + self.assertEqual(response.status_code, 200) + + def test_not_calling_parent_setup_error(self): + class TestView(View): + def setup(self, request, *args, **kwargs): + pass # Not calling supre().setup() + + msg = ( + "TestView instance has no 'request' attribute. Did you override " + "setup() and forget to call super()?" + ) + with self.assertRaisesMessage(AttributeError, msg): + TestView.as_view()(self.rf.get('/')) + def test_direct_instantiation(self): """ It should be possible to use the view by directly instantiating it |