From 06612ea626b886cd8eb50ad1c3075c1fd6b16275 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20Wr=C3=B3bel?= Date: Tue, 11 Oct 2016 23:14:58 +0200 Subject: [PATCH 1/2] Failing test case for errors in RelationshipView. --- example/tests/test_views.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/example/tests/test_views.py b/example/tests/test_views.py index 774b06a7..28c39915 100644 --- a/example/tests/test_views.py +++ b/example/tests/test_views.py @@ -77,6 +77,18 @@ def test_patch_invalid_entry_relationship_blog_returns_400(self): content_type='application/vnd.api+json') assert response.status_code == 400 + def test_relationship_view_errors_format(self): + url = '/entries/{}/relationships/blog'.format(self.first_entry.id) + response = self.client.patch(url, + data=json.dumps({'data': {'invalid': ''}}), + content_type='application/vnd.api+json') + assert response.status_code == 400 + + result = json.loads(response.content.decode('utf-8')) + + assert 'data' not in result + assert 'errors' in result + def test_get_empty_to_one_relationship(self): url = '/comments/{}/relationships/author'.format(self.first_entry.id) response = self.client.get(url) From 0302faba3374ccaed332a52b53c28d201da81f77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20Wr=C3=B3bel?= Date: Tue, 11 Oct 2016 23:16:41 +0200 Subject: [PATCH 2/2] Fix errors format in RelationshipView. --- rest_framework_json_api/renderers.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/rest_framework_json_api/renderers.py b/rest_framework_json_api/renderers.py index 1a2edb6c..04a9aaff 100644 --- a/rest_framework_json_api/renderers.py +++ b/rest_framework_json_api/renderers.py @@ -419,13 +419,17 @@ def render(self, data, accepted_media_type=None, renderer_context=None): view = renderer_context.get("view", None) request = renderer_context.get("request", None) + # Get the resource name. + resource_name = utils.get_resource_name(renderer_context) + + # If this is an error response, skip the rest. + if resource_name == 'errors': + return self.render_errors(data, accepted_media_type, renderer_context) + from rest_framework_json_api.views import RelationshipView if isinstance(view, RelationshipView): return self.render_relationship_view(data, accepted_media_type, renderer_context) - # Get the resource name. - resource_name = utils.get_resource_name(renderer_context) - # If `resource_name` is set to None then render default as the dev # wants to build the output format manually. if resource_name is None or resource_name is False: @@ -433,10 +437,6 @@ def render(self, data, accepted_media_type=None, renderer_context=None): data, accepted_media_type, renderer_context ) - # If this is an error response, skip the rest. - if resource_name == 'errors': - return self.render_errors(data, accepted_media_type, renderer_context) - json_api_data = data json_api_included = list() # initialize json_api_meta with pagination meta or an empty dict