def test_response_parameter_validation(): """ Test that request validation does parameter validation. This is largely a smoke test to ensure that parameter validation is wired into request validation correctly. """ from django.core.exceptions import ValidationError schema = SchemaFactory( paths={ '/get': { 'get': { 'responses': {200: {'description': 'Success'}}, }, }, }, ) response = ResponseFactory(url='http://www.example.com/get', status_code=301) with pytest.raises(ValidationError) as err: validate_response( response, paths=schema['paths'], base_path=schema.get('base_path', ''), context=schema, inner=True, ) assert 'response' in err.value.messages[0] assert_error_message_equal( err.value.messages[0]['response'][0], MESSAGES['response']['invalid_status_code'], )
def test_response_validation_with_invalid_operation_on_path(): """ Test that response validation detects request paths that are not declared in the schema. """ from django.core.exceptions import ValidationError schema = SchemaFactory( paths={ '/post': { 'post': None, }, }, ) response = ResponseFactory(url='http://www.example.com/post') with pytest.raises(ValidationError) as err: validate_response( response, paths=schema['paths'], base_path=schema.get('base_path', ''), context=schema, inner=True, ) assert 'request' in err.value.messages[0] assert_error_message_equal( err.value.messages[0]['request'][0], MESSAGES['request']['invalid_method'], )
def test_request_header_validation(): from django.core.exceptions import ValidationError schema = SchemaFactory( paths={ '/get/': { 'get': { 'responses': {200: {'description': "Success"}}, 'parameters': [ { 'name': 'Authorization', 'in': HEADER, 'type': INTEGER, } ] }, }, }, ) response = ResponseFactory( url='http://www.example.com/get/', request__headers={'Authorization': 'abc'}, ) with pytest.raises(ValidationError) as err: validate_response( response, paths=schema['paths'], base_path=schema.get('base_path', ''), context=schema, inner=True, ) assert 'request' in err.value.messages[0] assert 'parameters' in err.value.messages[0]['request'][0][0] assert 'headers' in err.value.messages[0]['request'][0][0]['parameters'][0] assert 'Authorization' in err.value.messages[0]['request'][0][0]['parameters'][0]['headers'][0] assert 'type' in err.value.messages[0]['request'][0][0]['parameters'][0]['headers'][0]['Authorization'][0] assert_error_message_equal( err.value.messages[0]['request'][0][0]['parameters'][0]['headers'][0]['Authorization'][0]['type'][0], MESSAGES['type']['invalid'], )
def test_response_parameter_validation(): """ Test that request validation does parameter validation. This is largely a smoke test to ensure that parameter validation is wired into request validation correctly. """ from django.core.exceptions import ValidationError schema = SchemaFactory( paths={ '/get/{id}/': { 'parameters': [ { 'name': 'id', 'in': PATH, 'description': 'id', 'required': True, 'type': STRING, 'format': 'uuid', }, { 'name': 'page', 'in': QUERY, 'type': INTEGER, }, ], 'get': { 'responses': {200: {'description': "Success"}}, }, }, }, ) response = ResponseFactory(url='http://www.example.com/get/32/?page=abcd') with pytest.raises(ValidationError) as err: validate_response( response, paths=schema['paths'], base_path=schema.get('base_path', ''), context=schema, inner=True, ) assert 'request' in err.value.messages[0] assert 'parameters' in err.value.messages[0]['request'][0][0] assert 'path' in err.value.messages[0]['request'][0][0]['parameters'][0] assert 'id' in err.value.messages[0]['request'][0][0]['parameters'][0]['path'][0] assert 'format' in err.value.messages[0]['request'][0][0]['parameters'][0]['path'][0]['id'][0] assert_error_message_equal( err.value.messages[0]['request'][0][0]['parameters'][0]['path'][0]['id'][0]['format'][0], MESSAGES['format']['invalid_uuid'], ) assert 'query' in err.value.messages[0]['request'][0][0]['parameters'][0] assert 'page' in err.value.messages[0]['request'][0][0]['parameters'][0]['query'][0] assert 'type' in err.value.messages[0]['request'][0][0]['parameters'][0]['query'][0]['page'][0] assert_error_message_equal( err.value.messages[0]['request'][0][0]['parameters'][0]['query'][0]['page'][0]['type'][0], MESSAGES['type']['invalid'], )