Fixed #5189 -- Added logout method to test Client. Thanks, Jakub Wisniowski <restless.being@gmail.com>.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@5916 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
55c0b35acf
commit
8dff1cd91d
1
AUTHORS
1
AUTHORS
|
@ -284,6 +284,7 @@ answer newbie questions, and generally made Django that much better:
|
||||||
charly.wilhelm@gmail.com
|
charly.wilhelm@gmail.com
|
||||||
Rachel Willmer <http://www.willmer.com/kb/>
|
Rachel Willmer <http://www.willmer.com/kb/>
|
||||||
Gary Wilson <gary.wilson@gmail.com>
|
Gary Wilson <gary.wilson@gmail.com>
|
||||||
|
Jakub Wiśniowski <restless.being@gmail.com>
|
||||||
wojtek
|
wojtek
|
||||||
ye7cakf02@sneakemail.com
|
ye7cakf02@sneakemail.com
|
||||||
ymasuda@ethercube.com
|
ymasuda@ethercube.com
|
||||||
|
|
|
@ -253,3 +253,14 @@ class Client:
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def logout(self):
|
||||||
|
"""Removes the authenticated user's cookies.
|
||||||
|
|
||||||
|
Causes the authenticated user to be logged out.
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
Session.objects.get(session_key=self.cookies['sessionid'].value).delete()
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
self.cookies = SimpleCookie()
|
||||||
|
|
|
@ -550,6 +550,17 @@ Once you have a ``Client`` instance, you can call any of the following methods:
|
||||||
conditions. You'll need to create users as part of the test suite -- either
|
conditions. You'll need to create users as part of the test suite -- either
|
||||||
manually (using the Django model API) or with a test fixture.
|
manually (using the Django model API) or with a test fixture.
|
||||||
|
|
||||||
|
``logout()``
|
||||||
|
**New in Django development version**
|
||||||
|
|
||||||
|
If your site uses Django's `authentication system`_, the ``logout()``
|
||||||
|
method can be used to simulate the effect of a user logging out of
|
||||||
|
your site.
|
||||||
|
|
||||||
|
After you call this method, the test client will have all the cookies and
|
||||||
|
session data cleared to defaults. Subsequent requests will appear to
|
||||||
|
come from an AnonymousUser.
|
||||||
|
|
||||||
.. _authentication system: ../authentication/
|
.. _authentication system: ../authentication/
|
||||||
.. _authentication backend: ../authentication/#other-authentication-sources
|
.. _authentication backend: ../authentication/#other-authentication-sources
|
||||||
|
|
||||||
|
@ -758,7 +769,7 @@ Here's specifically what will happen:
|
||||||
* At the start of each test case, before ``setUp()`` is run, Django will
|
* At the start of each test case, before ``setUp()`` is run, Django will
|
||||||
flush the database, returning the database to the state it was in
|
flush the database, returning the database to the state it was in
|
||||||
directly after ``syncdb`` was called.
|
directly after ``syncdb`` was called.
|
||||||
|
|
||||||
* Then, all the named fixtures are installed. In this example, Django will
|
* Then, all the named fixtures are installed. In this example, Django will
|
||||||
install any JSON fixture named ``mammals``, followed by any fixture named
|
install any JSON fixture named ``mammals``, followed by any fixture named
|
||||||
``birds``. See the `loaddata documentation`_ for more details on defining
|
``birds``. See the `loaddata documentation`_ for more details on defining
|
||||||
|
@ -843,7 +854,7 @@ The test runner accomplishes this by transparently replacing the normal
|
||||||
effect on any other e-mail senders outside of Django, such as your machine's
|
effect on any other e-mail senders outside of Django, such as your machine's
|
||||||
mail server, if you're running one.)
|
mail server, if you're running one.)
|
||||||
|
|
||||||
During test running, each outgoing e-mail is saved in
|
During test running, each outgoing e-mail is saved in
|
||||||
``django.core.mail.outbox``. This is a simple list of all `EmailMessage`_
|
``django.core.mail.outbox``. This is a simple list of all `EmailMessage`_
|
||||||
instances that have been sent. It does not exist under normal execution
|
instances that have been sent. It does not exist under normal execution
|
||||||
conditions, i.e., when you're not running unit tests. The outbox is created
|
conditions, i.e., when you're not running unit tests. The outbox is created
|
||||||
|
@ -977,7 +988,7 @@ a number of utility methods in the ``django.test.utils`` module.
|
||||||
|
|
||||||
``autoclobber`` describes the behavior that will occur if a database with
|
``autoclobber`` describes the behavior that will occur if a database with
|
||||||
the same name as the test database is discovered:
|
the same name as the test database is discovered:
|
||||||
|
|
||||||
* If ``autoclobber`` is ``False``, the user will be asked to approve
|
* If ``autoclobber`` is ``False``, the user will be asked to approve
|
||||||
destroying the existing database. ``sys.exit`` is called if the user
|
destroying the existing database. ``sys.exit`` is called if the user
|
||||||
does not approve.
|
does not approve.
|
||||||
|
|
|
@ -246,6 +246,22 @@ class ClientTest(TestCase):
|
||||||
login = self.client.login(username='inactive', password='password')
|
login = self.client.login(username='inactive', password='password')
|
||||||
self.failIf(login)
|
self.failIf(login)
|
||||||
|
|
||||||
|
def test_logout(self):
|
||||||
|
# Log in
|
||||||
|
self.client.login(username='testclient', password='password')
|
||||||
|
|
||||||
|
# Request a page that requires a login
|
||||||
|
response = self.client.get('/test_client/login_protected_view/')
|
||||||
|
self.assertEqual(response.status_code, 200)
|
||||||
|
self.assertEqual(response.context['user'].username, 'testclient')
|
||||||
|
|
||||||
|
# Log out
|
||||||
|
self.client.logout()
|
||||||
|
|
||||||
|
# Request a page that requires a login
|
||||||
|
response = self.client.get('/test_client/login_protected_view/')
|
||||||
|
self.assertRedirects(response, '/accounts/login/')
|
||||||
|
|
||||||
def test_session_modifying_view(self):
|
def test_session_modifying_view(self):
|
||||||
"Request a page that modifies the session"
|
"Request a page that modifies the session"
|
||||||
# Session value isn't set initially
|
# Session value isn't set initially
|
||||||
|
|
Loading…
Reference in New Issue