Skip to content

Commit 4deba4b

Browse files
committed
parametrize tests against load/dump/roundtrip assertions
1 parent c7ee792 commit 4deba4b

File tree

1 file changed

+42
-21
lines changed

1 file changed

+42
-21
lines changed

tests/test_make.py

Lines changed: 42 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
4166
def 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

284303
def 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

349366
def 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

436457
def test_only():

0 commit comments

Comments
 (0)