Fixed #9978 -- Fixed a KeyError exception that was being raised when using the logout method on the test client on an unauthenticated user, based on patch from ericholscher.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@10228 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Gary Wilson Jr 2009-03-30 22:52:48 +00:00
parent fea6c73538
commit 13ea4a9133
3 changed files with 12 additions and 3 deletions

View File

@ -431,12 +431,14 @@ class Client(object):
def logout(self): def logout(self):
""" """
Removes the authenticated user's cookies. Removes the authenticated user's cookies and session object.
Causes the authenticated user to be logged out. Causes the authenticated user to be logged out.
""" """
session = import_module(settings.SESSION_ENGINE).SessionStore() session = import_module(settings.SESSION_ENGINE).SessionStore()
session.delete(session_key=self.cookies[settings.SESSION_COOKIE_NAME].value) session_cookie = self.cookies.get(settings.SESSION_COOKIE_NAME)
if session_cookie:
session.delete(session_key=session_cookie.value)
self.cookies = SimpleCookie() self.cookies = SimpleCookie()
def _handle_redirects(self, response): def _handle_redirects(self, response):

View File

@ -423,4 +423,3 @@ class ClientTest(TestCase):
self.assertEqual(mail.outbox[1].from_email, 'from@example.com') self.assertEqual(mail.outbox[1].from_email, 'from@example.com')
self.assertEqual(mail.outbox[1].to[0], 'second@example.com') self.assertEqual(mail.outbox[1].to[0], 'second@example.com')
self.assertEqual(mail.outbox[1].to[1], 'third@example.com') self.assertEqual(mail.outbox[1].to[1], 'third@example.com')

View File

@ -505,6 +505,14 @@ class SessionTests(TestCase):
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertEqual(response.content, 'YES') self.assertEqual(response.content, 'YES')
def test_logout(self):
"""Logout should work whether the user is logged in or not (#9978)."""
self.client.logout()
login = self.client.login(username='testclient',password='password')
self.failUnless(login, 'Could not log in')
self.client.logout()
self.client.logout()
class RequestMethodTests(TestCase): class RequestMethodTests(TestCase):
def test_get(self): def test_get(self):
"Request a view via request method GET" "Request a view via request method GET"