Skip to content

Commit 235083f

Browse files
added tests and code for type validation during load (#2)
1 parent b53d1e8 commit 235083f

File tree

2 files changed

+26
-0
lines changed

2 files changed

+26
-0
lines changed

src/wagglemsg/__init__.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,23 @@ def load(body: bytes) -> Message:
3434
"""dump deserializes a Message object."""
3535
data = json.loads(body)
3636

37+
# use default empty dict
38+
if "meta" not in data:
39+
data["meta"] = {}
40+
3741
if data.get("enc") == "b64":
3842
data["val"] = base64.b64decode(data["val"])
3943

44+
# check data types
45+
if not isinstance(data["name"], str):
46+
raise TypeError("name must have type str")
47+
48+
if not isinstance(data["ts"], int):
49+
raise TypeError("ts must have type int")
50+
51+
if not isinstance(data["meta"], dict):
52+
raise TypeError("meta must have type dict[str, str]")
53+
4054
return Message(
4155
name=data["name"],
4256
value=data["val"],

tests/test_wagglemsg.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,18 @@
44

55
class TestMain(unittest.TestCase):
66

7+
def test_meta_default(self):
8+
msg = wagglemsg.load('{"name":"env.temperature","val":0,"ts":0}')
9+
self.assertEqual(msg.meta, {})
10+
11+
def test_validate_types(self):
12+
with self.assertRaises(TypeError):
13+
wagglemsg.load('{"name":null,"val":0,"ts":0}')
14+
with self.assertRaises(TypeError):
15+
wagglemsg.load('{"name":"env.temperature","val":0,"ts":"123"}')
16+
with self.assertRaises(TypeError):
17+
wagglemsg.load('{"name":"env.temperature","val":0,"ts":0,"meta":null}')
18+
719
def test_fail(self):
820
test_cases = [
921
wagglemsg.Message(

0 commit comments

Comments
 (0)