def test_default(api): op_spec = make_operation(OPERATION4) op_spec['parameters'][1]['default'] = 1 Swagger2Operation(api=api, method='GET', path='endpoint', path_parameters=[], operation=op_spec, app_produces=['application/json'], app_consumes=['application/json'], app_security=[], security_definitions={}, definitions=DEFINITIONS, parameter_definitions=PARAMETER_DEFINITIONS, resolver=Resolver()) op_spec = make_operation(OPERATION6, parameters=False) op_spec['parameters'][0]['default'] = { 'keep_stacks': 1, 'image_version': 'one', 'senza_yaml': 'senza.yaml', 'new_traffic': 100 } Swagger2Operation(api=api, method='POST', path='endpoint', path_parameters=[], operation=op_spec, app_produces=['application/json'], app_consumes=['application/json'], app_security=[], security_definitions={}, definitions=DEFINITIONS, parameter_definitions={}, resolver=Resolver())
def test_multiple_oauth_in_and(api, caplog): """Tests an operation with multiple oauth security schemes in AND fashion. These should be ignored and raise a warning. """ caplog.set_level(logging.WARNING, logger="connexion.operations.secure") verify_oauth = mock.MagicMock(return_value='verify_oauth_result') api.security_handler_factory.verify_oauth = verify_oauth op_spec = make_operation(OPERATION10) operation = Swagger2Operation( api=api, method='GET', path='endpoint', path_parameters=[], operation=op_spec, app_produces=['application/json'], app_consumes=['application/json'], app_security=SECURITY_DEFINITIONS_2_OAUTH, security_definitions=SECURITY_DEFINITIONS_2_OAUTH, definitions=DEFINITIONS, parameter_definitions=PARAMETER_DEFINITIONS, resolver=Resolver()) assert isinstance(operation.function, types.FunctionType) security_decorator = operation.security_decorator assert len(security_decorator.args[0]) == 0 assert security_decorator.args[0] == [] assert security_decorator.args[1] == ['uid'] assert '... multiple OAuth2 security schemes in AND fashion not supported' in caplog.text assert operation.method == 'GET' assert operation.produces == ['application/json'] assert operation.consumes == ['application/json'] assert operation.security == [{'oauth_1': ['uid'], 'oauth_2': ['uid']}]
def test_multi_body(api): with pytest.raises( InvalidSpecification) as exc_info: # type: py.code.ExceptionInfo op_spec = make_operation(OPERATION2) operation = Swagger2Operation( api=api, method='GET', path='endpoint', path_parameters=[], operation=op_spec, app_produces=['application/json'], app_consumes=['application/json'], app_security=[], security_definitions={}, definitions=DEFINITIONS, parameter_definitions=PARAMETER_DEFINITIONS, resolver=Resolver()) operation.body_schema exception = exc_info.value assert str( exception) == "GET endpoint There can be one 'body' parameter at most" assert repr( exception ) == """<InvalidSpecification: "GET endpoint There can be one 'body' parameter at most">"""
def test_mock_resolver_numeric(): resolver = MockResolver(mock_all=True) responses = { '200': { 'examples': { 'application/json': { 'foo': 'bar' } } } } operation = Swagger2Operation(api=None, method='GET', path='endpoint', path_parameters=[], operation={ 'responses': responses }, app_produces=['application/json'], app_consumes=['application/json'], app_security=[], security_definitions={}, definitions={}, parameter_definitions={}, resolver=resolver) assert operation.operation_id == 'mock-1' response, status_code = resolver.mock_operation(operation) assert status_code == 200 assert response == {'foo': 'bar'}
def test_mock_resolver_no_examples(): resolver = MockResolver(mock_all=True) responses = { '418': {} } operation = Swagger2Operation(api=None, method='GET', path='endpoint', path_parameters=[], operation={ 'responses': responses }, app_produces=['application/json'], app_consumes=['application/json'], app_security=[], security_definitions={}, definitions={}, parameter_definitions={}, resolver=resolver) assert operation.operation_id == 'mock-1' response, status_code = resolver.mock_operation(operation) assert status_code == 418 assert response == 'No example response was defined.'
def test_get_path_parameter_types(api): op_spec = make_operation(OPERATION1, parameters=False) op_spec['parameters'] = [{ 'in': 'path', 'type': 'int', 'name': 'int_path' }, { 'in': 'path', 'type': 'string', 'name': 'string_path' }, { 'in': 'path', 'type': 'string', 'format': 'path', 'name': 'path_path' }] operation = Swagger2Operation(api=api, method='GET', path='endpoint', path_parameters=[], operation=op_spec, app_produces=['application/json'], app_consumes=['application/json'], definitions=DEFINITIONS, resolver=Resolver()) assert { 'int_path': 'int', 'string_path': 'string', 'path_path': 'path' } == operation.get_path_parameter_types()
def test_no_token_info(api): op_spec = make_operation(OPERATION1) operation = Swagger2Operation( api=api, method='GET', path='endpoint', path_parameters=[], operation=op_spec, app_produces=['application/json'], app_consumes=['application/json'], app_security=SECURITY_DEFINITIONS_WO_INFO, security_definitions=SECURITY_DEFINITIONS_WO_INFO, definitions=DEFINITIONS, parameter_definitions=PARAMETER_DEFINITIONS, resolver=Resolver()) assert isinstance(operation.function, types.FunctionType) security_decorator = operation.security_decorator assert security_decorator.func is verify_security assert len(security_decorator.args[0]) == 0 assert operation.method == 'GET' assert operation.produces == ['application/json'] assert operation.consumes == ['application/json'] assert operation.security == [{'oauth': ['uid']}] expected_body_schema = {'definitions': DEFINITIONS} expected_body_schema.update(DEFINITIONS["new_stack"]) assert operation.body_schema == expected_body_schema
def test_operation_local_security_duplicate_token_info(api): verify_oauth = mock.MagicMock(return_value='verify_oauth_result') api.security_handler_factory.verify_oauth = verify_oauth op_spec = make_operation(OPERATION8) operation = Swagger2Operation( api=api, method='GET', path='endpoint', path_parameters=[], operation=op_spec, app_produces=['application/json'], app_consumes=['application/json'], app_security=[], security_definitions=SECURITY_DEFINITIONS_BOTH, definitions=DEFINITIONS, parameter_definitions=PARAMETER_DEFINITIONS, resolver=Resolver()) assert isinstance(operation.function, types.FunctionType) security_decorator = operation.security_decorator assert len(security_decorator.args[0]) == 1 assert security_decorator.args[0][0] == 'verify_oauth_result' assert security_decorator.args[1] == ['uid'] verify_oauth.call_args.assert_called_with( math.ceil, api.security_handler_factory.validate_scope) assert operation.method == 'GET' assert operation.produces == ['application/json'] assert operation.consumes == ['application/json'] assert operation.security == [{'oauth': ['uid']}] expected_body_schema = op_spec["parameters"][0]["schema"] expected_body_schema.update({'definitions': DEFINITIONS}) assert operation.body_schema == expected_body_schema
def test_operation_array(api): op_spec = make_operation(OPERATION7) operation = Swagger2Operation( api=api, method='GET', path='endpoint', path_parameters=[], operation=op_spec, app_produces=['application/json'], app_consumes=['application/json'], app_security=[], security_definitions=SECURITY_DEFINITIONS_REMOTE, definitions=DEFINITIONS, parameter_definitions=PARAMETER_DEFINITIONS, resolver=Resolver()) assert isinstance(operation.function, types.FunctionType) assert operation.method == 'GET' assert operation.produces == ['application/json'] assert operation.consumes == ['application/json'] assert operation.security == [{'oauth': ['uid']}] expected_body_schema = { 'type': 'array', 'items': DEFINITIONS["new_stack"], 'definitions': DEFINITIONS } assert operation.body_schema == expected_body_schema
def test_mock_resolver_example_nested_in_object(): resolver = MockResolver(mock_all=True) responses = { 'default': { 'schema': { 'type': 'object', 'properties': { 'foo': { 'type': 'string', 'example': 'bar' } }, } } } operation = Swagger2Operation(api=None, method='GET', path='endpoint', path_parameters=[], operation={'responses': responses}, app_produces=['application/json'], app_consumes=['application/json'], app_security=[], security_definitions={}, definitions={}, parameter_definitions={}, resolver=resolver) assert operation.operation_id == 'mock-1' response, status_code = resolver.mock_operation(operation) assert status_code == 200 assert response == {'foo': 'bar'}
def test_operation_local_security_oauth2(api, monkeypatch): dummy = object() verify_oauth = mock.MagicMock(return_value=dummy) monkeypatch.setattr('connexion.operations.secure.verify_oauth', verify_oauth) op_spec = make_operation(OPERATION8) operation = Swagger2Operation(api=api, method='GET', path='endpoint', path_parameters=[], operation=op_spec, app_produces=['application/json'], app_consumes=['application/json'], app_security=[], security_definitions=SECURITY_DEFINITIONS_LOCAL, definitions=DEFINITIONS, parameter_definitions=PARAMETER_DEFINITIONS, resolver=Resolver()) assert isinstance(operation.function, types.FunctionType) security_decorator = operation.security_decorator assert security_decorator.func is verify_security assert len(security_decorator.args[0]) == 1 assert security_decorator.args[0][0] is dummy assert security_decorator.args[1] == ['uid'] call_args = verify_oauth.call_args[0] assert call_args[0] is math.ceil assert call_args[1] is validate_scope assert operation.method == 'GET' assert operation.produces == ['application/json'] assert operation.consumes == ['application/json'] assert operation.security == [{'oauth': ['uid']}] expected_body_schema = op_spec["parameters"][0]["schema"] expected_body_schema.update({'definitions': DEFINITIONS}) assert operation.body_schema == expected_body_schema
def test_mock_resolver_notimplemented(): resolver = MockResolver(mock_all=False) responses = { '418': {} } # do not mock the existent functions operation = Swagger2Operation(api=None, method='GET', path='endpoint', path_parameters=[], operation={ 'operationId': 'fakeapi.hello.get' }, app_produces=['application/json'], app_consumes=['application/json'], app_security=[], security_definitions={}, definitions={}, parameter_definitions={}, resolver=resolver) assert operation.operation_id == 'fakeapi.hello.get' # mock only the nonexistent ones operation = Swagger2Operation(api=None, method='GET', path='endpoint', path_parameters=[], operation={ 'operationId': 'fakeapi.hello.nonexistent_function', 'responses': responses }, app_produces=['application/json'], app_consumes=['application/json'], app_security=[], security_definitions={}, definitions={}, parameter_definitions={}, resolver=resolver) # check if it is using the mock function assert operation._resolution.function() == ('No example response was defined.', 418)
def test_resty_resolve_with_default_module_name_can_resolve_api_root(): operation = Swagger2Operation(api=None, method='GET', path='/', path_parameters=[], operation={}, app_produces=['application/json'], app_consumes=['application/json'], app_security=[], security_definitions={}, definitions={}, parameter_definitions=PARAMETER_DEFINITIONS, resolver=RestyResolver('fakeapi')) assert operation.operation_id == 'fakeapi.get'
def test_resty_resolve_with_default_module_name_lowercase_verb_nested(): operation = Swagger2Operation(api=None, method='get', path='/hello/world/{id}', path_parameters=[], operation={}, app_produces=['application/json'], app_consumes=['application/json'], app_security=[], security_definitions={}, definitions={}, parameter_definitions=PARAMETER_DEFINITIONS, resolver=RestyResolver('fakeapi')) assert operation.operation_id == 'fakeapi.hello.world.get'
def test_resty_resolve_x_router_controller_without_operation_id(): operation = Swagger2Operation( api=None, method='GET', path='/hello/{id}', path_parameters=[], operation={'x-swagger-router-controller': 'fakeapi.hello'}, app_produces=['application/json'], app_consumes=['application/json'], app_security=[], security_definitions={}, definitions={}, parameter_definitions=PARAMETER_DEFINITIONS, resolver=RestyResolver('fakeapi')) assert operation.operation_id == 'fakeapi.hello.get'
def test_resty_resolve_with_default_module_name_will_translate_dashes_in_resource_name( ): operation = Swagger2Operation(api=None, method='GET', path='/foo-bar', path_parameters=[], operation={}, app_produces=['application/json'], app_consumes=['application/json'], app_security=[], security_definitions={}, definitions={}, parameter_definitions=PARAMETER_DEFINITIONS, resolver=RestyResolver('fakeapi')) assert operation.operation_id == 'fakeapi.foo_bar.search'
def test_parameter_reference(api): op_spec = make_operation(OPERATION3, definitions=False) operation = Swagger2Operation(api=api, method='GET', path='endpoint', path_parameters=[], operation=op_spec, app_produces=['application/json'], app_consumes=['application/json'], app_security=[], security_definitions={}, definitions={}, parameter_definitions=PARAMETER_DEFINITIONS, resolver=Resolver()) assert operation.parameters == [{'in': 'path', 'type': 'integer'}]
def test_resty_resolve_with_default_module_name_will_resolve_resource_root_as_configured( ): operation = Swagger2Operation(api=None, method='GET', path='/hello', path_parameters=[], operation={}, app_produces=['application/json'], app_consumes=['application/json'], app_security=[], security_definitions={}, definitions={}, parameter_definitions=PARAMETER_DEFINITIONS, resolver=RestyResolver( 'fakeapi', 'api_list')) assert operation.operation_id == 'fakeapi.hello.api_list'
def test_resty_resolve_operation_id(): operation = Swagger2Operation(api=None, method='GET', path='endpoint', path_parameters=[], operation={ 'operationId': 'fakeapi.hello.post_greeting', }, app_produces=['application/json'], app_consumes=['application/json'], app_security=[], security_definitions={}, definitions={}, parameter_definitions=PARAMETER_DEFINITIONS, resolver=RestyResolver('fakeapi')) assert operation.operation_id == 'fakeapi.hello.post_greeting'
def test_resty_resolve_with_default_module_name_and_x_router_controller_will_resolve_resource_root_get_as_search( ): operation = Swagger2Operation(api=None, method='GET', path='/hello', path_parameters=[], operation={ 'x-swagger-router-controller': 'fakeapi.hello', }, app_produces=['application/json'], app_consumes=['application/json'], app_security=[], security_definitions={}, definitions={}, parameter_definitions=PARAMETER_DEFINITIONS, resolver=RestyResolver('fakeapi')) assert operation.operation_id == 'fakeapi.hello.search'
def test_multiple_security_schemes_and(api): """Tests an operation with multiple security schemes in AND fashion.""" def return_api_key_name(func, in_, name): return name verify_api_key = mock.MagicMock(side_effect=return_api_key_name) api.security_handler_factory.verify_api_key = verify_api_key verify_multiple = mock.MagicMock(return_value='verify_multiple_result') api.security_handler_factory.verify_multiple_schemes = verify_multiple op_spec = make_operation(OPERATION9) operation = Swagger2Operation( api=api, method='GET', path='endpoint', path_parameters=[], operation=op_spec, app_produces=['application/json'], app_consumes=['application/json'], app_security=SECURITY_DEFINITIONS_2_KEYS, security_definitions=SECURITY_DEFINITIONS_2_KEYS, definitions=DEFINITIONS, parameter_definitions=PARAMETER_DEFINITIONS, resolver=Resolver()) assert isinstance(operation.function, types.FunctionType) assert verify_api_key.call_count == 2 verify_api_key.assert_any_call(math.ceil, 'header', 'X-Auth-1') verify_api_key.assert_any_call(math.ceil, 'header', 'X-Auth-2') # Assert verify_multiple_schemes is called with mapping from scheme name # to result of security_handler_factory.verify_api_key() verify_multiple.assert_called_with({ 'key1': 'X-Auth-1', 'key2': 'X-Auth-2' }) security_decorator = operation.security_decorator assert len(security_decorator.args[0]) == 1 assert security_decorator.args[0][0] == 'verify_multiple_result' assert security_decorator.args[1] is None assert operation.method == 'GET' assert operation.produces == ['application/json'] assert operation.consumes == ['application/json'] assert operation.security == [{'key1': [], 'key2': []}]
def test_operation_composed_definition(api): op_spec = make_operation(OPERATION8) operation = Swagger2Operation(api=api, method='GET', path='endpoint', path_parameters=[], operation=op_spec, app_produces=['application/json'], app_consumes=['application/json'], app_security=[], security_definitions=SECURITY_DEFINITIONS_REMOTE, definitions=DEFINITIONS, parameter_definitions=PARAMETER_DEFINITIONS, resolver=Resolver()) assert isinstance(operation.function, types.FunctionType) assert operation.method == 'GET' assert operation.produces == ['application/json'] assert operation.consumes == ['application/json'] assert operation.security == [{'oauth': ['uid']}] expected_body_schema = op_spec["parameters"][0]["schema"] expected_body_schema.update({'definitions': DEFINITIONS}) assert operation.body_schema == expected_body_schema