-
Notifications
You must be signed in to change notification settings - Fork 420
/
Copy pathtest_json_encoder.py
60 lines (39 loc) · 1.41 KB
/
test_json_encoder.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
from __future__ import annotations
import decimal
import json
from dataclasses import dataclass
import pytest
from pydantic import BaseModel
from aws_lambda_powertools.shared.json_encoder import Encoder
def test_jsonencode_decimal():
result = json.dumps({"val": decimal.Decimal("8.5")}, cls=Encoder)
assert result == '{"val": "8.5"}'
def test_jsonencode_decimal_nan():
result = json.dumps({"val": decimal.Decimal("NaN")}, cls=Encoder)
assert result == '{"val": NaN}'
def test_jsonencode_calls_default():
class CustomClass:
pass
with pytest.raises(TypeError):
json.dumps({"val": CustomClass()}, cls=Encoder)
def test_json_encode_pydantic():
# GIVEN a Pydantic model
class Model(BaseModel):
data: dict
data = {"msg": "hello"}
model = Model(data=data)
# WHEN json.dumps use our custom Encoder
result = json.dumps(model, cls=Encoder)
# THEN we should serialize successfully; not raise a TypeError
assert result == json.dumps({"data": data}, cls=Encoder)
def test_json_encode_dataclasses():
# GIVEN a standard dataclass
@dataclass
class Model:
data: dict
data = {"msg": "hello"}
model = Model(data=data)
# WHEN json.dumps use our custom Encoder
result = json.dumps(model, cls=Encoder)
# THEN we should serialize successfully; not raise a TypeError
assert result == json.dumps({"data": data}, cls=Encoder)