diff options
| author | Aymeric Augustin <aymeric.augustin@m4x.org> | 2012-12-30 15:19:22 +0100 |
|---|---|---|
| committer | Aymeric Augustin <aymeric.augustin@m4x.org> | 2012-12-31 12:49:10 +0100 |
| commit | fd1279a44df3b9a837453cd79fd0fbcf81bae39d (patch) | |
| tree | 1323829d8630fb55acabed516c0a7149574b11fc /tests | |
| parent | ac72782e61a8e08381cb66005295a4c24ed37f33 (diff) | |
[1.5.x] Fixed #19519 -- Fired request_finished in the WSGI iterable's close().
Backport of acc5396.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/regressiontests/handlers/tests.py | 38 | ||||
| -rw-r--r-- | tests/regressiontests/handlers/urls.py | 9 |
2 files changed, 44 insertions, 3 deletions
diff --git a/tests/regressiontests/handlers/tests.py b/tests/regressiontests/handlers/tests.py index 9cd5816219..3cab2aca57 100644 --- a/tests/regressiontests/handlers/tests.py +++ b/tests/regressiontests/handlers/tests.py @@ -1,10 +1,11 @@ from django.core.handlers.wsgi import WSGIHandler -from django.test import RequestFactory +from django.core import signals +from django.test import RequestFactory, TestCase from django.test.utils import override_settings from django.utils import six -from django.utils import unittest -class HandlerTests(unittest.TestCase): + +class HandlerTests(TestCase): # Mangle settings so the handler will fail @override_settings(MIDDLEWARE_CLASSES=42) @@ -27,3 +28,34 @@ class HandlerTests(unittest.TestCase): handler = WSGIHandler() response = handler(environ, lambda *a, **k: None) self.assertEqual(response.status_code, 400) + + +class SignalsTests(TestCase): + urls = 'regressiontests.handlers.urls' + + def setUp(self): + self.signals = [] + signals.request_started.connect(self.register_started) + signals.request_finished.connect(self.register_finished) + + def tearDown(self): + signals.request_started.disconnect(self.register_started) + signals.request_finished.disconnect(self.register_finished) + + def register_started(self, **kwargs): + self.signals.append('started') + + def register_finished(self, **kwargs): + self.signals.append('finished') + + def test_request_signals(self): + response = self.client.get('/regular/') + self.assertEqual(self.signals, ['started', 'finished']) + self.assertEqual(response.content, b"regular content") + + def test_request_signals_streaming_response(self): + response = self.client.get('/streaming/') + self.assertEqual(self.signals, ['started']) + # Avoid self.assertContains, because it explicitly calls response.close() + self.assertEqual(b''.join(response.streaming_content), b"streaming content") + self.assertEqual(self.signals, ['started', 'finished']) diff --git a/tests/regressiontests/handlers/urls.py b/tests/regressiontests/handlers/urls.py new file mode 100644 index 0000000000..8570f04696 --- /dev/null +++ b/tests/regressiontests/handlers/urls.py @@ -0,0 +1,9 @@ +from __future__ import unicode_literals + +from django.conf.urls import patterns, url +from django.http import HttpResponse, StreamingHttpResponse + +urlpatterns = patterns('', + url(r'^regular/$', lambda request: HttpResponse(b"regular content")), + url(r'^streaming/$', lambda request: StreamingHttpResponse([b"streaming", b" ", b"content"])), +) |
