@@ -38,6 +38,31 @@ def dataclass_param(request):
3838 return request .param
3939
4040
41+ def _load_assert (schema , loaded , dumped ):
42+ assert schema .load (dumped ) == loaded
43+
44+
45+ def _dump_assert (schema , loaded , dumped ):
46+ assert schema .dump (loaded ) == dumped
47+
48+
49+ def _dump_load_assert (schema , loaded , dumped ):
50+ assert schema .loads (schema .dumps (loaded )) == loaded
51+
52+
53+ def _load_dump_assert (schema , loaded , dumped ):
54+ assert schema .dump (schema .load (dumped )) == dumped
55+
56+
57+ @pytest .fixture (
58+ name = 'dump_load_assert' ,
59+ params = [_load_assert , _dump_assert , _dump_load_assert , _load_dump_assert ],
60+ ids = ['load' , 'dump' , 'dump load' , 'load dump' ],
61+ )
62+ def _dump_load_assert (request ):
63+ return request .param
64+
65+
4166def test_simple (module ):
4267 """Load dict into a dataclass instance."""
4368
@@ -222,7 +247,7 @@ class A:
222247 assert attr .fields (A ).x .metadata ["foo" ] == 1
223248
224249
225- def test_union (module ):
250+ def test_union (module , dump_load_assert ):
226251 """Deserialize one of several types."""
227252
228253 @module .dataclass
@@ -233,18 +258,14 @@ class A:
233258
234259 dumped = {"x" : "X" }
235260 loaded = A ("X" )
236- assert schema .load (dumped ) == loaded
237-
238- assert schema .dump (loaded ) == dumped
261+ dump_load_assert (schema = schema , loaded = loaded , dumped = dumped )
239262
240263 dumped = {"x" : 5 }
241264 loaded = A (5 )
242-
243- assert schema .load (dumped ) == loaded
244- assert schema .dump (loaded ) == dumped
265+ dump_load_assert (schema = schema , loaded = loaded , dumped = dumped )
245266
246267
247- def test_enum (module ):
268+ def test_enum (module , dump_load_assert ):
248269 """Deserialize an enum object."""
249270
250271 class Color (enum .Enum ):
@@ -258,11 +279,11 @@ class A:
258279 schema = desert .schema_class (A )()
259280 dumped = {"x" : "RED" }
260281 loaded = A (Color .RED )
261- assert schema . load ( dumped ) == loaded
262- assert schema . dump ( loaded ) == dumped
282+
283+ dump_load_assert ( schema = schema , loaded = loaded , dumped = dumped )
263284
264285
265- def test_tuple (module ):
286+ def test_tuple (module , dump_load_assert ):
266287 """Round trip a tuple.
267288
268289 The tuple is converted to list only for dumps(), not during dump().
@@ -276,9 +297,7 @@ class A:
276297 dumped = {"x" : (1 , False )}
277298 loaded = A (x = (1 , False ))
278299
279- assert schema .load (dumped ) == loaded
280- assert schema .dump (loaded ) == dumped
281- assert schema .loads (schema .dumps (loaded )) == loaded
300+ dump_load_assert (schema = schema , loaded = loaded , dumped = dumped )
282301
283302
284303def test_attr_factory ():
@@ -303,7 +322,7 @@ class A:
303322 assert data == A ([])
304323
305324
306- def test_newtype (module ):
325+ def test_newtype (module , dump_load_assert ):
307326 """An instance of NewType delegates to its supertype."""
308327
309328 MyInt = t .NewType ("MyInt" , int )
@@ -316,8 +335,7 @@ class A:
316335 dumped = {"x" : 1 }
317336 loaded = A (x = 1 )
318337
319- assert schema .load (dumped ) == loaded
320- assert schema .dump (loaded ) == dumped
338+ dump_load_assert (schema = schema , loaded = loaded , dumped = dumped )
321339
322340
323341@pytest .mark .xfail (
@@ -327,7 +345,7 @@ class A:
327345 + "See https://github.com/lovasoa/marshmallow_dataclass/issues/13"
328346 ),
329347)
330- def test_forward_reference (module ):
348+ def test_forward_reference (module , dump_load_assert ):
331349 """Build schemas from classes that are defined below their containing class."""
332350
333351 @module .dataclass
@@ -342,8 +360,7 @@ class B:
342360 dumped = {"x" : {"y" : 1 }}
343361 loaded = A ((B (1 )))
344362
345- assert schema .load (dumped ) == loaded
346- assert schema .dump (loaded ) == dumped
363+ dump_load_assert (schema = schema , loaded = loaded , dumped = dumped )
347364
348365
349366def test_forward_reference_module_scope ():
@@ -428,9 +445,13 @@ class A:
428445 dumped = {"x" : (1 , 2 , 3 )}
429446 loaded = A (x = (1 , 2 , 3 ))
430447
448+ actually_dumped = {"x" : [1 , 2 , 3 ]}
449+
450+ # TODO: how to use dump_load_assert?
431451 assert schema .load (dumped ) == loaded
432- assert schema .dump (loaded ) == { "x" : [ 1 , 2 , 3 ]}
452+ assert schema .dump (loaded ) == actually_dumped
433453 assert schema .loads (schema .dumps (loaded )) == loaded
454+ assert schema .dump (schema .load (actually_dumped )) == actually_dumped
434455
435456
436457def test_only ():
0 commit comments