def test_string_derived_fields(): f = fields.EmailField() assert f.get_definitions_and_schema() == ({}, { 'type': 'string', 'format': 'email', }) check_field_schema(f) f = fields.IPv4Field() assert f.get_definitions_and_schema() == ({}, { 'type': 'string', 'format': 'ipv4', }) f = fields.DateTimeField() assert f.get_definitions_and_schema() == ({}, { 'type': 'string', 'format': 'date-time', }) f = fields.UriField() assert f.get_definitions_and_schema() == ({}, { 'type': 'string', 'format': 'uri', })
def test_string_derived_fields(): f = fields.EmailField() definitions, schema = f.get_definitions_and_schema() assert s(schema) == { 'type': 'string', 'format': 'email', } f = fields.IPv4Field() definitions, schema = f.get_definitions_and_schema() assert s(schema) == { 'type': 'string', 'format': 'ipv4', } f = fields.DateTimeField() definitions, schema = f.get_definitions_and_schema() assert s(schema) == { 'type': 'string', 'format': 'date-time', } f = fields.UriField() definitions, schema = f.get_definitions_and_schema() assert s(schema) == { 'type': 'string', 'format': 'uri', }
def test_dict_field_to_schema(): f = fields.DictField(title='Hey!', enum=[{'x': 1}, {'y': 2}]) assert f.get_definitions_and_schema() == ({}, { 'type': 'object', 'enum': [ { 'x': 1 }, { 'y': 2 }, ], 'title': 'Hey!', }) check_field_schema(f) a_field_mock = fields.StringField() b_field_mock = fields.BooleanField() c_field_mock = fields.EmailField() f = fields.DictField(properties={ 'a': a_field_mock, 'b': b_field_mock, }, pattern_properties={ 'c*': c_field_mock, }, min_properties=5, max_properties=10) assert f.get_definitions_and_schema() == ({}, { 'type': 'object', 'properties': { 'a': a_field_mock.get_schema(), 'b': b_field_mock.get_schema(), }, 'patternProperties': { 'c*': c_field_mock.get_schema(), }, 'minProperties': 5, 'maxProperties': 10, }) additional_prop_field_mock = fields.OneOfField( (fields.StringField(), fields.NumberField())) f = fields.DictField(additional_properties=additional_prop_field_mock) assert f.get_definitions_and_schema() == ({}, { 'type': 'object', 'additionalProperties': additional_prop_field_mock.get_schema(), }) f = fields.DictField(additional_properties=False) assert f.get_schema()['additionalProperties'] is False f = fields.DictField(pattern_properties={'(': fields.StringField()}) with pytest.raises(ValueError) as e: f.get_definitions_and_schema() assert str(e.value) == 'Invalid regular expression: unbalanced parenthesis' # test nested required fields f = fields.DictField(properties={ 'a': fields.StringField(required=True), }, pattern_properties={ 'c*': fields.StringField(required=True), }) assert f.get_definitions_and_schema() == ({}, { 'type': 'object', 'properties': { 'a': { 'type': 'string' }, }, 'patternProperties': { 'c*': { 'type': 'string' }, }, 'required': ['a'], }) check_field_schema(f)
def test_dict_field_to_schema(): f = fields.DictField(title='Hey!', enum=[{'x': 1}, {'y': 2}]) definitions, schema = f.get_definitions_and_schema() assert s(schema) == { 'type': 'object', 'enum': [ {'x': 1}, {'y': 2}, ], 'title': 'Hey!', } a_field_mock = fields.StringField() b_field_mock = fields.BooleanField() c_field_mock = fields.EmailField() f = fields.DictField(properties={ 'a': a_field_mock, 'b': b_field_mock, }, pattern_properties={ 'c*': c_field_mock, }, min_properties=5, max_properties=10) definitions, schema = f.get_definitions_and_schema() assert s(schema) == { 'type': 'object', 'properties': { 'a': a_field_mock.get_schema(), 'b': b_field_mock.get_schema(), }, 'patternProperties': { 'c*': c_field_mock.get_schema(), }, 'minProperties': 5, 'maxProperties': 10, } additional_prop_field_mock = fields.OneOfField( (fields.StringField(), fields.NumberField())) f = fields.DictField(additional_properties=additional_prop_field_mock) definitions, schema = f.get_definitions_and_schema() assert s(schema) == s({ 'type': 'object', 'additionalProperties': additional_prop_field_mock.get_schema(), }) f = fields.DictField(additional_properties=False) assert f.get_schema()['additionalProperties'] is False # test nested required fields and make sure that field names # do not override property names f = fields.DictField(properties={ 'a': fields.StringField(name='A', required=True), }, pattern_properties={ 'c*': fields.StringField(name='C', required=True), }) definitions, schema = f.get_definitions_and_schema() assert s(schema) == s({ 'type': 'object', 'properties': { 'a': {'type': 'string'}, }, 'patternProperties': { 'c*': {'type': 'string'}, }, 'required': ['a'], })