Added MultiPartParser tests for parsing base64-encoded fields.

This commit is contained in:
benebsiny 2023-06-06 16:31:49 +08:00 committed by Mariusz Felisiak
parent 094b0bea2c
commit 7cc138a58f
1 changed files with 51 additions and 1 deletions

View File

@ -14,7 +14,7 @@ from django.http import (
from django.http.multipartparser import MultiPartParserError
from django.http.request import split_domain_port
from django.test import RequestFactory, SimpleTestCase, override_settings
from django.test.client import FakePayload
from django.test.client import BOUNDARY, MULTIPART_CONTENT, FakePayload
class RequestsTests(SimpleTestCase):
@ -537,6 +537,56 @@ class RequestsTests(SimpleTestCase):
self.assertEqual(request.read(1), b"n")
self.assertEqual(request.POST, {"name": ["value"]})
def test_multipart_post_field_with_base64(self):
payload = FakePayload(
"\r\n".join(
[
f"--{BOUNDARY}",
'Content-Disposition: form-data; name="name"',
"Content-Transfer-Encoding: base64",
"",
"dmFsdWU=",
f"--{BOUNDARY}--",
"",
]
)
)
request = WSGIRequest(
{
"REQUEST_METHOD": "POST",
"CONTENT_TYPE": MULTIPART_CONTENT,
"CONTENT_LENGTH": len(payload),
"wsgi.input": payload,
}
)
request.body # evaluate
self.assertEqual(request.POST, {"name": ["value"]})
def test_multipart_post_field_with_invalid_base64(self):
payload = FakePayload(
"\r\n".join(
[
f"--{BOUNDARY}",
'Content-Disposition: form-data; name="name"',
"Content-Transfer-Encoding: base64",
"",
"123",
f"--{BOUNDARY}--",
"",
]
)
)
request = WSGIRequest(
{
"REQUEST_METHOD": "POST",
"CONTENT_TYPE": MULTIPART_CONTENT,
"CONTENT_LENGTH": len(payload),
"wsgi.input": payload,
}
)
request.body # evaluate
self.assertEqual(request.POST, {"name": ["123"]})
def test_POST_after_body_read_and_stream_read_multipart(self):
"""
POST should be populated even if body is read first, and then