diff options
author | Nick Pope <nick.pope@flightdataservices.com> | 2018-03-12 15:48:46 +0000 |
---|---|---|
committer | Tim Graham <timograham@gmail.com> | 2018-04-19 10:21:24 -0400 |
commit | df90e462d91d3a77aa89b69d791bf17c2bf7ff9b (patch) | |
tree | 5e154830e7ecac46e1faa47ff0e7ab3ff96ff701 /tests/auth_tests/test_views.py | |
parent | c2598a6f4d3ddaf27e9d6d240e7efe664504d6ad (diff) | |
download | django-df90e462d91d3a77aa89b69d791bf17c2bf7ff9b.tar.gz |
Fixed #29212 -- Doc'd redirect loop if @permission_required used with redirect_authenticated_user.
Diffstat (limited to 'tests/auth_tests/test_views.py')
-rw-r--r-- | tests/auth_tests/test_views.py | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/tests/auth_tests/test_views.py b/tests/auth_tests/test_views.py index bb5bd7a087..723fd1142b 100644 --- a/tests/auth_tests/test_views.py +++ b/tests/auth_tests/test_views.py @@ -26,6 +26,7 @@ from django.db import connection from django.http import HttpRequest, QueryDict from django.middleware.csrf import CsrfViewMiddleware, get_token from django.test import Client, TestCase, override_settings +from django.test.client import RedirectCycleError from django.test.utils import patch_logger from django.urls import NoReverseMatch, reverse, reverse_lazy from django.utils.http import urlsafe_base64_encode @@ -883,6 +884,33 @@ class LoginRedirectAuthenticatedUser(AuthViewsTestCase): with self.assertRaisesMessage(ValueError, msg): self.client.get(url) + def test_permission_required_not_logged_in(self): + # Not logged in ... + with self.settings(LOGIN_URL=self.do_redirect_url): + # redirected to login. + response = self.client.get('/permission_required_redirect/', follow=True) + self.assertEqual(response.status_code, 200) + # exception raised. + response = self.client.get('/permission_required_exception/', follow=True) + self.assertEqual(response.status_code, 403) + # redirected to login. + response = self.client.get('/login_and_permission_required_exception/', follow=True) + self.assertEqual(response.status_code, 200) + + def test_permission_required_logged_in(self): + self.login() + # Already logged in... + with self.settings(LOGIN_URL=self.do_redirect_url): + # redirect loop encountered. + with self.assertRaisesMessage(RedirectCycleError, 'Redirect loop detected.'): + self.client.get('/permission_required_redirect/', follow=True) + # exception raised. + response = self.client.get('/permission_required_exception/', follow=True) + self.assertEqual(response.status_code, 403) + # exception raised. + response = self.client.get('/login_and_permission_required_exception/', follow=True) + self.assertEqual(response.status_code, 403) + class LoginSuccessURLAllowedHostsTest(AuthViewsTestCase): def test_success_url_allowed_hosts_same_host(self): |