diff --git a/flex/validation/parameter.py b/flex/validation/parameter.py index 5bfb4cb..aa9f479 100644 --- a/flex/validation/parameter.py +++ b/flex/validation/parameter.py @@ -125,7 +125,11 @@ def construct_parameter_validators(parameter, context): if 'schema' in parameter: schema_validators = construct_schema_validators(parameter['schema'], context=context) for key, value in schema_validators.items(): - validators.setdefault(key, value) + # merge validators for those sharing the same key (like 'required') to not omit some + if key in validators: + validators[key] += value + else: + validators.setdefault(key, value) return validators diff --git a/tests/validation/request/test_request_body_parameter_validation.py b/tests/validation/request/test_request_body_parameter_validation.py index a6fe7c0..a5c88f2 100644 --- a/tests/validation/request/test_request_body_parameter_validation.py +++ b/tests/validation/request/test_request_body_parameter_validation.py @@ -112,3 +112,53 @@ def test_request_body_parameter_validation_with_invalid_value(user_post_schema): MESSAGES['format']['invalid_email'], err.value.detail, ) + + +def test_request_body_parameter_validation_invalid_without_ref(): + """ + Test validating the request body with a invalid post. + """ + schema = SchemaFactory( + paths={ + '/post/': { + POST: { + 'consumes': ['application/json'], + 'parameters': [ + { + 'in': BODY, + 'name': BODY, + 'required': True, + 'schema': { + 'type': OBJECT, + 'required': ['name'], + 'properties': { + 'name': { + 'type': STRING + } + } + } + } + ], + 'responses': {200: {'description': "Success"}}, + } + } + } + ) + + request = RequestFactory( + url='http://www.example.com/post/', + content_type='application/json', + body=json.dumps({}), + method=POST, + ) + + with pytest.raises(ValidationError) as err: + validate_request( + request=request, + schema=schema, + ) + + assert_message_in_errors( + MESSAGES['required']['required'], + err.value.detail, + )