Skip to content

Commit c3196d9

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

File tree

1 file changed

+45
-3
lines changed

1 file changed

+45
-3
lines changed

tests/test_middleware.py

Lines changed: 45 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,30 @@
1+
import json
2+
13
from django.conf.urls import url
24
from django.contrib.auth.models import User
5+
from django.http import HttpRequest
36
from django.test import override_settings
47

58
from rest_framework.authentication import TokenAuthentication
69
from rest_framework.authtoken.models import Token
10+
from rest_framework.request import is_form_media_type
11+
from rest_framework.response import Response
712
from rest_framework.test import APITestCase
813
from rest_framework.views import APIView
914

15+
16+
class PostView(APIView):
17+
def post(self, request):
18+
return Response(data=request.data, status=200)
19+
20+
1021
urlpatterns = [
11-
url(r'^$', APIView.as_view(authentication_classes=(TokenAuthentication,))),
22+
url(r'^auth$', APIView.as_view(authentication_classes=(TokenAuthentication,))),
23+
url(r'^post$', PostView.as_view()),
1224
]
1325

1426

15-
class MyMiddleware(object):
27+
class RequestUserMiddleware(object):
1628
def __init__(self, get_response):
1729
self.get_response = get_response
1830

@@ -24,13 +36,43 @@ def __call__(self, request):
2436
return response
2537

2638

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

30-
@override_settings(MIDDLEWARE=('tests.test_middleware.MyMiddleware',))
64+
@override_settings(MIDDLEWARE=('tests.test_middleware.RequestUserMiddleware',))
3165
def test_middleware_can_access_user_when_processing_response(self):
3266
user = User.objects.create_user('john', '[email protected]', 'password')
3367
key = 'abcd1234'
3468
Token.objects.create(key=key, user=user)
3569

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

0 commit comments

Comments
 (0)