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', 'john@example.com', '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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy