diff options
Diffstat (limited to 'rest_framework')
| -rw-r--r-- | rest_framework/request.py | 9 | ||||
| -rw-r--r-- | rest_framework/tests/request.py | 28 | 
2 files changed, 37 insertions, 0 deletions
diff --git a/rest_framework/request.py b/rest_framework/request.py index a1827ba4..39c64321 100644 --- a/rest_framework/request.py +++ b/rest_framework/request.py @@ -169,6 +169,15 @@ class Request(object):              self._user, self._auth = self._authenticate()          return self._user +    @user.setter +    def user(self, value): +         """ +         Sets the user on the current request. This is necessary to maintain +         compatilbility with django.contrib.auth where the user proprety is +         set in the login and logout functions. +         """ +         self._user = value +      @property      def auth(self):          """ diff --git a/rest_framework/tests/request.py b/rest_framework/tests/request.py index ff48f3fa..2850992d 100644 --- a/rest_framework/tests/request.py +++ b/rest_framework/tests/request.py @@ -3,6 +3,8 @@ Tests for content parsing, and form-overloaded content parsing.  """  from django.conf.urls.defaults import patterns  from django.contrib.auth.models import User +from django.contrib.auth import authenticate, login, logout +from django.contrib.sessions.middleware import SessionMiddleware  from django.test import TestCase, Client  from django.utils import simplejson as json @@ -276,3 +278,29 @@ class TestContentParsingWithAuthentication(TestCase):      #     response = self.csrf_client.post('/', content)      #     self.assertEqual(status.OK, response.status_code, "POST data is malformed") + + +class TestUserSetter(TestCase): + +    def setUp(self): +        # Pass request object through session middleware so session is +        # available to login and logout functions +        self.request = Request(factory.get('/')) +        SessionMiddleware().process_request(self.request) + +        User.objects.create_user('ringo', 'starr@thebeatles.com', 'yellow') +        self.user = authenticate(username='ringo', password='yellow') + +    def test_user_can_be_set(self): +        self.request.user = self.user +        self.assertEqual(self.request.user, self.user) + +    def test_user_can_login(self): +        login(self.request, self.user) +        self.assertEqual(self.request.user, self.user) + +    def test_user_can_logout(self): +        self.request.user = self.user +        self.assertFalse(self.request.user.is_anonymous()) +        logout(self.request) +        self.assertTrue(self.request.user.is_anonymous())  | 
