@@ -38,6 +38,31 @@ def dataclass_param(request):
38
38
return request .param
39
39
40
40
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
+
41
66
def test_simple (module ):
42
67
"""Load dict into a dataclass instance."""
43
68
@@ -222,7 +247,7 @@ class A:
222
247
assert attr .fields (A ).x .metadata ["foo" ] == 1
223
248
224
249
225
- def test_union (module ):
250
+ def test_union (module , dump_load_assert ):
226
251
"""Deserialize one of several types."""
227
252
228
253
@module .dataclass
@@ -233,18 +258,14 @@ class A:
233
258
234
259
dumped = {"x" : "X" }
235
260
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 )
239
262
240
263
dumped = {"x" : 5 }
241
264
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 )
245
266
246
267
247
- def test_enum (module ):
268
+ def test_enum (module , dump_load_assert ):
248
269
"""Deserialize an enum object."""
249
270
250
271
class Color (enum .Enum ):
@@ -258,11 +279,11 @@ class A:
258
279
schema = desert .schema_class (A )()
259
280
dumped = {"x" : "RED" }
260
281
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 )
263
284
264
285
265
- def test_tuple (module ):
286
+ def test_tuple (module , dump_load_assert ):
266
287
"""Round trip a tuple.
267
288
268
289
The tuple is converted to list only for dumps(), not during dump().
@@ -276,9 +297,7 @@ class A:
276
297
dumped = {"x" : (1 , False )}
277
298
loaded = A (x = (1 , False ))
278
299
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 )
282
301
283
302
284
303
def test_attr_factory ():
@@ -303,7 +322,7 @@ class A:
303
322
assert data == A ([])
304
323
305
324
306
- def test_newtype (module ):
325
+ def test_newtype (module , dump_load_assert ):
307
326
"""An instance of NewType delegates to its supertype."""
308
327
309
328
MyInt = t .NewType ("MyInt" , int )
@@ -316,8 +335,7 @@ class A:
316
335
dumped = {"x" : 1 }
317
336
loaded = A (x = 1 )
318
337
319
- assert schema .load (dumped ) == loaded
320
- assert schema .dump (loaded ) == dumped
338
+ dump_load_assert (schema = schema , loaded = loaded , dumped = dumped )
321
339
322
340
323
341
@pytest .mark .xfail (
@@ -327,7 +345,7 @@ class A:
327
345
+ "See https://github.com/lovasoa/marshmallow_dataclass/issues/13"
328
346
),
329
347
)
330
- def test_forward_reference (module ):
348
+ def test_forward_reference (module , dump_load_assert ):
331
349
"""Build schemas from classes that are defined below their containing class."""
332
350
333
351
@module .dataclass
@@ -342,8 +360,7 @@ class B:
342
360
dumped = {"x" : {"y" : 1 }}
343
361
loaded = A ((B (1 )))
344
362
345
- assert schema .load (dumped ) == loaded
346
- assert schema .dump (loaded ) == dumped
363
+ dump_load_assert (schema = schema , loaded = loaded , dumped = dumped )
347
364
348
365
349
366
def test_forward_reference_module_scope ():
@@ -428,9 +445,13 @@ class A:
428
445
dumped = {"x" : (1 , 2 , 3 )}
429
446
loaded = A (x = (1 , 2 , 3 ))
430
447
448
+ actually_dumped = {"x" : [1 , 2 , 3 ]}
449
+
450
+ # TODO: how to use dump_load_assert?
431
451
assert schema .load (dumped ) == loaded
432
- assert schema .dump (loaded ) == { "x" : [ 1 , 2 , 3 ]}
452
+ assert schema .dump (loaded ) == actually_dumped
433
453
assert schema .loads (schema .dumps (loaded )) == loaded
454
+ assert schema .dump (schema .load (actually_dumped )) == actually_dumped
434
455
435
456
436
457
def test_only ():
0 commit comments