@@ -25,7 +25,7 @@ def test_fields_dont_allow_none_by_default(self, FieldClass):
2525 with pytest .raises (ValidationError , match = "Field may not be null." ):
2626 field .deserialize (None )
2727
28- def test_allow_none_is_true_if_missing_is_true (self ):
28+ def test_allow_none_is_true_if_missing_is_none (self ):
2929 field = fields .Field (missing = None )
3030 assert field .allow_none is True
3131 field .deserialize (None ) is None
@@ -1338,6 +1338,53 @@ class AliasingUserSerializer(Schema):
13381338 assert result ["name" ] == "Mick"
13391339 assert result ["years" ] is None
13401340
1341+ # https://github.com/marshmallow-code/marshmallow/issues/713
1342+ @pytest .mark .parametrize (
1343+ ("missing" , "missing_values" , "input_data" , "expected" ),
1344+ [
1345+ (None , {None }, {"name" : None }, {"name" : None }),
1346+ (None , {None }, {"name" : "" }, {"name" : "" }),
1347+ (None , {"" }, {"name" : "" }, {"name" : None }),
1348+ (None , {"" }, {}, {"name" : None }),
1349+ ("" , {"" }, {"name" : "" }, {"name" : "" }),
1350+ ("" , {None }, {"name" : None }, {"name" : "" }),
1351+ ("" , {None }, {}, {"name" : "" }),
1352+ ],
1353+ )
1354+ def test_deserialize_with_custom_missing_values (
1355+ self , missing , missing_values , input_data , expected
1356+ ):
1357+ class ArtistSchema (Schema ):
1358+ name = fields .String (missing = missing , missing_values = missing_values )
1359+
1360+ schema = ArtistSchema ()
1361+ assert schema .load (input_data ) == expected
1362+
1363+ def test_deserialize_required_field_with_custom_missing_values (self ):
1364+ class ArtistSchema (Schema ):
1365+ album_names = fields .List (
1366+ fields .Str (), required = True , missing_values = ([], ())
1367+ )
1368+
1369+ with pytest .raises (ValidationError , match = "required" ):
1370+ ArtistSchema ().load ({"album_names" : []})
1371+
1372+ def test_setting_default_missing_values (self , monkeypatch ):
1373+ monkeypatch .setattr (fields .Field , "default_missing_values" , ("" ,))
1374+ monkeypatch .setattr (fields .List , "default_missing_values" , ([], ()))
1375+
1376+ class ArtistSchema (Schema ):
1377+ name = fields .String (missing = None )
1378+ dob = fields .DateTime (missing = None )
1379+ album_names = fields .List (fields .Str (), required = True )
1380+
1381+ schema = ArtistSchema ()
1382+ loaded = schema .load ({"name" : "" , "dob" : "" , "album_names" : ["Hunky Dory" ]})
1383+ assert loaded == {"name" : None , "dob" : None , "album_names" : ["Hunky Dory" ]}
1384+
1385+ with pytest .raises (ValidationError , match = "required" ):
1386+ assert schema .load ({"name" : "" , "dob" : "" , "album_names" : []})
1387+
13411388 def test_deserialization_raises_with_errors (self ):
13421389 bad_data = {"email" : "invalid-email" , "colors" : "burger" , "age" : - 1 }
13431390 v = Validator ()
0 commit comments