Skip to content

Commit ff6b519

Browse files
committed
Fixed regression that tests using format still work
Error only occurred on tests which return no content and use a renderer without charset (e.g. JSONRenderer)
1 parent 089f6a6 commit ff6b519

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

rest_framework/test.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ def _encode_data(self, data, format=None, content_type=None):
195195
ret = renderer.render(data)
196196

197197
# Coerce text to bytes if required.
198-
if isinstance(ret, str):
198+
if isinstance(ret, str) and renderer.charset:
199199
ret = ret.encode(renderer.charset)
200200

201201
return ret, content_type

tests/test_testing.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88
from django.test import TestCase, override_settings
99
from django.urls import path
1010

11-
from rest_framework import fields, parsers, serializers
11+
from rest_framework import fields, parsers, renderers, serializers, status
1212
from rest_framework.authtoken.models import Token
13-
from rest_framework.decorators import api_view, parser_classes
13+
from rest_framework.decorators import api_view, parser_classes, renderer_classes
1414
from rest_framework.response import Response
1515
from rest_framework.test import (
1616
APIClient, APIRequestFactory, URLPatternsTestCase, force_authenticate
@@ -55,6 +55,10 @@ class BasicSerializer(serializers.Serializer):
5555
def post_json_view(request):
5656
return Response(request.data)
5757

58+
@api_view(['DELETE'])
59+
@renderer_classes((renderers.JSONRenderer, ))
60+
def delete_json_view(request):
61+
return Response(status=status.HTTP_204_NO_CONTENT)
5862

5963
@api_view(['POST'])
6064
def post_view(request):
@@ -69,6 +73,7 @@ def post_view(request):
6973
path('redirect-view/', redirect_view),
7074
path('redirect-view/<int:code>/', redirect_307_308_view),
7175
path('post-json-view/', post_json_view),
76+
path('delete-json-view/', delete_json_view),
7277
path('post-view/', post_view),
7378
]
7479

@@ -254,6 +259,11 @@ def test_post_encodes_data_based_on_json_content_type(self):
254259
assert response.status_code == 200
255260
assert response.data == data
256261

262+
def test_delete_based_on_format(self):
263+
response = self.client.delete('/delete-json-view/', format='json')
264+
assert response.status_code == status.HTTP_204_NO_CONTENT
265+
assert response.data is None
266+
257267

258268
class TestAPIRequestFactory(TestCase):
259269
def test_csrf_exempt_by_default(self):

0 commit comments

Comments
 (0)