From 13ea4a913386d8374b6df82c49d4c3c895b926ba Mon Sep 17 00:00:00 2001 From: Gary Wilson Jr Date: Mon, 30 Mar 2009 22:52:48 +0000 Subject: [PATCH] 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 --- django/test/client.py | 6 ++++-- tests/modeltests/test_client/models.py | 1 - tests/regressiontests/test_client_regress/models.py | 8 ++++++++ 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/django/test/client.py b/django/test/client.py index b1421901e2..47232ef146 100644 --- a/django/test/client.py +++ b/django/test/client.py @@ -431,12 +431,14 @@ class Client(object): 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. """ 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() def _handle_redirects(self, response): diff --git a/tests/modeltests/test_client/models.py b/tests/modeltests/test_client/models.py index dfc84169f3..c8f1d42725 100644 --- a/tests/modeltests/test_client/models.py +++ b/tests/modeltests/test_client/models.py @@ -423,4 +423,3 @@ class ClientTest(TestCase): 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[1], 'third@example.com') - diff --git a/tests/regressiontests/test_client_regress/models.py b/tests/regressiontests/test_client_regress/models.py index 5d650923a4..71d6a149d0 100644 --- a/tests/regressiontests/test_client_regress/models.py +++ b/tests/regressiontests/test_client_regress/models.py @@ -505,6 +505,14 @@ class SessionTests(TestCase): self.assertEqual(response.status_code, 200) 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): def test_get(self): "Request a view via request method GET"