1
1
from django .conf .urls import url
2
2
from django .contrib .auth .models import User
3
+ from django .http import HttpResponse
3
4
from django .test import override_settings
4
5
5
6
from rest_framework .authentication import TokenAuthentication
6
7
from rest_framework .authtoken .models import Token
7
8
from rest_framework .response import Response
8
9
from rest_framework .test import APITestCase
10
+ from rest_framework .utils import json
9
11
from rest_framework .views import APIView
10
12
11
13
@@ -14,9 +16,14 @@ def post(self, request):
14
16
return Response (data = request .data , status = 200 )
15
17
16
18
19
+ def regular_view (request ):
20
+ return HttpResponse ()
21
+
22
+
17
23
urlpatterns = [
18
24
url (r'^auth$' , APIView .as_view (authentication_classes = (TokenAuthentication ,))),
19
25
url (r'^post$' , PostView .as_view ()),
26
+ url (r'^regular$' , regular_view ),
20
27
]
21
28
22
29
@@ -44,6 +51,17 @@ def __call__(self, request):
44
51
return response
45
52
46
53
54
+ class RequestJSONMiddleware (object ):
55
+ def __init__ (self , get_response ):
56
+ self .get_response = get_response
57
+
58
+ def __call__ (self , request ):
59
+ response = self .get_response (request )
60
+ assert list (request .POST .keys ()) == []
61
+
62
+ return response
63
+
64
+
47
65
@override_settings (ROOT_URLCONF = 'tests.test_middleware' )
48
66
class TestMiddleware (APITestCase ):
49
67
@@ -59,3 +77,13 @@ def test_middleware_can_access_user_when_processing_response(self):
59
77
def test_middleware_can_access_request_post_when_processing_response (self ):
60
78
response = self .client .post ('/post' , {'foo' : 'bar' })
61
79
assert response .status_code == 200
80
+
81
+ @override_settings (MIDDLEWARE = ('tests.test_middleware.RequestJSONMiddleware' ,))
82
+ def test_original_request_post_is_not_populated_on_json_requests (self ):
83
+ # regular view
84
+ response = self .client .post ('/regular' , json .dumps ({'foo' : 'bar' }), content_type = 'application/json' )
85
+ assert response .status_code == 200
86
+
87
+ # drf
88
+ with self .assertRaises (AssertionError ):
89
+ response = self .client .post ('/post' , json .dumps ({'foo' : 'bar' }), content_type = 'application/json' )
0 commit comments