From dde6288fbe97c7053e67b613fec3366f3c298cf4 Mon Sep 17 00:00:00 2001 From: Andrew Nester Date: Wed, 20 Jul 2016 19:32:19 +0300 Subject: [PATCH] Fixed #26882 -- Added tests for auth.views.logout_then_login(). --- django/contrib/auth/views.py | 2 +- tests/auth_tests/test_views.py | 30 +++++++++++++++++++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/django/contrib/auth/views.py b/django/contrib/auth/views.py index 8b4c1d6fdb..12bb666dec 100644 --- a/django/contrib/auth/views.py +++ b/django/contrib/auth/views.py @@ -185,7 +185,7 @@ def logout_then_login(request, login_url=None, extra_context=None): if not login_url: login_url = settings.LOGIN_URL login_url = resolve_url(login_url) - return logout(request, login_url, extra_context=extra_context) + return LogoutView.as_view(next_page=login_url)(request) def redirect_to_login(next, login_url=None, diff --git a/tests/auth_tests/test_views.py b/tests/auth_tests/test_views.py index bd01c67d70..32c51e41a0 100644 --- a/tests/auth_tests/test_views.py +++ b/tests/auth_tests/test_views.py @@ -15,7 +15,9 @@ from django.contrib.auth.forms import ( AuthenticationForm, PasswordChangeForm, SetPasswordForm, ) from django.contrib.auth.models import User -from django.contrib.auth.views import LoginView, redirect_to_login +from django.contrib.auth.views import ( + LoginView, logout_then_login, redirect_to_login, +) from django.contrib.sessions.middleware import SessionMiddleware from django.contrib.sites.requests import RequestSite from django.core import mail @@ -707,6 +709,32 @@ class RedirectToLoginTests(AuthViewsTestCase): self.assertEqual(expected, login_redirect_response.url) +class LogoutThenLoginTests(AuthViewsTestCase): + """Tests for the logout_then_login view""" + + def confirm_logged_out(self): + self.assertNotIn(SESSION_KEY, self.client.session) + + @override_settings(LOGIN_URL='/login/') + def test_default_logout_then_login(self): + self.login() + req = HttpRequest() + req.method = 'GET' + req.session = self.client.session + response = logout_then_login(req) + self.confirm_logged_out() + self.assertRedirects(response, '/login/', fetch_redirect_response=False) + + def test_logout_then_login_with_custom_login(self): + self.login() + req = HttpRequest() + req.method = 'GET' + req.session = self.client.session + response = logout_then_login(req, login_url='/custom/') + self.confirm_logged_out() + self.assertRedirects(response, '/custom/', fetch_redirect_response=False) + + class LoginRedirectAuthenticatedUser(AuthViewsTestCase): dont_redirect_url = '/login/redirect_authenticated_user_default/' do_redirect_url = '/login/redirect_authenticated_user/'