diff options
author | Sylvain Fankhauser <sylvain.fankhauser@liip.ch> | 2015-06-05 15:30:03 +0200 |
---|---|---|
committer | Tim Graham <timograham@gmail.com> | 2015-07-03 12:06:40 -0400 |
commit | f5d5867a4a6aeddd58ff855a01ab4e438d938ac1 (patch) | |
tree | 73ecdbab94868fbd360f057d4dc192781bebfae6 /tests/middleware_exceptions | |
parent | b91a2a499fd562011fd275238924baa6002fb1f8 (diff) | |
download | django-f5d5867a4a6aeddd58ff855a01ab4e438d938ac1.tar.gz |
Fixed #24877 -- Added middleware handling of response.render() errors.
Diffstat (limited to 'tests/middleware_exceptions')
-rw-r--r-- | tests/middleware_exceptions/middleware.py | 8 | ||||
-rw-r--r-- | tests/middleware_exceptions/tests.py | 10 | ||||
-rw-r--r-- | tests/middleware_exceptions/urls.py | 1 | ||||
-rw-r--r-- | tests/middleware_exceptions/views.py | 8 |
4 files changed, 27 insertions, 0 deletions
diff --git a/tests/middleware_exceptions/middleware.py b/tests/middleware_exceptions/middleware.py new file mode 100644 index 0000000000..944dd8910d --- /dev/null +++ b/tests/middleware_exceptions/middleware.py @@ -0,0 +1,8 @@ +from __future__ import unicode_literals + +from django.http import HttpResponse + + +class ProcessExceptionMiddleware(object): + def process_exception(self, request, exception): + return HttpResponse('Exception caught') diff --git a/tests/middleware_exceptions/tests.py b/tests/middleware_exceptions/tests.py index eb80460bce..11769277b8 100644 --- a/tests/middleware_exceptions/tests.py +++ b/tests/middleware_exceptions/tests.py @@ -486,6 +486,16 @@ class MiddlewareTests(BaseMiddlewareExceptionTest): # Check that the right middleware methods have been invoked self.assert_middleware_usage(middleware, True, True, True, True, False) + @override_settings( + MIDDLEWARE_CLASSES=['middleware_exceptions.middleware.ProcessExceptionMiddleware'], + ) + def test_exception_in_render_passed_to_process_exception(self): + # Repopulate the list of middlewares since it's already been populated + # by setUp() before the MIDDLEWARE_CLASSES setting got overridden + self.client.handler.load_middleware() + response = self.client.get('/middleware_exceptions/exception_in_render/') + self.assertEqual(response.content, b'Exception caught') + class BadMiddlewareTests(BaseMiddlewareExceptionTest): diff --git a/tests/middleware_exceptions/urls.py b/tests/middleware_exceptions/urls.py index 6fde4fd942..85c7a785ec 100644 --- a/tests/middleware_exceptions/urls.py +++ b/tests/middleware_exceptions/urls.py @@ -8,6 +8,7 @@ urlpatterns = [ url(r'^middleware_exceptions/error/$', views.server_error), url(r'^middleware_exceptions/null_view/$', views.null_view), url(r'^middleware_exceptions/permission_denied/$', views.permission_denied), + url(r'^middleware_exceptions/exception_in_render/$', views.exception_in_render), url(r'^middleware_exceptions/template_response/$', views.template_response), url(r'^middleware_exceptions/template_response_error/$', views.template_response_error), diff --git a/tests/middleware_exceptions/views.py b/tests/middleware_exceptions/views.py index d3d7fae661..891c196728 100644 --- a/tests/middleware_exceptions/views.py +++ b/tests/middleware_exceptions/views.py @@ -32,3 +32,11 @@ def null_view(request): def permission_denied(request): raise PermissionDenied() + + +def exception_in_render(request): + class CustomHttpResponse(http.HttpResponse): + def render(self): + raise Exception('Exception in HttpResponse.render()') + + return CustomHttpResponse('Error') |