diff options
Diffstat (limited to 'tests/urlpatterns_reverse')
| -rw-r--r-- | tests/urlpatterns_reverse/middleware.py | 23 | ||||
| -rw-r--r-- | tests/urlpatterns_reverse/tests.py | 53 |
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""" |
