Skip to content

Commit

Permalink
added tests and code for type validation during load (#2)
Browse files Browse the repository at this point in the history
  • Loading branch information
seanshahkarami authored Dec 1, 2022
1 parent b53d1e8 commit 235083f
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 0 deletions.
14 changes: 14 additions & 0 deletions src/wagglemsg/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,23 @@ def load(body: bytes) -> Message:
"""dump deserializes a Message object."""
data = json.loads(body)

# use default empty dict
if "meta" not in data:
data["meta"] = {}

if data.get("enc") == "b64":
data["val"] = base64.b64decode(data["val"])

# check data types
if not isinstance(data["name"], str):
raise TypeError("name must have type str")

if not isinstance(data["ts"], int):
raise TypeError("ts must have type int")

if not isinstance(data["meta"], dict):
raise TypeError("meta must have type dict[str, str]")

return Message(
name=data["name"],
value=data["val"],
Expand Down
12 changes: 12 additions & 0 deletions tests/test_wagglemsg.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,18 @@

class TestMain(unittest.TestCase):

def test_meta_default(self):
msg = wagglemsg.load('{"name":"env.temperature","val":0,"ts":0}')
self.assertEqual(msg.meta, {})

def test_validate_types(self):
with self.assertRaises(TypeError):
wagglemsg.load('{"name":null,"val":0,"ts":0}')
with self.assertRaises(TypeError):
wagglemsg.load('{"name":"env.temperature","val":0,"ts":"123"}')
with self.assertRaises(TypeError):
wagglemsg.load('{"name":"env.temperature","val":0,"ts":0,"meta":null}')

def test_fail(self):
test_cases = [
wagglemsg.Message(
Expand Down

0 comments on commit 235083f

Please sign in to comment.