Esempio n. 1
0
    def test_it_raises_when_type_is_invalid(self):
        def schema():
            required('metadata', type='unknown')

        document = {'metadata': {}}
        with pytest.raises(SchemaError):
            validate(schema, document)
Esempio n. 2
0
    def test_it_raises_when_required_field_is_already_optional(self):
        def schema():
            optional('accommodation', type='object')
            required('accommodation', type='object')

        document = {'accommodation': {}}
        with pytest.raises(SchemaError):
            validate(schema, document)
Esempio n. 3
0
    def test_it_raises_when_list_is_required_and_elements_are_optional(self):
        def schema():
            required('scores', type='list')
            optional('scores[]')

        document = {'scores': []}
        with pytest.raises(SchemaError):
            validate(schema, document)
Esempio n. 4
0
    def test_it_raises_when_optional_field_is_already_required(self):
        def schema():
            required('metadata', type='object')
            optional('metadata', type='object')

        document = {'metadata': {}}
        with pytest.raises(SchemaError):
            validate(schema, document)
Esempio n. 5
0
    def test_it_raises_schemaerror_when_schema_raises(self):
        def schema():
            raise RuntimeError()

        document = {}
        with pytest.raises(SchemaError) as exception_info:
            validate(schema, document)

        assert type(exception_info.value.__cause__) == RuntimeError
Esempio n. 6
0
    def test_it_doesnt_wrap_schemaerror(self):
        def schema():
            def validator(field, name):
                raise RuntimeError()

            optional('accommodation', type='custom', validator=validator)

        document = {'accommodation': {}}
        with pytest.raises(SchemaError) as exception_info:
            validate(schema, document)

        assert type(exception_info.value.__cause__) == RuntimeError
Esempio n. 7
0
    def test_it_rejects_invalid_objects_in_a_list(self):
        def schema():
            required('accommodation.ratings[].score', type='number', max=5)

        document = {
            'accommodation': {
                'ratings': [{
                    'score': 3
                }, {
                    'score': 'excellent'
                }, {
                    'score': 6
                }]
            }
        }
        messages = validate(schema, document)

        assert len(messages) == 2
        message = messages[0]
        assert message.type == 'invalid_type'
        assert message.field == 'accommodation.ratings[1].score'
        assert message.expected == 'number'
        message = messages[1]
        assert message.type == 'number_too_large'
        assert message.field == 'accommodation.ratings[2].score'
        assert message.expected == 5
Esempio n. 8
0
    def test_it_accepts_an_optional_object_with_the_correct_type(self):
        def schema():
            optional('trace', type='object')

        document = {'trace': {}}
        messages = validate(schema, document)

        assert messages == []
Esempio n. 9
0
    def test_it_reports_an_extra_top_level_field(self):
        document = {'metadata': True}
        messages = validate(empty_schema, document)

        assert len(messages) == 1
        message = messages[0]
        assert message.type == 'extra_field'
        assert message.field == 'metadata'
Esempio n. 10
0
    def test_it_accepts_a_list_of_objects_inside_a_list_objects(self):
        def schema():
            required('rooms[].facilities[].type')

        document = {'rooms': [{'facilities': [{'type': 'pool'}]}]}
        messages = validate(schema, document)

        assert messages == []
Esempio n. 11
0
    def test_it_accepts_a_list_of_scalars_inside_a_list_of_objects(self):
        def schema():
            required('facilities[].subtype[]', type='string')

        document = {'facilities': [{'subtype': ['indoor']}]}
        messages = validate(schema, document)

        assert messages == []
Esempio n. 12
0
    def test_it_accepts_a_value_with_bool_type(self):
        def schema():
            required('has_bathroom', type='bool')

        document = {'has_bathroom': False}
        messages = validate(schema, document)

        assert messages == []
Esempio n. 13
0
    def test_it_accepts_a_required_top_level_field(self):
        def schema():
            required('metadata')

        document = {'metadata': True}
        messages = validate(schema, document)

        assert messages == []
Esempio n. 14
0
    def test_it_accepts_valid_objects_in_a_list(self):
        def schema():
            required('accommodation.ratings[].aspect', type='string')

        document = {'accommodation': {'ratings': [{'aspect': 'cleanliness'}]}}
        messages = validate(schema, document)

        assert messages == []
Esempio n. 15
0
    def test_it_accepts_list_of_valid_scalars(self):
        def schema():
            required('scores[]', type='number')

        document = {'scores': [1, 2, 3]}
        messages = validate(schema, document)

        assert messages == []
Esempio n. 16
0
    def test_it_accepts_value_with_list_type(self):
        def schema():
            required('rooms', type='list')

        document = {'rooms': []}
        messages = validate(schema, document)

        assert messages == []
Esempio n. 17
0
    def test_it_accepts_a_value_with_int_type(self):
        def schema():
            required('stars', type='int', min=0, max=5)

        document = {'stars': 4}
        messages = validate(schema, document)

        assert messages == []
Esempio n. 18
0
    def test_it_accepts_a_parameterless_schema(self):
        def schema():
            pass

        document = {}
        messages = validate(schema, document)

        assert messages == []
Esempio n. 19
0
    def test_it_accepts_a_present_optional_top_level_field(self):
        def schema():
            optional('trace')

        document = {'trace': True}
        messages = validate(schema, document)

        assert messages == []
Esempio n. 20
0
    def test_it_accepts_a_value_with_string_type(self):
        def schema():
            required('unit', type='string', options=['sqm', 'sqft'])

        document = {'unit': 'sqft'}
        messages = validate(schema, document)

        assert messages == []
Esempio n. 21
0
    def test_it_rejects_multiple_objects_with_missing_fields_in_a_list(self):
        def schema():
            required('accommodation.ratings[].score', type='number')

        document = {'accommodation': {'ratings': [{}, {}]}}
        messages = validate(schema, document)

        assert len(messages) == 2
Esempio n. 22
0
    def test_it_accepts_a_nested_list_of_scalars(self):
        def schema():
            required('matrix[][]', 'number')

        document = {'matrix': [[1, 2, 3], [4, 5, 6]]}
        messages = validate(schema, document)

        assert messages == []
Esempio n. 23
0
    def test_it_accepts_a_required_object_with_the_correct_type(self):
        def schema():
            required('accommodation', type='object')

        document = {'accommodation': {}}
        messages = validate(schema, document)

        assert messages == []
Esempio n. 24
0
    def test_it_accepts_a_nested_required_field(self):
        def schema():
            required('accommodation.geo.latitude')

        document = {'accommodation': {'geo': {'latitude': '12.5345'}}}
        messages = validate(schema, document)

        assert messages == []
Esempio n. 25
0
    def test_it_ignores_an_extra_top_level_field(self):
        def schema():
            ignore_extra_fields()

        document = {'trace': True}
        messages = validate(schema, document)

        assert messages == []
Esempio n. 26
0
    def test_it_accepts_a_missing_required_field_if_its_parent_is_missing(
            self):
        def schema():
            required('accommodation.name')

        document = {}
        messages = validate(schema, document)

        assert messages == []
Esempio n. 27
0
    def test_it_makes_ignore_extra_fields_available_to_schema_outside_of_validator_instance(
            self):
        def schema():
            ignore_extra_fields()

        document = {'metadata': {}}
        messages = validate(schema, document)

        assert messages == []
Esempio n. 28
0
    def test_it_reports_a_missing_required_field(self):
        def schema():
            required('accommodation.name')

        document = {'accommodation': {}}
        messages = validate(schema, document)

        assert len(messages) == 1
        message = messages[0]
        assert message.type == 'missing_field'
        assert message.field == 'accommodation.name'
Esempio n. 29
0
    def test_it_rejects_object_with_missing_fields_in_a_list(self):
        def schema():
            required('accommodation.ratings[].score', type='number')

        document = {'accommodation': {'ratings': [{}]}}
        messages = validate(schema, document)

        assert len(messages) == 1
        message = messages[0]
        assert message.type == 'missing_field'
        assert message.field == 'accommodation.ratings[0].score'
Esempio n. 30
0
    def test_it_reports_an_extra_nested_field(self):
        def schema():
            optional('accommodation')

        document = {'accommodation': {'name': 'Hotel'}}
        messages = validate(schema, document)

        assert len(messages) == 1
        message = messages[0]
        assert message.type == 'extra_field'
        assert message.field == 'accommodation.name'