summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorAymeric Augustin <aymeric.augustin@m4x.org>2012-12-30 15:19:22 +0100
committerAymeric Augustin <aymeric.augustin@m4x.org>2012-12-31 12:49:10 +0100
commitfd1279a44df3b9a837453cd79fd0fbcf81bae39d (patch)
tree1323829d8630fb55acabed516c0a7149574b11fc /tests
parentac72782e61a8e08381cb66005295a4c24ed37f33 (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.py38
-rw-r--r--tests/regressiontests/handlers/urls.py9
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"])),
+)