summaryrefslogtreecommitdiff
path: root/tests/urlpatterns_reverse
diff options
context:
space:
mode:
authorLoic Bistuer <loic.bistuer@sixmedia.com>2013-03-07 06:33:51 +0700
committerLoic Bistuer <loic.bistuer@sixmedia.com>2013-03-25 03:19:19 +0700
commit521765f63d724f0a1becb614530170f5d00fc6a9 (patch)
tree1e41fa8cd873eb851089729cff7f46f248bd02ad /tests/urlpatterns_reverse
parent014638a1311dfc64e6f6eed28f12eeb227926150 (diff)
Fixed #19541 -- Fixed BaseHandler to enable reversing URLs in response middlewares
and streamed responses with respect to per-request urlconf.
Diffstat (limited to 'tests/urlpatterns_reverse')
-rw-r--r--tests/urlpatterns_reverse/middleware.py23
-rw-r--r--tests/urlpatterns_reverse/tests.py53
2 files changed, 76 insertions, 0 deletions
diff --git a/tests/urlpatterns_reverse/middleware.py b/tests/urlpatterns_reverse/middleware.py
index 03749e9570..fbf577786e 100644
--- a/tests/urlpatterns_reverse/middleware.py
+++ b/tests/urlpatterns_reverse/middleware.py
@@ -1,5 +1,8 @@
from __future__ import absolute_import
+from django.core.urlresolvers import reverse
+from django.http import HttpResponse, StreamingHttpResponse
+
from . import urlconf_inner
@@ -10,3 +13,23 @@ class ChangeURLconfMiddleware(object):
class NullChangeURLconfMiddleware(object):
def process_request(self, request):
request.urlconf = None
+
+class ReverseInnerInResponseMiddleware(object):
+ def process_response(self, *args, **kwargs):
+ return HttpResponse(reverse('inner'))
+
+class ReverseOuterInResponseMiddleware(object):
+ def process_response(self, *args, **kwargs):
+ return HttpResponse(reverse('outer'))
+
+class ReverseInnerInStreaming(object):
+ def process_view(self, *args, **kwargs):
+ def stream():
+ yield reverse('inner')
+ return StreamingHttpResponse(stream())
+
+class ReverseOuterInStreaming(object):
+ def process_view(self, *args, **kwargs):
+ def stream():
+ yield reverse('outer')
+ return StreamingHttpResponse(stream())
diff --git a/tests/urlpatterns_reverse/tests.py b/tests/urlpatterns_reverse/tests.py
index 4a45e63cb0..24f96fac7c 100644
--- a/tests/urlpatterns_reverse/tests.py
+++ b/tests/urlpatterns_reverse/tests.py
@@ -462,6 +462,59 @@ class RequestURLconfTests(TestCase):
)
self.assertRaises(ImproperlyConfigured, self.client.get, '/test/me/')
+ def test_reverse_inner_in_response_middleware(self):
+ """
+ Test reversing an URL from the *overridden* URLconf from inside
+ a response middleware.
+ """
+ settings.MIDDLEWARE_CLASSES += (
+ '%s.ChangeURLconfMiddleware' % middleware.__name__,
+ '%s.ReverseInnerInResponseMiddleware' % middleware.__name__,
+ )
+ response = self.client.get('/second_test/')
+ self.assertEqual(response.status_code, 200)
+ self.assertEqual(response.content, b'/second_test/')
+
+ def test_reverse_outer_in_response_middleware(self):
+ """
+ Test reversing an URL from the *default* URLconf from inside
+ a response middleware.
+ """
+ settings.MIDDLEWARE_CLASSES += (
+ '%s.ChangeURLconfMiddleware' % middleware.__name__,
+ '%s.ReverseOuterInResponseMiddleware' % middleware.__name__,
+ )
+ message = "Reverse for 'outer' with arguments '()' and keyword arguments '{}' not found."
+ with self.assertRaisesMessage(NoReverseMatch, message):
+ self.client.get('/second_test/')
+
+ def test_reverse_inner_in_streaming(self):
+ """
+ Test reversing an URL from the *overridden* URLconf from inside
+ a streaming response.
+ """
+ settings.MIDDLEWARE_CLASSES += (
+ '%s.ChangeURLconfMiddleware' % middleware.__name__,
+ '%s.ReverseInnerInStreaming' % middleware.__name__,
+ )
+ response = self.client.get('/second_test/')
+ self.assertEqual(response.status_code, 200)
+ self.assertEqual(b''.join(response), b'/second_test/')
+
+ def test_reverse_outer_in_streaming(self):
+ """
+ Test reversing an URL from the *default* URLconf from inside
+ a streaming response.
+ """
+ settings.MIDDLEWARE_CLASSES += (
+ '%s.ChangeURLconfMiddleware' % middleware.__name__,
+ '%s.ReverseOuterInStreaming' % middleware.__name__,
+ )
+ message = "Reverse for 'outer' with arguments '()' and keyword arguments '{}' not found."
+ with self.assertRaisesMessage(NoReverseMatch, message):
+ self.client.get('/second_test/')
+ b''.join(self.client.get('/second_test/'))
+
class ErrorHandlerResolutionTests(TestCase):
"""Tests for handler404 and handler500"""