def test_simple_discriminated_union_valid(): x = {'type': 'dog', 'name': 'Fido'} serializer = create_serializer(Pet) assert serializer.load(x) == Dog(name='Fido') x = {'type': 'fish', 'color': 4} serializer = create_serializer(Pet) assert serializer.load(x) == Fish(color=4)
class DatetimeFromIsoformat(datetime): _str_serializer = create_serializer(str) @classmethod def __load__(cls, x: Any) -> datetime: x = cls._str_serializer.load(x) try: return datetime.fromisoformat(x) except ValueError as error: raise ValidationError(str(error)) @classmethod def __dump__(cls, x: datetime) -> Any: return x.isoformat()
def test_list_valid(x, schema): serializer = create_serializer(schema) loaded = serializer.load(x) assert serializer.load(x) == tuple([a for a in x]) assert serializer.dump(loaded) == [a for a in x]
def test_int_serializer_valid(x): serializer = create_serializer(int) assert serializer.load(x) == x assert serializer.dump(x) == x
def test_serializer_str_invalid(x): serializer = create_serializer(str) with pytest.raises(ValidationError): serializer.load(x)
def test_serializer_str_valid(x): serializer = create_serializer(str) assert serializer.load(x) == x assert serializer.dump(x) == x
def test_from_isoformat_invalid(x): serializer = create_serializer(DatetimeFromIsoformat) with pytest.raises(ValidationError): serializer.load(x)
def test_person_valid(): x = {'name': 'toto', 'age': 45} expected = Person(name='toto', age=45) serializer = create_serializer(Person) assert serializer.load(x) == expected assert serializer.dump(expected) == x
def test_list_less_basic_invalid(x, schema): serializer = create_serializer(List[schema]) with pytest.raises(ValidationError): serializer.load(x)
def test_none_serializer_valid(): serializer = create_serializer(None) assert serializer.load(None) is None assert serializer.dump(None) is None
def test_int_bool_valid(x): serializer = create_serializer(Union[int, bool]) assert serializer.load(x) == x
def test_list_int_tuple_float_invalid(x): serializer = create_serializer(Union[List[int], Tuple[float, float]]) with pytest.raises(ValidationError): serializer.load(x)
def test_list_int_tuple_float_valid(x): serializer = create_serializer(Union[List[int], Tuple[float, float]]) assert list(serializer.load(x)) == [a for a in x]
def test_int_bool_invalid(x): serializer = create_serializer(Union[int, bool]) with pytest.raises(ValidationError): serializer.load(x)
def test_simple_discriminated_union_invalid(x): serializer = create_serializer(Pet) with pytest.raises(ValidationError): serializer.load(x)
def test_tuple_less_basic_invalid(x, schema): serializer = create_serializer(schema) with pytest.raises(ValidationError): serializer.load(x)
def test_list_valid(x, schema): serializer = create_serializer(List[schema]) loaded = serializer.load(x) assert serializer.load(x) == [a for a in x] assert serializer.dump(loaded) == loaded
def test_none_serializer_invalid(x): serializer = create_serializer(None) with pytest.raises(ValidationError): serializer.load(x)
def test_bool_serializer_valid(x): serializer = create_serializer(bool) assert serializer.load(x) == x assert serializer.dump(x) == x
def test_bool_serializer_invalid(x): serializer = create_serializer(bool) with pytest.raises(ValidationError): serializer.load(x)
def test_person_invalid(x): serializer = create_serializer(Person) with pytest.raises(ValidationError): serializer.load(x)
def test_from_isoformat_valid(x): serializer = create_serializer(DatetimeFromIsoformat) loaded = serializer.load(x) assert loaded == datetime.fromisoformat(x) assert serializer.dump(loaded) == x