1+ from email .mime .multipart import MIMEMultipart
2+ from email .mime .nonmultipart import MIMENonMultipart
3+
14import pytest
25
36from openapi_core .deserializing .exceptions import DeserializeError
710from openapi_core .schema .media_types .models import MediaType
811
912
13+ class MIMEFormdata (MIMENonMultipart ):
14+ def __init__ (self , keyname , * args , ** kwargs ):
15+ super (MIMEFormdata , self ).__init__ (* args , ** kwargs )
16+ self .add_header (
17+ "Content-Disposition" , "form-data; name=\" %s\" " % keyname )
18+
19+
20+ def encode_multipart_formdata (fields ):
21+ m = MIMEMultipart ("form-data" )
22+
23+ for field , value in fields .items ():
24+ data = MIMEFormdata (field , "text" , "plain" )
25+ data .set_payload (value )
26+ m .attach (data )
27+
28+ return m
29+
30+
1031class TestMediaTypeDeserializer (object ):
1132
1233 @pytest .fixture
@@ -31,22 +52,39 @@ def test_json_empty_object(self, deserializer_factory):
3152
3253 assert result == {}
3354
34- def test_form_urlencoded_empty (self , deserializer_factory ):
55+ def test_urlencoded_form_empty (self , deserializer_factory ):
3556 media_type = MediaType ('application/x-www-form-urlencoded' )
3657 value = ''
3758
3859 result = deserializer_factory (media_type )(value )
3960
4061 assert result == {}
4162
42- def test_form_urlencoded_simple (self , deserializer_factory ):
63+ def test_urlencoded_form_simple (self , deserializer_factory ):
4364 media_type = MediaType ('application/x-www-form-urlencoded' )
4465 value = 'param1=test'
4566
4667 result = deserializer_factory (media_type )(value )
4768
4869 assert result == {'param1' : 'test' }
4970
71+ @pytest .mark .parametrize ('value' , [b'' , '' ])
72+ def test_data_form_empty (self , deserializer_factory , value ):
73+ media_type = MediaType ('multipart/form-data' )
74+
75+ result = deserializer_factory (media_type )(value )
76+
77+ assert result == {}
78+
79+ def test_data_form_simple (self , deserializer_factory ):
80+ media_type = MediaType ('multipart/form-data' )
81+ formdata = encode_multipart_formdata ({'param1' : 'test' })
82+ value = str (formdata )
83+
84+ result = deserializer_factory (media_type )(value )
85+
86+ assert result == {'param1' : b'test' }
87+
5088 def test_custom_simple (self , deserializer_factory ):
5189 custom_mimetype = 'application/custom'
5290 media_type = MediaType (custom_mimetype )
0 commit comments