aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework/tests
diff options
context:
space:
mode:
authorTom Christie2013-12-08 23:52:55 -0800
committerTom Christie2013-12-08 23:52:55 -0800
commit712ab8e3dc7613764b0e401c0aa7855d988bb0cc (patch)
tree9bbd389ee889d63c27ab6632e29cb85195cedb0c /rest_framework/tests
parent5eca31d161181a9f53e60d3fe04cdbdfacf8ff9d (diff)
parent80ef2685e522fc87bd8af9767aa7b231c9991ea4 (diff)
downloaddjango-rest-framework-712ab8e3dc7613764b0e401c0aa7855d988bb0cc.tar.bz2
Merge pull request #1262 from tomchristie/fix-1261
Catch errors during parsing and set empty .DATA/.FILES before re-raising.
Diffstat (limited to 'rest_framework/tests')
-rw-r--r--rest_framework/tests/test_renderers.py14
1 files changed, 14 insertions, 0 deletions
diff --git a/rest_framework/tests/test_renderers.py b/rest_framework/tests/test_renderers.py
index f7de8fd7..d13b3492 100644
--- a/rest_framework/tests/test_renderers.py
+++ b/rest_framework/tests/test_renderers.py
@@ -68,12 +68,19 @@ class MockGETView(APIView):
return Response({'foo': ['bar', 'baz']})
+
+class MockPOSTView(APIView):
+ def post(self, request, **kwargs):
+ return Response({'foo': request.DATA})
+
+
class EmptyGETView(APIView):
renderer_classes = (JSONRenderer,)
def get(self, request, **kwargs):
return Response(status=status.HTTP_204_NO_CONTENT)
+
class HTMLView(APIView):
renderer_classes = (BrowsableAPIRenderer, )
@@ -93,6 +100,7 @@ urlpatterns = patterns('',
url(r'^cache$', MockGETView.as_view()),
url(r'^jsonp/jsonrenderer$', MockGETView.as_view(renderer_classes=[JSONRenderer, JSONPRenderer])),
url(r'^jsonp/nojsonrenderer$', MockGETView.as_view(renderer_classes=[JSONPRenderer])),
+ url(r'^parseerror$', MockPOSTView.as_view(renderer_classes=[JSONRenderer, BrowsableAPIRenderer])),
url(r'^html$', HTMLView.as_view()),
url(r'^html1$', HTMLView1.as_view()),
url(r'^empty$', EmptyGETView.as_view()),
@@ -225,6 +233,12 @@ class RendererEndToEndTests(TestCase):
self.assertEqual(resp.content, RENDERER_B_SERIALIZER(DUMMYCONTENT))
self.assertEqual(resp.status_code, DUMMYSTATUS)
+ def test_parse_error_renderers_browsable_api(self):
+ """Invalid data should still render the browsable API correctly."""
+ resp = self.client.post('/parseerror', data='foobar', content_type='application/json', HTTP_ACCEPT='text/html')
+ self.assertEqual(resp['Content-Type'], 'text/html; charset=utf-8')
+ self.assertEqual(resp.status_code, status.HTTP_400_BAD_REQUEST)
+
def test_204_no_content_responses_have_no_content_type_set(self):
"""
Regression test for #1196