99from django .test import TestCase , override_settings
1010from django .urls import path
1111
12- from rest_framework import fields , serializers
12+ from rest_framework import fields , parsers , serializers
1313from rest_framework .authtoken .models import Token
14- from rest_framework .decorators import api_view
14+ from rest_framework .decorators import api_view , parser_classes
1515from rest_framework .response import Response
1616from rest_framework .test import (
1717 APIClient , APIRequestFactory , URLPatternsTestCase , force_authenticate
@@ -51,6 +51,12 @@ class BasicSerializer(serializers.Serializer):
5151 flag = fields .BooleanField (default = lambda : True )
5252
5353
54+ @api_view (['POST' ])
55+ @parser_classes ((parsers .JSONParser ,))
56+ def post_json_view (request ):
57+ return Response (request .data )
58+
59+
5460@api_view (['POST' ])
5561def post_view (request ):
5662 serializer = BasicSerializer (data = request .data )
@@ -63,7 +69,8 @@ def post_view(request):
6369 path ('session-view/' , session_view ),
6470 path ('redirect-view/' , redirect_view ),
6571 path ('redirect-view/<int:code>/' , redirect_307_308_view ),
66- path ('post-view/' , post_view )
72+ path ('post-json-view/' , post_json_view ),
73+ path ('post-view/' , post_view ),
6774]
6875
6976
@@ -237,6 +244,17 @@ def test_empty_post_uses_default_boolean_value(self):
237244 assert response .status_code == 200
238245 assert response .data == {"flag" : True }
239246
247+ def test_post_encodes_data_based_on_json_content_type (self ):
248+ data = {'data' : True }
249+ response = self .client .post (
250+ '/post-json-view/' ,
251+ data = data ,
252+ content_type = 'application/json'
253+ )
254+
255+ assert response .status_code == 200
256+ assert response .data == data
257+
240258
241259class TestAPIRequestFactory (TestCase ):
242260 def test_csrf_exempt_by_default (self ):
0 commit comments