From 78312d44d1e1a7f43daacd1614be2008eb77a0de Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Fri, 12 Dec 2014 13:13:08 +0000 Subject: [PATCH 1/3] Client.logout() also clears any force_authenticate --- rest_framework/test.py | 5 +++++ tests/test_testing.py | 14 +++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/rest_framework/test.py b/rest_framework/test.py index 74d2c868f..4f4b7c201 100644 --- a/rest_framework/test.py +++ b/rest_framework/test.py @@ -204,6 +204,11 @@ class APIClient(APIRequestFactory, DjangoClient): def logout(self): self._credentials = {} + + # Also clear any `force_authenticate` + self.handler._force_user = None + self.handler._force_token = None + return super(APIClient, self).logout() diff --git a/tests/test_testing.py b/tests/test_testing.py index 9fd5966eb..f5d2cbcd6 100644 --- a/tests/test_testing.py +++ b/tests/test_testing.py @@ -109,7 +109,7 @@ class TestAPITestClient(TestCase): def test_can_logout(self): """ - `logout()` reset stored credentials + `logout()` resets stored credentials """ self.client.credentials(HTTP_AUTHORIZATION='example') response = self.client.get('/view/') @@ -118,6 +118,18 @@ class TestAPITestClient(TestCase): response = self.client.get('/view/') self.assertEqual(response.data['auth'], b'') + def test_logout_resets_force_authenticate(self): + """ + `logout()` resets any `force_authenticate` + """ + user = User.objects.create_user('example', 'example@example.com', 'password') + self.client.force_authenticate(user) + response = self.client.get('/view/') + self.assertEqual(response.data['user'], 'example') + self.client.logout() + response = self.client.get('/view/') + self.assertEqual(response.data['user'], b'') + def test_follow_redirect(self): """ Follow redirect by setting follow argument. From e3b16c8bc631d5be599776c483ee0488cef9c288 Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Fri, 12 Dec 2014 13:16:18 +0000 Subject: [PATCH 2/3] Python 3 test fix --- tests/test_testing.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_testing.py b/tests/test_testing.py index f5d2cbcd6..6fce84645 100644 --- a/tests/test_testing.py +++ b/tests/test_testing.py @@ -128,7 +128,7 @@ class TestAPITestClient(TestCase): self.assertEqual(response.data['user'], 'example') self.client.logout() response = self.client.get('/view/') - self.assertEqual(response.data['user'], b'') + self.assertEqual(response.data['user'], '') def test_follow_redirect(self): """ From 8825b258caa0c51d6dcdb3529dc433c75a76339d Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Fri, 12 Dec 2014 13:22:24 +0000 Subject: [PATCH 3/3] Clean up import ordering --- tests/test_testing.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/tests/test_testing.py b/tests/test_testing.py index 6fce84645..87d2b61fa 100644 --- a/tests/test_testing.py +++ b/tests/test_testing.py @@ -1,15 +1,13 @@ -# -- coding: utf-8 -- - +# encoding: utf-8 from __future__ import unicode_literals from django.conf.urls import patterns, url -from io import BytesIO - from django.contrib.auth.models import User from django.shortcuts import redirect from django.test import TestCase from rest_framework.decorators import api_view from rest_framework.response import Response from rest_framework.test import APIClient, APIRequestFactory, force_authenticate +from io import BytesIO @api_view(['GET', 'POST'])