Skip to content

Commit 7b3341a

Browse files
D3XRyan P Kilby
authored andcommitted
Added a failing test for #5582
1 parent 2e5d4e9 commit 7b3341a

File tree

1 file changed

+43
-3
lines changed

1 file changed

+43
-3
lines changed

tests/test_middleware.py

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

56
from rest_framework.authentication import TokenAuthentication
67
from rest_framework.authtoken.models import Token
8+
from rest_framework.request import is_form_media_type
9+
from rest_framework.response import Response
710
from rest_framework.test import APITestCase
811
from rest_framework.views import APIView
912

13+
14+
class PostView(APIView):
15+
def post(self, request):
16+
return Response(data=request.data, status=200)
17+
18+
1019
urlpatterns = [
11-
url(r'^$', APIView.as_view(authentication_classes=(TokenAuthentication,))),
20+
url(r'^auth$', APIView.as_view(authentication_classes=(TokenAuthentication,))),
21+
url(r'^post$', PostView.as_view()),
1222
]
1323

1424

15-
class MyMiddleware(object):
25+
class RequestUserMiddleware(object):
1626
def __init__(self, get_response):
1727
self.get_response = get_response
1828

@@ -24,13 +34,43 @@ def __call__(self, request):
2434
return response
2535

2636

37+
class RequestPOSTMiddleware(object):
38+
def __init__(self, get_response):
39+
self.get_response = get_response
40+
41+
def __call__(self, request):
42+
assert isinstance(request, HttpRequest)
43+
44+
# Parse body with underlying Django request
45+
request.body
46+
47+
# Process request with DRF view
48+
response = self.get_response(request)
49+
50+
# Ensure request.POST is set as appropriate
51+
if is_form_media_type(request.content_type):
52+
assert request.POST == {'foo': ['bar']}
53+
else:
54+
assert request.POST == {}
55+
56+
return response
57+
58+
2759
@override_settings(ROOT_URLCONF='tests.test_middleware')
2860
class TestMiddleware(APITestCase):
2961

30-
@override_settings(MIDDLEWARE=('tests.test_middleware.MyMiddleware',))
62+
@override_settings(MIDDLEWARE=('tests.test_middleware.RequestUserMiddleware',))
3163
def test_middleware_can_access_user_when_processing_response(self):
3264
user = User.objects.create_user('john', '[email protected]', 'password')
3365
key = 'abcd1234'
3466
Token.objects.create(key=key, user=user)
3567

3668
self.client.get('/auth', HTTP_AUTHORIZATION='Token %s' % key)
69+
70+
@override_settings(MIDDLEWARE=('tests.test_middleware.RequestPOSTMiddleware',))
71+
def test_middleware_can_access_request_post_when_processing_response(self):
72+
response = self.client.post('/post', {'foo': 'bar'})
73+
assert response.status_code == 200
74+
75+
response = self.client.post('/post', {'foo': 'bar'}, format='json')
76+
assert response.status_code == 200

0 commit comments

Comments
 (0)