Commit 566e284c authored by Senko Rasic's avatar Senko Rasic Committed by Aymeric Augustin
Browse files

Added test for multipart, non form-data POST.

Closes #9054. The bug itself is no longer present.
parent 7b85ef9d
Loading
Loading
Loading
Loading
+25 −2
Original line number Diff line number Diff line
@@ -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.