summaryrefslogtreecommitdiff
path: root/tests/auth_tests/test_views.py
diff options
context:
space:
mode:
authorNick Pope <nick.pope@flightdataservices.com>2018-03-12 15:48:46 +0000
committerTim Graham <timograham@gmail.com>2018-04-19 10:21:24 -0400
commitdf90e462d91d3a77aa89b69d791bf17c2bf7ff9b (patch)
tree5e154830e7ecac46e1faa47ff0e7ab3ff96ff701 /tests/auth_tests/test_views.py
parentc2598a6f4d3ddaf27e9d6d240e7efe664504d6ad (diff)
downloaddjango-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.py28
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):