def test_unique_items_validation_with_duplicates(value): parameters = parameters_validator([ { 'name': 'id', 'in': PATH, 'description': 'id', 'type': ARRAY, 'required': True, 'uniqueItems': True, 'items': { 'type': [STRING, NUMBER, BOOLEAN] }, }, ]) parameter_values = { 'id': value, } with pytest.raises(ValidationError) as err: validate_parameters(parameter_values, parameters, {}) assert_message_in_errors( MESSAGES['unique_items']['invalid'], err.value.detail, 'id.uniqueItems', )
def test_parameter_schema_validation_for_invalid_value(value, error_key, message_key): parameters = parameters_validator([ { 'name': 'id', 'in': BODY, 'description': 'id', 'required': True, 'schema': { 'type': STRING, 'format': 'uuid' }, }, ]) parameter_values = { 'id': value, } with pytest.raises(ValidationError) as err: validate_parameters(parameter_values, parameters, context={}) assert_message_in_errors( MESSAGES[error_key][message_key], err.value.messages, 'id.{0}'.format(error_key), )
def test_nullable_enum_with_null_values_strict(enum, value, monkeypatch): parameters = parameters_validator([ { 'name': 'id', 'in': PATH, 'description': 'id', 'type': [STRING, NUMBER, BOOLEAN], 'required': True, 'enum': enum, 'x-nullable': True }, ]) parameter_values = { 'id': value, } monkeypatch.setattr(os, 'environ', {FLEX_DISABLE_X_NULLABLE: '1'}) with pytest.raises(ValidationError) as err: validate_parameters(parameter_values, parameters, {}) assert_message_in_errors( MESSAGES['enum']['invalid'], err.value.detail, 'id.enum', )
def test_parameter_items_validation_on_invalid_array(): parameters = parameters_validator([ { 'name': 'id', 'in': QUERY, 'description': 'id', 'items': { 'type': INTEGER, 'minimum': 0, }, 'type': ARRAY, }, ]) value = [1, 2, '3', -1, 4] parameter_values = { 'id': value, } with pytest.raises(ValidationError) as err: validate_parameters(parameter_values, parameters, context={}) assert_message_in_errors( MESSAGES['minimum']['invalid'], err.value.detail, 'id.items.type', ) assert_message_in_errors( MESSAGES['minimum']['invalid'], err.value.detail, 'id.items.minimum', )
def test_enum_validation_with_invalid_values(enum, value): from django.core.exceptions import ValidationError serializer = ParameterSerializer(many=True, data=( { 'name': 'id', 'in': PATH, 'description':'id', 'type': [STRING, NUMBER, BOOLEAN], 'required': True, 'enum': enum, }, )) assert serializer.is_valid(), serializer.errors parameters = serializer.object parameter_values = { 'id': value, } with pytest.raises(ValidationError) as err: validate_parameters(parameter_values, parameters, {}, inner=True) assert 'id' in err.value.messages[0] assert 'enum' in err.value.messages[0]['id'][0] assert_error_message_equal( err.value.messages[0]['id'][0]['enum'][0], MESSAGES['enum']['invalid'], )
def test_parameter_format_validation_on_invalid_values(format_, value, error_key): from django.core.exceptions import ValidationError serializer = ParameterSerializer(many=True, data=( { 'name': 'id', 'in': PATH, 'description': 'id', 'type': STRING, 'required': True, 'format': format_, }, )) assert serializer.is_valid(), serializer.errors parameters = serializer.object parameter_values = { 'id': value, } with pytest.raises(ValidationError) as err: validate_parameters(parameter_values, parameters, {}, inner=True) assert 'id' in err.value.messages[0] assert 'format' in err.value.messages[0]['id'][0] assert_error_message_equal( err.value.messages[0]['id'][0]['format'][0], MESSAGES['format'][error_key], )
def test_multiple_of_validation_for_invalid_values(divisor, value): from django.core.exceptions import ValidationError serializer = ParameterSerializer(many=True, data=( { 'name': 'id', 'in': PATH, 'description':'id', 'type': NUMBER, 'required': True, 'multipleOf': divisor, }, )) assert serializer.is_valid(), serializer.errors parameters = serializer.object parameter_values = { 'id': value, } with pytest.raises(ValidationError) as err: validate_parameters(parameter_values, parameters, {}, inner=True) assert 'id' in err.value.messages[0] assert 'multipleOf' in err.value.messages[0]['id'][0] assert_error_message_equal( err.value.messages[0]['id'][0]['multipleOf'][0], MESSAGES['multiple_of']['invalid'], )
def test_parameter_schema_validation_for_invalid_value(value, error_key, message_key): from django.core.exceptions import ValidationError serializer = ParameterSerializer(many=True, data=( { 'name': 'id', 'in': BODY, 'description': 'id', 'required': True, 'schema': {'type': STRING, 'format': 'uuid'}, }, )) assert serializer.is_valid(), serializer.errors parameters = serializer.object parameter_values = { 'id': value, } with pytest.raises(ValidationError) as err: validate_parameters(parameter_values, parameters, context={}, inner=True) assert 'id' in err.value.messages[0] assert error_key in err.value.messages[0]['id'][0] assert_error_message_equal( err.value.messages[0]['id'][0][error_key][0], MESSAGES[error_key][message_key], )
def test_parameter_schema_validation_on_valid_values(value): parameters = parameters_validator( [{"name": "id", "in": BODY, "description": "id", "required": True, "schema": {"type": STRING, "format": "uri"}}] ) parameter_values = {"id": value} validate_parameters(parameter_values, parameters, context={})
def test_max_items_on_values_with_too_many_items(max_items, value): from django.core.exceptions import ValidationError serializer = ParameterSerializer(many=True, data=( { 'name': 'id', 'in': PATH, 'description':'id', 'type': ARRAY, 'required': True, 'maxItems': max_items, 'items': {'type': STRING}, }, )) assert serializer.is_valid(), serializer.errors parameters = serializer.object parameter_values = { 'id': value, } with pytest.raises(ValidationError) as err: validate_parameters(parameter_values, parameters, {}, inner=True) assert 'id' in err.value.messages[0] assert 'maxItems' in err.value.messages[0]['id'][0] assert_error_message_equal( err.value.messages[0]['id'][0]['maxItems'][0], MESSAGES['max_items']['invalid'], )
def test_max_items_on_values_with_too_many_items(max_items, value): parameters = parameters_validator([ { 'name': 'id', 'in': PATH, 'description': 'id', 'type': ARRAY, 'required': True, 'maxItems': max_items, 'items': { 'type': STRING }, }, ]) parameter_values = { 'id': value, } with pytest.raises(ValidationError) as err: validate_parameters(parameter_values, parameters, {}) assert_message_in_errors( MESSAGES['max_items']['invalid'], err.value.detail, 'id.maxItems', )
def test_nullable_enum_with_invalid_values(enum, value): parameters = parameters_validator([ { 'name': 'id', 'in': PATH, 'description': 'id', 'type': [STRING, NUMBER, BOOLEAN], 'required': True, 'enum': enum, 'x-nullable': True }, ]) parameter_values = { 'id': value, } with pytest.raises(ValidationError) as err: validate_parameters(parameter_values, parameters, {}) assert_message_in_errors( MESSAGES['enum']['invalid'], err.value.detail, 'id.enum', )
def test_parameter_validation_with_correct_type(type_, value): parameters = parameters_validator([ {'name': 'id', 'in': PATH, 'description': 'id', 'type': type_, 'required': True}, ]) parameter_values = { 'id': value, } validate_parameters(parameter_values, parameters, {})
def test_parameter_validation_with_correct_type(type_, value): serializer = ParameterSerializer(many=True, data=( {'name': 'id', 'in': PATH, 'description': 'id', 'type': type_, 'required': True}, )) assert serializer.is_valid(), serializer.errors parameters = serializer.object parameter_values = { 'id': value, } validate_parameters(parameter_values, parameters, {}, inner=True)
def test_parameter_schema_as_reference_validation_for_invalid_value(value, error_key, message_key): context = {"definitions": {"UUID": {"type": STRING, "format": "uuid"}}} parameters = parameters_validator( [{"name": "id", "in": BODY, "description": "id", "required": True, "schema": {"$ref": "#/definitions/UUID"}}], context=context, ) parameter_values = {"id": value} with pytest.raises(ValidationError) as err: validate_parameters(parameter_values, parameters, context=context) assert_message_in_errors(MESSAGES[error_key][message_key], err.value.messages, "id.{0}".format(error_key))
def test_required_parameters_invalid_when_not_present(): parameters = parameters_validator([ {'name': 'id', 'in': PATH, 'description': 'id', 'type': STRING, 'required': True}, ]) parameter_values = {} with pytest.raises(ValidationError) as err: validate_parameters(parameter_values, parameters, {}) assert_message_in_errors( MESSAGES['required']['required'], err.value.detail, 'id.required', )
def test_parameter_validation_with_correct_type(type_, value): parameters = parameters_validator([ { 'name': 'id', 'in': PATH, 'description': 'id', 'type': type_, 'required': True }, ]) parameter_values = { 'id': value, } validate_parameters(parameter_values, parameters, {})
def test_multiple_of_validation_for_valid_multiples(divisor, value): parameters = parameters_validator([ { 'name': 'id', 'in': PATH, 'description':'id', 'type': NUMBER, 'required': True, 'multipleOf': divisor, }, ]) parameter_values = { 'id': value, } validate_parameters(parameter_values, parameters, {})
def test_parameter_validation_enforces_type(type_, value): parameters = parameters_validator([ {'name': 'id', 'in': PATH, 'description': 'id', 'type': type_, 'required': True}, ]) parameter_values = { 'id': value, } with pytest.raises(ValidationError) as err: validate_parameters(parameter_values, parameters, {}) assert_message_in_errors( MESSAGES['type']['invalid'], err.value.detail, 'id.type', )
def test_enum_validation_with_allowed_values(enum, value): parameters = parameters_validator([ { 'name': 'id', 'in': PATH, 'description': 'id', 'type': [STRING, NUMBER, BOOLEAN], 'required': True, 'enum': enum, }, ]) parameter_values = { 'id': value, } validate_parameters(parameter_values, parameters, {})
def test_parameter_format_validation_succeeds_on_valid_values(format_, value): parameters = parameters_validator([ { 'name': 'id', 'in': PATH, 'description': 'id', 'type': STRING, 'required': True, 'format': format_, }, ]) parameter_values = { 'id': value, } validate_parameters(parameter_values, parameters, {})
def test_maximum_validation_for_valid_values(maximum, value): parameters = parameters_validator([ { 'name': 'id', 'in': PATH, 'description':'id', 'type': NUMBER, 'required': True, 'maximum': maximum, }, ]) parameter_values = { 'id': value, } validate_parameters(parameter_values, parameters, {})
def test_parameters_allowed_missing_when_not_required(): parameters = parameters_validator([ { 'name': 'id', 'in': BODY, 'description': 'id', 'type': STRING, 'required': False, 'schema': { 'type': STRING, }, }, ]) parameter_values = {} validate_parameters(parameter_values, parameters, {})
def test_pattern_validation_with_matching_values(pattern, value): parameters = parameters_validator([ { 'name': 'id', 'in': PATH, 'description':'id', 'type': STRING, 'required': True, 'pattern': pattern, }, ]) parameter_values = { 'id': value, } validate_parameters(parameter_values, parameters, {})
def test_minimum_length_validation_with_valid_lengths(min_length, value): parameters = parameters_validator([ { 'name': 'id', 'in': PATH, 'description':'id', 'type': STRING, 'required': True, 'minLength': min_length, }, ]) parameter_values = { 'id': value, } validate_parameters(parameter_values, parameters, {})
def test_local_parameter_values_override_schema(value): parameters = parameters_validator( [ { "name": "id", "in": BODY, "description": "id", "required": True, "type": INTEGER, "format": INT32, "schema": {"type": STRING, "format": "uuid"}, } ] ) parameter_values = {"id": value} validate_parameters(parameter_values, parameters, context={})
def test_min_items_on_values_with_valid_array_length(min_items, value): parameters = parameters_validator([ { 'name': 'id', 'in': PATH, 'description':'id', 'type': ARRAY, 'required': True, 'minItems': min_items, 'items': {'type': STRING}, }, ]) parameter_values = { 'id': value, } validate_parameters(parameter_values, parameters, {})
def test_unique_items_validation_with_no_duplicates(value): parameters = parameters_validator([ { 'name': 'id', 'in': PATH, 'description':'id', 'type': ARRAY, 'required': True, 'uniqueItems': True, 'items': {'type': [STRING, NUMBER, BOOLEAN]}, }, ]) parameter_values = { 'id': value, } validate_parameters(parameter_values, parameters, {})
def test_parameter_format_validation_succeeds_on_valid_values(format_, value): serializer = ParameterSerializer(many=True, data=( { 'name': 'id', 'in': PATH, 'description': 'id', 'type': STRING, 'required': True, 'format': format_, }, )) assert serializer.is_valid(), serializer.errors parameters = serializer.object parameter_values = { 'id': value, } validate_parameters(parameter_values, parameters, {})
def test_minimum_length_validation_with_valid_lengths(min_length, value): serializer = ParameterSerializer(many=True, data=( { 'name': 'id', 'in': PATH, 'description':'id', 'type': STRING, 'required': True, 'minLength': min_length, }, )) assert serializer.is_valid(), serializer.errors parameters = serializer.object parameter_values = { 'id': value, } validate_parameters(parameter_values, parameters, {}, inner=True)
def test_parameter_schema_validation_on_valid_values(value): parameters = parameters_validator([ { 'name': 'id', 'in': BODY, 'description': 'id', 'required': True, 'schema': { 'type': STRING, 'format': 'uri', }, }, ]) parameter_values = { 'id': value, } validate_parameters(parameter_values, parameters, context={})
def test_parameter_schema_validation_for_invalid_value(value, error_key, message_key): parameters = parameters_validator( [ { "name": "id", "in": BODY, "description": "id", "required": True, "schema": {"type": STRING, "format": "uuid"}, } ] ) parameter_values = {"id": value} with pytest.raises(ValidationError) as err: validate_parameters(parameter_values, parameters, context={}) assert_message_in_errors(MESSAGES[error_key][message_key], err.value.messages, "id.{0}".format(error_key))
def test_multiple_of_validation_for_valid_multiples(divisor, value): serializer = ParameterSerializer(many=True, data=( { 'name': 'id', 'in': PATH, 'description':'id', 'type': NUMBER, 'required': True, 'multipleOf': divisor, }, )) assert serializer.is_valid(), serializer.errors parameters = serializer.object parameter_values = { 'id': value, } validate_parameters(parameter_values, parameters, {}, inner=True)
def test_pattern_validation_with_matching_values(pattern, value): serializer = ParameterSerializer(many=True, data=( { 'name': 'id', 'in': PATH, 'description':'id', 'type': STRING, 'required': True, 'pattern': pattern, }, )) assert serializer.is_valid(), serializer.errors parameters = serializer.object parameter_values = { 'id': value, } validate_parameters(parameter_values, parameters, {}, inner=True)
def test_enum_validation_with_allowed_values(enum, value): serializer = ParameterSerializer(many=True, data=( { 'name': 'id', 'in': PATH, 'description':'id', 'type': [STRING, NUMBER, BOOLEAN], 'required': True, 'enum': enum, }, )) assert serializer.is_valid(), serializer.errors parameters = serializer.object parameter_values = { 'id': value, } validate_parameters(parameter_values, parameters, {}, inner=True)
def test_parameter_items_validation_on_valid_value(): parameters = parameters_validator([ { 'name': 'id', 'in': QUERY, 'description': 'id', 'items': { 'type': INTEGER, 'minimum': 0, }, 'type': ARRAY, }, ]) value = [1, 2, 3, 4, 5] parameter_values = { 'id': value, } validate_parameters(parameter_values, parameters, context={})
def test_min_items_on_values_with_valid_array_length(min_items, value): parameters = parameters_validator([ { 'name': 'id', 'in': PATH, 'description': 'id', 'type': ARRAY, 'required': True, 'minItems': min_items, 'items': { 'type': STRING }, }, ]) parameter_values = { 'id': value, } validate_parameters(parameter_values, parameters, {})
def test_unique_items_validation_with_no_duplicates(value): parameters = parameters_validator([ { 'name': 'id', 'in': PATH, 'description': 'id', 'type': ARRAY, 'required': True, 'uniqueItems': True, 'items': { 'type': [STRING, NUMBER, BOOLEAN] }, }, ]) parameter_values = { 'id': value, } validate_parameters(parameter_values, parameters, {})
def test_local_parameter_values_override_schema(value): parameters = parameters_validator([ { 'name': 'id', 'in': BODY, 'description': 'id', 'required': True, 'type': INTEGER, 'format': INT32, 'schema': { 'type': STRING, 'format': 'uuid' }, }, ]) parameter_values = { 'id': value, } validate_parameters(parameter_values, parameters, context={})
def test_required_parameters_invalid_when_not_present(): parameters = parameters_validator([ { 'name': 'id', 'in': PATH, 'description': 'id', 'type': STRING, 'required': True }, ]) parameter_values = {} with pytest.raises(ValidationError) as err: validate_parameters(parameter_values, parameters, {}) assert_message_in_errors( MESSAGES['required']['required'], err.value.detail, 'id.required', )
def test_parameter_validation_enforces_type(type_, value): parameters = parameters_validator([ { 'name': 'id', 'in': PATH, 'description': 'id', 'type': type_, 'required': True }, ]) parameter_values = { 'id': value, } with pytest.raises(ValidationError) as err: validate_parameters(parameter_values, parameters, {}) assert_message_in_errors( MESSAGES['type']['invalid'], err.value.detail, 'id.type', )
def test_maximum_length_validation_with_too_long_values(max_length, value): parameters = parameters_validator([ { 'name': 'id', 'in': PATH, 'description':'id', 'type': STRING, 'required': True, 'maxLength': max_length, }, ]) parameter_values = { 'id': value, } with pytest.raises(ValidationError) as err: validate_parameters(parameter_values, parameters, {}) assert_path_in_errors( 'id.maxLength', err.value.detail, )
def test_parameter_schema_as_external_reference_validation_for_invalid_value( value, error_key, message_key): context = { 'definitions': { 'UUID': { 'type': STRING, 'format': 'uuid' } }, } parameters = parameters_validator([ { 'name': 'id', 'in': BODY, 'description': 'id', 'required': True, 'schema': { '$ref': 'jsonschemas/uuid.json#/definitions/UUID' }, }, ], context=context, base_path=DIR) parameter_values = { 'id': value, } with pytest.raises(ValidationError) as err: validate_parameters(parameter_values, parameters, context=context, base_path=DIR) assert_message_in_errors( MESSAGES[error_key][message_key], err.value.messages, 'id.{0}'.format(error_key), )
def test_parameter_format_validation_on_invalid_values(format_, value, error_key): parameters = parameters_validator([ { 'name': 'id', 'in': PATH, 'description': 'id', 'type': STRING, 'required': True, 'format': format_, }, ]) parameter_values = { 'id': value, } with pytest.raises(ValidationError) as err: validate_parameters(parameter_values, parameters, {}) assert_message_in_errors( MESSAGES['format'][error_key], err.value.detail, 'id.format', )
def test_minimum_validation_for_invalid_values(minimum, value): parameters = parameters_validator([ { 'name': 'id', 'in': PATH, 'description':'id', 'type': NUMBER, 'required': True, 'minimum': minimum, }, ]) parameter_values = { 'id': value, } with pytest.raises(ValidationError) as err: validate_parameters(parameter_values, parameters, {}) assert_message_in_errors( MESSAGES['minimum']['invalid'], err.value.detail, 'id.minimum', )
def test_pattern_validation_with_invalid_values(pattern, value): parameters = parameters_validator([ { 'name': 'id', 'in': PATH, 'description':'id', 'type': STRING, 'required': True, 'pattern': pattern, }, ]) parameter_values = { 'id': value, } with pytest.raises(ValidationError) as err: validate_parameters(parameter_values, parameters, {}) assert_message_in_errors( MESSAGES['pattern']['invalid'], err.value.detail, 'id.pattern', )