from __future__ import annotations from dataclasses import dataclass from typing import Optional from src.megasniff import SchemaInflatorGenerator def test_basic_constructor(): class A: def __init__(self, a: int): self.a = a infl = SchemaInflatorGenerator() fn = infl.schema_to_generator(A) a = fn({'a': 42}) assert a.a == 42 @dataclass class CircA: b: CircB @dataclass class CircB: a: CircA | None def test_circular(): infl = SchemaInflatorGenerator() fn = infl.schema_to_generator(CircA) a = fn({'b': {'a': None}}) return isinstance(a.b, CircB) def test_optional(): @dataclass class C: a: Optional[int] = None infl = SchemaInflatorGenerator() fn = infl.schema_to_generator(C) c = fn({}) assert c.a is None