Added test for multipart, non form-data POST.

Closes #9054. The bug itself is no longer present.
This commit is contained in:
Senko Rasic 2013-05-18 12:26:38 +02:00 committed by Aymeric Augustin
parent 7b85ef9dfb
commit 566e284c56
1 changed files with 25 additions and 2 deletions

View File

@ -503,9 +503,9 @@ class RequestsTests(SimpleTestCase):
})
self.assertEqual(request.POST, {'key': ['España']})
def test_body_after_POST_multipart(self):
def test_body_after_POST_multipart_form_data(self):
"""
Reading body after parsing multipart is not allowed
Reading body after parsing multipart/form-data is not allowed
"""
# Because multipart is used for large amounts fo data i.e. file uploads,
# we don't want the data held in memory twice, and we don't want to
@ -524,6 +524,29 @@ class RequestsTests(SimpleTestCase):
self.assertEqual(request.POST, {'name': ['value']})
self.assertRaises(Exception, lambda: request.body)
def test_body_after_POST_multipart_related(self):
"""
Reading body after parsing multipart that isn't form-data is allowed
"""
# Ticket #9054
# There are cases in which the multipart data is related instead of
# being a binary upload, in which case it should still be accessible
# via body.
payload_data = "\r\n".join([
'--boundary',
'Content-ID: id; name="name"',
'',
'value',
'--boundary--'
''])
payload = FakePayload(payload_data)
request = WSGIRequest({'REQUEST_METHOD': 'POST',
'CONTENT_TYPE': 'multipart/related; boundary=boundary',
'CONTENT_LENGTH': len(payload),
'wsgi.input': payload})
self.assertEqual(request.POST, {})
self.assertEqual(request.body, payload_data)
def test_POST_multipart_with_content_length_zero(self):
"""
Multipart POST requests with Content-Length >= 0 are valid and need to be handled.