Browse Source

Fixed #26882 -- Added tests for auth.views.logout_then_login().

Andrew Nester 8 years ago
parent
commit
dde6288fbe
2 changed files with 30 additions and 2 deletions
  1. 1 1
      django/contrib/auth/views.py
  2. 29 1
      tests/auth_tests/test_views.py

+ 1 - 1
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,

+ 29 - 1
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/'