diff options
| author | Unai Zalakain <unai@gisa-elkartea.org> | 2013-10-29 18:31:54 +0100 |
|---|---|---|
| committer | Anssi Kääriäinen <akaariai@gmail.com> | 2013-11-19 09:04:20 +0200 |
| commit | 4fdd51b73240bf9c8d9472fcc45df699f0714755 (patch) | |
| tree | 50e7cb8ea392bce529da22eb84a22b95a4220382 /tests | |
| parent | 9348fc5628ccbbe156e9523b5eb8ba3ce783166e (diff) | |
Fixed #15179 -- middlewares not applied for test client login()
Requests made with django.test.Client.login() and logout() respect
defaults defined in django.test.Client instantiation and are processed
through middleware.
Thanks to Loic for the reviews.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/test_client_regress/tests.py | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/tests/test_client_regress/tests.py b/tests/test_client_regress/tests.py index 5f907925ba..1bee0b95e7 100644 --- a/tests/test_client_regress/tests.py +++ b/tests/test_client_regress/tests.py @@ -7,6 +7,7 @@ from __future__ import unicode_literals import os import itertools +from django.conf import settings from django.core.urlresolvers import reverse from django.template import (TemplateSyntaxError, Context, Template, loader) @@ -761,6 +762,11 @@ class AssertFormsetErrorTests(TestCase): **kwargs) +class ProcessedMiddleware(object): + def process_request(self, request): + request.has_been_processed = True + + @override_settings(PASSWORD_HASHERS=('django.contrib.auth.hashers.SHA1PasswordHasher',)) class LoginTests(TestCase): fixtures = ['testdata'] @@ -781,6 +787,24 @@ class LoginTests(TestCase): # default client. self.assertRedirects(response, "http://testserver/test_client_regress/get_view/") + @override_settings( + MIDDLEWARE_CLASSES=list(settings.MIDDLEWARE_CLASSES) + + ['test_client_regress.tests.ProcessedMiddleware']) + def test_request_middleware(self): + "Check that the request middleware is executed on login request" + + def listener(sender, signal, **kwargs): + request = kwargs['request'] + self.assertTrue(hasattr(request, 'has_been_processed')) + + # Unlike other Client request performing methods, login and logout don't + # return the response, therefore we must use signals to get it + user_logged_in.connect(listener) + try: + self.client.login(username='testclient', password='password') + finally: + user_logged_in.disconnect(listener) + @override_settings( PASSWORD_HASHERS=('django.contrib.auth.hashers.SHA1PasswordHasher',), @@ -1260,12 +1284,32 @@ class UploadedFileEncodingTest(TestCase): class RequestHeadersTest(TestCase): + fixtures = ['testdata'] + def test_client_headers(self): "A test client can receive custom headers" response = self.client.get("/test_client_regress/check_headers/", HTTP_X_ARG_CHECK='Testing 123') self.assertEqual(response.content, b"HTTP_X_ARG_CHECK: Testing 123") self.assertEqual(response.status_code, 200) + @override_settings(PASSWORD_HASHERS=('django.contrib.auth.hashers.SHA1PasswordHasher',)) + def test_client_login_headers(self): + "Test client headers are used in login" + + client = Client(HTTP_HOST='different') + + def listener(sender, signal, **kwargs): + request = kwargs['request'] + self.assertEqual(request.get_host(), 'different') + + # Unlike other Client request performing methods, login and logout don't + # return the response, therefore we must use signals to get it + user_logged_in.connect(listener) + try: + client.login(username='testclient', password='password') + finally: + user_logged_in.disconnect(listener) + def test_client_headers_redirect(self): "Test client headers are preserved through redirects" response = self.client.get("/test_client_regress/check_headers_redirect/", follow=True, HTTP_X_ARG_CHECK='Testing 123') |
