Skip to content

Commit 3566737

Browse files
committed
add tests for deserializer
1 parent 7ca7693 commit 3566737

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
from typing import Any, Dict, Optional
2+
3+
import pytest
4+
5+
from aws_lambda_powertools.shared.dynamodb_deserializer import TypeDeserializer
6+
7+
8+
class DeserialiserModel:
9+
def __init__(self, data: dict):
10+
self._data = data
11+
self._deserializer = TypeDeserializer()
12+
13+
def _deserialize_dynamodb_dict(self) -> Optional[Dict[str, Any]]:
14+
if self._data is None:
15+
return None
16+
17+
return {k: self._deserializer.deserialize(v) for k, v in self._data.items()}
18+
19+
@property
20+
def data(self) -> Optional[Dict[str, Any]]:
21+
"""The primary key attribute(s) for the DynamoDB item that was modified."""
22+
return self._deserialize_dynamodb_dict()
23+
24+
25+
def test_deserializer():
26+
model = DeserialiserModel(
27+
{
28+
"Id": {"S": "Id-123"},
29+
"Name": {"S": "John Doe"},
30+
"ZipCode": {"N": 12345},
31+
"Things": {"L": [{"N": 0}, {"N": 1}, {"N": 2}, {"N": 3}]},
32+
"MoreThings": {"M": {"a": {"S": "foo"}, "b": {"S": "bar"}}},
33+
},
34+
)
35+
36+
assert model.data.get("Id") == "Id-123"
37+
assert model.data.get("Name") == "John Doe"
38+
assert model.data.get("ZipCode") == 12345
39+
assert model.data.get("Things") == [0, 1, 2, 3]
40+
assert model.data.get("MoreThings") == {"a": "foo", "b": "bar"}
41+
42+
43+
def test_deserializer_error():
44+
model = DeserialiserModel(
45+
{
46+
"Id": {"X": None},
47+
},
48+
)
49+
50+
with pytest.raises(TypeError):
51+
model.data.get("Id")

0 commit comments

Comments
 (0)