def test_nested_map_errors(): data = {"name": 1000, "amount": {"amount": 1000, "currency": 1000}} validator = b.schema({ "c": b.Type(str), "amount": b.Map({ "amount": b.Type(str), "currency": b.Type(str) }) }) with pytest.raises(SchemaErrors) as exc: validator.validate(data) expected = { 'c': 'Field `c` is required.', 'amount': { 'amount': "Not of type `<class 'str'>`", 'currency': "Not of type `<class 'str'>`" } } assert expected == exc.value.errors
def test_schema_as_map_optional_fields(): validator = b.Map({"name": b.Type(str), b.Optional("age"): b.Type(int)}) assert validator.required == {"name"} validator = b.Map({}) assert validator.validate({"name": "John", "age": 25}) == {} validator = b.Map({"name": b.Type(str), b.Optional("age"): b.Type(int)}) assert validator.validate({"name": "John"}) == {"name": "John"} validator = b.Map({"name": b.Type(str), b.Optional("age"): b.Type(int)}) assert validator.validate({ "name": "John", "whatever": True }) == { "name": "John" } validator = b.Map({"name": b.Type(str), b.Optional("age"): b.Type(int)}) with pytest.raises(SchemaErrors): validator.validate({"name": "John", "age": 1.2})
def test_schema_logic_or(): assert b.Or(b.Type(str), b.Predicate(lambda n: n == 42)).validate("20") == "20" assert b.Or(b.Type(str), b.Predicate(lambda n: n == 42)).validate(42) == 42 with pytest.raises(SchemaError): b.Or(b.Type(str), b.Predicate(lambda n: n == 42)).validate(20)
def test_schema_as_type(): assert b.Type(object).validate("hai") == "hai" assert b.Type(int).validate(123) == 123 with pytest.raises(SchemaError): b.Type(int).validate("123")