Skip to content

Commit aa6a4c4

Browse files
committed
Added a test to show the interface on Django's request.POST changes for JSON requests.
1 parent 7583b3a commit aa6a4c4

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed

tests/test_middleware.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
from django.conf.urls import url
22
from django.contrib.auth.models import User
3+
from django.http import HttpResponse
34
from django.test import override_settings
45

56
from rest_framework.authentication import TokenAuthentication
67
from rest_framework.authtoken.models import Token
78
from rest_framework.response import Response
89
from rest_framework.test import APITestCase
10+
from rest_framework.utils import json
911
from rest_framework.views import APIView
1012

1113

@@ -14,9 +16,14 @@ def post(self, request):
1416
return Response(data=request.data, status=200)
1517

1618

19+
def regular_view(request):
20+
return HttpResponse()
21+
22+
1723
urlpatterns = [
1824
url(r'^auth$', APIView.as_view(authentication_classes=(TokenAuthentication,))),
1925
url(r'^post$', PostView.as_view()),
26+
url(r'^regular$', regular_view),
2027
]
2128

2229

@@ -44,6 +51,17 @@ def __call__(self, request):
4451
return response
4552

4653

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+
4765
@override_settings(ROOT_URLCONF='tests.test_middleware')
4866
class TestMiddleware(APITestCase):
4967

@@ -59,3 +77,13 @@ def test_middleware_can_access_user_when_processing_response(self):
5977
def test_middleware_can_access_request_post_when_processing_response(self):
6078
response = self.client.post('/post', {'foo': 'bar'})
6179
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

Comments
 (0)