From 69259df25030265b53bc526c509e88a27ca8805e Mon Sep 17 00:00:00 2001 From: Ilya Baryshev Date: Wed, 11 Jan 2012 22:17:47 +0400 Subject: [PATCH] Added ability to login as arbitrary user --- .idea/dictionaries/prophet.xml | 3 +++ django_any/test.py | 10 +++++++++- django_any/tests/test_client.py | 9 +++++++++ docs/changelog.rst | 6 ++++++ docs/contrib.rst | 11 ++++++++--- 5 files changed, 35 insertions(+), 4 deletions(-) create mode 100644 .idea/dictionaries/prophet.xml diff --git a/.idea/dictionaries/prophet.xml b/.idea/dictionaries/prophet.xml new file mode 100644 index 0000000..b535de8 --- /dev/null +++ b/.idea/dictionaries/prophet.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/django_any/test.py b/django_any/test.py index 65a990d..f5f9d24 100644 --- a/django_any/test.py +++ b/django_any/test.py @@ -40,7 +40,15 @@ def _request_context_forms(context): class Client(DjangoClient): def login_as(self, **kwargs): password = xunit.any_string() - user = any_user(password=password, **kwargs) + if 'user' in kwargs: + user = kwargs['user'] + try: + user.set_password(password) + user.save() + except Exception: + raise AssertionError('Bad user object') + else: + user = any_user(password=password, **kwargs) if self.login(username=user.username, password=password): return user diff --git a/django_any/tests/test_client.py b/django_any/tests/test_client.py index 60048d2..b19f6e8 100644 --- a/django_any/tests/test_client.py +++ b/django_any/tests/test_client.py @@ -1,6 +1,7 @@ # -*- coding: utf-8; mode: django -*- from django.conf.urls.defaults import patterns, include from django.contrib import admin +from django.contrib.auth.models import User from django.test import TestCase from django_any.test import Client @@ -47,6 +48,14 @@ def test_login_as_super_user(self): response = self.client.get('/admin/') self.assertEquals(200, response.status_code) + def test_login_as_custom_user(self): + user = User.objects.create_user('john', 'lennon@thebeatles.com', 'johnpassword') + self.assertTrue(self.client.login_as(user=user)) + + def test_login_as_failed(self): + user = None + self.assertRaises(AssertionError, self.client.login_as, user=user) + def test_post_any_data(self): response = self.client.post_any_data('/view/') self.assertRedirects(response, '/view/') diff --git a/docs/changelog.rst b/docs/changelog.rst index a84ec08..d0a30bc 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -3,6 +3,12 @@ Changelog ========= +0.2.2 +~~~~~ + +* Fixed pip installation +* Added ability to login_as arbitrary user + 0.2.1 ~~~~~ diff --git a/docs/contrib.rst b/docs/contrib.rst index 96c3dc6..9f81b30 100644 --- a/docs/contrib.rst +++ b/docs/contrib.rst @@ -35,14 +35,15 @@ Creating users Custom test client ------------------ -.. currentmodule:: django_any.contrib +.. currentmodule:: django_any.test -Django any has custom test clent, that extends default django client. -It provides two useful methods for authorisation and posting forms. +Django-whatever has custom test clent, that extends default django client. +It provides two useful methods for authorization and forms posting. .. function:: login_as(self, **kwargs): Log into site as random user. Key-valued arguments are the same as for ``any_user`` function. + To log in as specific user, provide argument ``user`` (note, that user password will be reset). .. code-block:: django @@ -51,6 +52,10 @@ It provides two useful methods for authorisation and posting forms. # log in as admin self.client.login_as(is_superuser=True) + # log in as specific user + user = User.objects.create_user('john', 'lennon@thebeatles.com', 'johnpassword') + self.client.login_as(user=user) + .. _post_any_data: .. function:: post_any_data(self, url, extra=None, context_forms=_request_context_forms, **kwargs):