Files
megasniff/tests/test_basic.py

63 lines
1.1 KiB
Python

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_inflator(A)
a = fn({'a': 42})
assert a.a == 42
def test_unions():
@dataclass
class A:
a: int | str
infl = SchemaInflatorGenerator()
fn = infl.schema_to_inflator(A)
a = fn({'a': 42})
assert a.a == 42
a = fn({'a': '42'})
assert a.a == 42
a = fn({'a': '42a'})
assert a.a == '42a'
@dataclass
class CircA:
b: CircB
@dataclass
class CircB:
a: CircA | None
def test_circular():
infl = SchemaInflatorGenerator()
fn = infl.schema_to_inflator(CircA)
a = fn({'b': {'a': None}})
assert isinstance(a.b, CircB)
def test_optional():
@dataclass
class C:
a: Optional[int] = None
infl = SchemaInflatorGenerator()
fn = infl.schema_to_inflator(C)
c = fn({})
assert c.a is None