From b99d6c9cbc8eecf480892599201eef0d14b20d71 Mon Sep 17 00:00:00 2001 From: ThinkChaos Date: Wed, 7 Jun 2017 16:48:28 +0200 Subject: Fixed #28216 -- Added next_page/get_default_redirect_url() to LoginView. --- tests/auth_tests/test_views.py | 29 +++++++++++++++++++++++++++-- tests/auth_tests/urls.py | 9 +++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) (limited to 'tests/auth_tests') diff --git a/tests/auth_tests/test_views.py b/tests/auth_tests/test_views.py index e57d661772..0ec3a134c2 100644 --- a/tests/auth_tests/test_views.py +++ b/tests/auth_tests/test_views.py @@ -52,8 +52,8 @@ class AuthViewsTestCase(TestCase): cls.u1 = User.objects.create_user(username='testclient', password='password', email='testclient@example.com') cls.u3 = User.objects.create_user(username='staff', password='password', email='staffmember@example.com') - def login(self, username='testclient', password='password'): - response = self.client.post('/login/', { + def login(self, username='testclient', password='password', url='/login/'): + response = self.client.post(url, { 'username': username, 'password': password, }) @@ -726,6 +726,31 @@ class LoginTest(AuthViewsTestCase): self.login() self.assertNotEqual(original_session_key, self.client.session.session_key) + def test_login_get_default_redirect_url(self): + response = self.login(url='/login/get_default_redirect_url/') + self.assertRedirects(response, '/custom/', fetch_redirect_response=False) + + def test_login_next_page(self): + response = self.login(url='/login/next_page/') + self.assertRedirects(response, '/somewhere/', fetch_redirect_response=False) + + def test_login_named_next_page_named(self): + response = self.login(url='/login/next_page/named/') + self.assertRedirects(response, '/password_reset/', fetch_redirect_response=False) + + @override_settings(LOGIN_REDIRECT_URL='/custom/') + def test_login_next_page_overrides_login_redirect_url_setting(self): + response = self.login(url='/login/next_page/') + self.assertRedirects(response, '/somewhere/', fetch_redirect_response=False) + + def test_login_redirect_url_overrides_next_page(self): + response = self.login(url='/login/next_page/?next=/test/') + self.assertRedirects(response, '/test/', fetch_redirect_response=False) + + def test_login_redirect_url_overrides_get_default_redirect_url(self): + response = self.login(url='/login/get_default_redirect_url/?next=/test/') + self.assertRedirects(response, '/test/', fetch_redirect_response=False) + class LoginURLSettings(AuthViewsTestCase): """Tests for settings.LOGIN_URL.""" diff --git a/tests/auth_tests/urls.py b/tests/auth_tests/urls.py index e225ab9362..044f0da037 100644 --- a/tests/auth_tests/urls.py +++ b/tests/auth_tests/urls.py @@ -3,6 +3,7 @@ from django.contrib.auth import views from django.contrib.auth.decorators import login_required, permission_required from django.contrib.auth.forms import AuthenticationForm from django.contrib.auth.urls import urlpatterns as auth_urlpatterns +from django.contrib.auth.views import LoginView from django.contrib.messages.api import info from django.http import HttpRequest, HttpResponse from django.shortcuts import render @@ -78,6 +79,11 @@ def login_and_permission_required_exception(request): pass +class CustomDefaultRedirectURLLoginView(LoginView): + def get_default_redirect_url(self): + return '/custom/' + + # special urls for auth test cases urlpatterns = auth_urlpatterns + [ path('logout/custom_query/', views.LogoutView.as_view(redirect_field_name='follow')), @@ -149,6 +155,9 @@ urlpatterns = auth_urlpatterns + [ views.LoginView.as_view(redirect_authenticated_user=True)), path('login/allowed_hosts/', views.LoginView.as_view(success_url_allowed_hosts={'otherserver'})), + path('login/get_default_redirect_url/', CustomDefaultRedirectURLLoginView.as_view()), + path('login/next_page/', views.LoginView.as_view(next_page='/somewhere/')), + path('login/next_page/named/', views.LoginView.as_view(next_page='password_reset')), path('permission_required_redirect/', permission_required_redirect), path('permission_required_exception/', permission_required_exception), -- cgit v1.3