Skip to content

Commit 542e5ed

Browse files
committed
missing serialization test from prev git
Signed-off-by: Filinto Duran <[email protected]>
1 parent 94d593e commit 542e5ed

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
from collections import namedtuple
2+
from dataclasses import dataclass
3+
from types import SimpleNamespace
4+
5+
from durabletask.internal.shared import AUTO_SERIALIZED, from_json, to_json
6+
7+
8+
@dataclass
9+
class SamplePayload:
10+
count: int
11+
name: str
12+
13+
14+
def test_to_json_roundtrip_dataclass():
15+
payload = SamplePayload(count=5, name="widgets")
16+
encoded = to_json(payload)
17+
18+
assert AUTO_SERIALIZED in encoded
19+
20+
decoded = from_json(encoded)
21+
assert isinstance(decoded, SimpleNamespace)
22+
assert decoded.count == 5
23+
assert decoded.name == "widgets"
24+
25+
26+
def test_to_json_roundtrip_simplenamespace():
27+
payload = SimpleNamespace(foo="bar", baz=42)
28+
encoded = to_json(payload)
29+
30+
assert AUTO_SERIALIZED in encoded
31+
32+
decoded = from_json(encoded)
33+
assert isinstance(decoded, SimpleNamespace)
34+
assert decoded.foo == "bar"
35+
assert decoded.baz == 42
36+
37+
38+
def test_to_json_plain_dict_passthrough():
39+
payload = {"foo": "bar", "baz": 1}
40+
encoded = to_json(payload)
41+
42+
assert AUTO_SERIALIZED not in encoded
43+
44+
decoded = from_json(encoded)
45+
assert isinstance(decoded, dict)
46+
assert decoded == {"foo": "bar", "baz": 1}
47+
48+
49+
def test_to_json_namedtuple_roundtrip():
50+
Point = namedtuple("Point", ["x", "y"])
51+
payload = Point(3, 4)
52+
encoded = to_json(payload)
53+
54+
assert AUTO_SERIALIZED in encoded
55+
56+
decoded = from_json(encoded)
57+
assert isinstance(decoded, SimpleNamespace)
58+
assert decoded.x == 3
59+
assert decoded.y == 4
60+
61+
62+
def test_to_json_nested_dataclass_collection():
63+
payload = [
64+
SamplePayload(count=1, name="first"),
65+
SamplePayload(count=2, name="second"),
66+
]
67+
encoded = to_json(payload)
68+
69+
assert encoded.count(AUTO_SERIALIZED) >= 2
70+
71+
decoded = from_json(encoded)
72+
assert isinstance(decoded, list)
73+
assert [item.count for item in decoded] == [1, 2]
74+
assert [item.name for item in decoded] == ["first", "second"]

0 commit comments

Comments
 (0)