9
9
from django .test import TestCase , override_settings
10
10
from django .urls import path
11
11
12
- from rest_framework import fields , serializers
13
- from rest_framework .decorators import api_view
12
+ from rest_framework import fields , parsers , serializers
13
+ from rest_framework .decorators import api_view , parser_classes
14
14
from rest_framework .response import Response
15
15
from rest_framework .test import (
16
16
APIClient , APIRequestFactory , URLPatternsTestCase , force_authenticate
@@ -48,6 +48,12 @@ class BasicSerializer(serializers.Serializer):
48
48
flag = fields .BooleanField (default = lambda : True )
49
49
50
50
51
+ @api_view (['POST' ])
52
+ @parser_classes ((parsers .JSONParser ,))
53
+ def post_json_view (request ):
54
+ return Response (request .data )
55
+
56
+
51
57
@api_view (['POST' ])
52
58
def post_view (request ):
53
59
serializer = BasicSerializer (data = request .data )
@@ -60,7 +66,8 @@ def post_view(request):
60
66
path ('session-view/' , session_view ),
61
67
path ('redirect-view/' , redirect_view ),
62
68
path ('redirect-view/<int:code>/' , redirect_307_308_view ),
63
- path ('post-view/' , post_view )
69
+ path ('post-json-view/' , post_json_view ),
70
+ path ('post-view/' , post_view ),
64
71
]
65
72
66
73
@@ -201,6 +208,21 @@ def test_empty_post_uses_default_boolean_value(self):
201
208
assert response .status_code == 200
202
209
assert response .data == {"flag" : True }
203
210
211
+ def test_post_encodes_data_based_on_json_content_type (self ):
212
+ data = {'data' : True }
213
+ response = self .client .post (
214
+ '/post-json-view/' ,
215
+ data = data ,
216
+ content_type = 'application/json'
217
+ )
218
+
219
+ if django .VERSION < (2 , 1 ):
220
+ assert response .status_code == 400
221
+ assert response .data ['detail' ].code == 'parse_error'
222
+ else :
223
+ assert response .status_code == 200
224
+ assert response .data == data
225
+
204
226
205
227
class TestAPIRequestFactory (TestCase ):
206
228
def test_csrf_exempt_by_default (self ):
0 commit comments