diff --git a/tests/test_decoding.py b/tests/test_decoding.py index 340ac60..dcb8285 100644 --- a/tests/test_decoding.py +++ b/tests/test_decoding.py @@ -54,6 +54,12 @@ class GenericJson(Generic[T1, T2]): t2: T2 +@dataclass(frozen=True) +class RecursiveJson: + data: str + more: Optional["RecursiveJson"] + + def test_can_decode_str() -> None: json = "string" assert typedjson.decode(str, json) == json @@ -214,6 +220,17 @@ def test_can_decode_union() -> None: ) +def test_can_decode_recursive() -> None: + json_recursive = {"data": "foo", "more": {"data": "bar", "more": {"data": "baz"}}} + + expectation = RecursiveJson( + data="foo", + more=RecursiveJson(data="bar", more=RecursiveJson(data="baz", more=None)), + ) + + assert typedjson.decode(RecursiveJson, json_recursive) == expectation + + def test_cannot_decode_with_wrong_type() -> None: json = True assert typedjson.decode(str, json) == DecodingError(TypeMismatch(()))