Create deflator strict mode and explicit casts flags with tests and default universal fallback unwrapper
This commit is contained in:
94
tests/test_explicit_cast_deflator.py
Normal file
94
tests/test_explicit_cast_deflator.py
Normal file
@@ -0,0 +1,94 @@
|
||||
from dataclasses import dataclass
|
||||
|
||||
import pytest
|
||||
|
||||
from megasniff import SchemaDeflatorGenerator
|
||||
from megasniff.exceptions import FieldValidationException
|
||||
|
||||
|
||||
def test_global_explicit_casts_basic():
|
||||
class A:
|
||||
a: int
|
||||
|
||||
def __init__(self, a):
|
||||
self.a = a
|
||||
|
||||
defl = SchemaDeflatorGenerator(explicit_casts=True)
|
||||
fn = defl.schema_to_deflator(A)
|
||||
a = fn(A(42))
|
||||
|
||||
assert a['a'] == 42
|
||||
|
||||
a = fn(A(42.0))
|
||||
assert a['a'] == 42
|
||||
|
||||
a = fn(A('42'))
|
||||
assert a['a'] == 42
|
||||
|
||||
with pytest.raises(TypeError):
|
||||
fn(A(['42']))
|
||||
|
||||
|
||||
def test_global_explicit_casts_basic_override():
|
||||
class A:
|
||||
a: int
|
||||
|
||||
def __init__(self, a):
|
||||
self.a = a
|
||||
|
||||
defl = SchemaDeflatorGenerator(explicit_casts=False)
|
||||
fn = defl.schema_to_deflator(A, explicit_casts_override=True)
|
||||
a = fn(A(42))
|
||||
|
||||
assert a['a'] == 42
|
||||
|
||||
a = fn(A(42.0))
|
||||
assert a['a'] == 42
|
||||
|
||||
a = fn(A('42'))
|
||||
assert a['a'] == 42
|
||||
|
||||
with pytest.raises(TypeError):
|
||||
fn(A(['42']))
|
||||
|
||||
|
||||
def test_global_explicit_casts_list():
|
||||
@dataclass
|
||||
class A:
|
||||
a: list[int]
|
||||
|
||||
defl = SchemaDeflatorGenerator(explicit_casts=True)
|
||||
fn = defl.schema_to_deflator(A)
|
||||
a = fn(A([42]))
|
||||
|
||||
assert a['a'] == [42]
|
||||
|
||||
a = fn(A([42.0, 42]))
|
||||
assert len(a['a']) == 2
|
||||
assert a['a'][0] == 42
|
||||
assert a['a'][1] == 42
|
||||
|
||||
|
||||
def test_global_explicit_casts_circular():
|
||||
@dataclass
|
||||
class A:
|
||||
a: list[int]
|
||||
|
||||
@dataclass
|
||||
class B:
|
||||
b: list[A | int]
|
||||
|
||||
defl = SchemaDeflatorGenerator(explicit_casts=True)
|
||||
fn = defl.schema_to_deflator(B)
|
||||
b = fn(B([A([]), 42]))
|
||||
|
||||
assert len(b['b']) == 2
|
||||
assert isinstance(b['b'][0], dict)
|
||||
assert len(b['b'][0]['a']) == 0
|
||||
assert isinstance(b['b'][1], int)
|
||||
|
||||
b = fn(B([42.0]))
|
||||
assert b['b'][0] == 42
|
||||
|
||||
b = fn(B([A([1.1])]))
|
||||
assert b['b'][0]['a'][0] == 1
|
||||
Reference in New Issue
Block a user