def test_generate_swagger_json(mocker, yaml_file): try: mocker.patch('__builtin__.open', create=True) except Exception: # Python3 mocker.patch('builtins.open', create=True) mocker.patch('swagger_aggregator.swagger_aggregator.yaml.load', return_value=yaml_file) mock_yaml = mocker.patch('swagger_aggregator.swagger_aggregator.yaml.dump') mocker.patch('swagger_aggregator.swagger_aggregator.SwaggerParser') mocker.patch('swagger_aggregator.swagger_aggregator.SwaggerAggregator.generate_operation_id_function') mocker.patch('swagger_aggregator.swagger_aggregator.SwaggerAggregator.get_spec_from_uri', return_value=('uri', {})) mocker.patch('swagger_aggregator.swagger_aggregator.uuid', return_value='string') agg = SwaggerAggregator('config.yaml', 'trax', 'air') def exclude_paths(swagger): return swagger agg.exclude_paths = exclude_paths def swagger_aggregate(): return {'identifications': {'spec': {'paths': {'123': {'get': {}}}, 'definitions': {'456': {'post': {}}}}, 'url': 'http://trax/v1'}, 'ingestion': {'spec': {'paths': {'789': {'delete': {}}}, 'definitions': {'147': {'put': {}}}}, 'url': 'http://air/v1'}} agg.get_aggregate_swagger = swagger_aggregate agg.generate_swagger_json() mock_yaml.assert_called_once_with({'info': {'version': '0.1', 'title': 'API Gateway'}, 'definitions': {'ingestion147': {'put': {}}, 'identifications456': {'post': {}}}, 'basePath': '/v1', 'swagger': '2.0', 'paths': {'123': {'get': {'operationId': 'swagger_aggregator.string'}}, '789': {'delete': {'operationId': 'swagger_aggregator.string'}}}}, default_flow_style=False)
def test_exclude_paths(mocker, yaml_file): swagger = { 'paths': { '/identifications/{id}/history/': { 'get': {}, 'post': {} }, 'path': { 'get': {}, 'post': {} } } } try: mocker.patch('__builtin__.open', create=True) except Exception: # Python3 mocker.patch('builtins.open', create=True) mocker.patch('swagger_aggregator.swagger_aggregator.yaml.load', return_value=yaml_file) agg = SwaggerAggregator('config.yaml', 'trax', 'air') assert agg.exclude_paths(swagger) == { 'paths': { '/identifications/{id}/history/': { 'get': {} }, 'path': { 'get': {}, 'post': {} } } }
def test_generate_operation_id_function(mocker, yaml_file): try: mocker.patch('__builtin__.open', create=True) except Exception: # Python3 mocker.patch('builtins.open', create=True) mocker.patch('swagger_aggregator.swagger_aggregator.yaml.load', return_value=yaml_file) agg = SwaggerAggregator('config.yaml', 'trax', 'air') mock_request = mocker.patch('swagger_aggregator.swagger_aggregator.requests') flask_mock = mocker.patch('swagger_aggregator.swagger_aggregator.flask') flask_mock.request.data = '{"trax": "air"}' flask_mock.request.query_string = 'query=test&test=success' flask_mock.request.form = {'form_test': ['success']} file_mock = MagicMock() flask_mock.request.files = {'file': file_mock} spec = { 'func_name': { 'operationId': 'test.operationid', 'parameters': [{ 'name': 'data', 'in': 'body' }, { 'name': 'file', 'in': 'form', 'type': 'file' }] } } agg.generate_operation_id_function(spec, {'func_name': 'url'}, {'func_name': '/path/'}, {'func_name': 'post'}, 'func_name')() assert len(mock_request.post.call_args_list) == 1
def test_filter_definition(mocker, yaml_file): try: mocker.patch('__builtin__.open', create=True) except Exception: # Python3 mocker.patch('builtins.open', create=True) mocker.patch('swagger_aggregator.swagger_aggregator.yaml.load', return_value=yaml_file) agg = SwaggerAggregator('config.yaml', 'trax', 'air') agg.swagger_parser = MagicMock() agg.swagger_parser.get_dict_definition.side_effect = ['identificationsTest', 'identificationsSubTest'] doc = [ {'id': '123', 'test': '456', 'sub': { 'id': '789', 'test': '147' }} ] assert agg.filter_definition(doc) == [ {'test': '456', 'sub': { 'test': '147' }} ]
def test_parse_value(yaml_file, mocker): try: mocker.patch('__builtin__.open', create=True) except Exception: # Python3 mocker.patch('builtins.open', create=True) mocker.patch('swagger_aggregator.swagger_aggregator.yaml.load', return_value=yaml_file) agg = SwaggerAggregator('config.yaml', 'trax', 'air') assert agg.parse_value('toto') == 'toto' assert agg.parse_value('totoidentifications_url') == 'tototrax' assert agg.parse_value('identifications_urlingestion_url') == 'traxair'
def test_get_spec_from_uri(mocker, yaml_file): try: mocker.patch('__builtin__.open', create=True) except Exception: # Python3 mocker.patch('builtins.open', create=True) mocker.patch('swagger_aggregator.swagger_aggregator.yaml.load', return_value=yaml_file) agg = SwaggerAggregator('config.yaml', 'trax', 'air') identifications_spec = { 'paths': { 'test': { 'get': { 'get': {} } }, 'path': { 'get': {}, 'post': {} } } } ingestion_spec = { 'paths': { 'test2': { 'post': { 'post': {} } }, 'path2': { 'get': {}, 'post': {} } } } agg.swagger_apis = { 'identifications': { 'spec': identifications_spec, 'url': 'http://trax/v1' }, 'ingestion': { 'spec': ingestion_spec, 'url': 'http://air/v1' } } assert agg.get_spec_from_uri('test', 'get') == ({ 'get': {} }, 'http://trax/v1') assert agg.get_spec_from_uri('test2', 'post') == ({ 'post': {} }, 'http://air/v1')
def test_get_aggregate_swagger(yaml_file, mocker): try: mocker.patch('__builtin__.open', create=True) except Exception: # Python3 mocker.patch('builtins.open', create=True) mocker.patch('swagger_aggregator.swagger_aggregator.yaml.load', return_value=yaml_file) mock_request = mocker.patch('swagger_aggregator.swagger_aggregator.requests') mock_request.get.return_value.json.return_value = 'swagger' agg = SwaggerAggregator('config.yaml', 'trax', 'air') assert agg.get_aggregate_swagger() == {'identifications': {'spec': 'swagger', 'url': 'http://trax/v1'}, 'ingestion': {'spec': 'swagger', 'url': 'http://air/v1'}}
def test_get_aggregate_swagger(yaml_file, mocker): try: mocker.patch('__builtin__.open', create=True) except Exception: # Python3 mocker.patch('builtins.open', create=True) mocker.patch('swagger_aggregator.swagger_aggregator.yaml.load', return_value=yaml_file) mock_request = mocker.patch( 'swagger_aggregator.swagger_aggregator.requests') mock_request.get.return_value.json.return_value = 'swagger' agg = SwaggerAggregator('config.yaml', 'trax', 'air') assert agg.get_aggregate_swagger() == { 'identifications': { 'spec': 'swagger', 'url': 'http://trax/v1' }, 'ingestion': { 'spec': 'swagger', 'url': 'http://air/v1' } }
def test_get_args(yaml_file, mocker): try: mocker.patch('__builtin__.open', create=True) except Exception: # Python3 mocker.patch('builtins.open', create=True) mocker.patch('swagger_aggregator.swagger_aggregator.yaml.load', return_value=yaml_file) agg = SwaggerAggregator('config.yaml', 'trax', 'air') assert agg.args_dict == { 'identifications_url': 'trax', 'ingestion_url': 'air' }
def test_filter_definition(mocker, yaml_file): try: mocker.patch('__builtin__.open', create=True) except Exception: # Python3 mocker.patch('builtins.open', create=True) mocker.patch('swagger_aggregator.swagger_aggregator.yaml.load', return_value=yaml_file) agg = SwaggerAggregator('config.yaml', 'trax', 'air') agg.swagger_parser = MagicMock() agg.swagger_parser.get_dict_definition.side_effect = [ 'identificationsTest', 'identificationsSubTest' ] doc = [{'id': '123', 'test': '456', 'sub': {'id': '789', 'test': '147'}}] assert agg.filter_definition(doc) == [{ 'test': '456', 'sub': { 'test': '147' } }]
def test_generate_operation_id_function(mocker, yaml_file): try: mocker.patch('__builtin__.open', create=True) except Exception: # Python3 mocker.patch('builtins.open', create=True) mocker.patch('swagger_aggregator.swagger_aggregator.yaml.load', return_value=yaml_file) agg = SwaggerAggregator('config.yaml', 'trax', 'air') mock_request = mocker.patch( 'swagger_aggregator.swagger_aggregator.requests') flask_mock = mocker.patch('swagger_aggregator.swagger_aggregator.flask') flask_mock.request.data = '{"trax": "air"}' flask_mock.request.query_string = 'query=test&test=success' flask_mock.request.form = {'form_test': ['success']} file_mock = MagicMock() flask_mock.request.files = {'file': file_mock} spec = { 'func_name': { 'operationId': 'test.operationid', 'parameters': [{ 'name': 'data', 'in': 'body' }, { 'name': 'file', 'in': 'form', 'type': 'file' }] } } agg.generate_operation_id_function(spec, {'func_name': 'url'}, {'func_name': '/path/'}, {'func_name': 'post'}, 'func_name')() assert len(mock_request.post.call_args_list) == 1
def test_get_spec_from_uri(mocker, yaml_file): try: mocker.patch('__builtin__.open', create=True) except Exception: # Python3 mocker.patch('builtins.open', create=True) mocker.patch('swagger_aggregator.swagger_aggregator.yaml.load', return_value=yaml_file) agg = SwaggerAggregator('config.yaml', 'trax', 'air') identifications_spec = { 'paths': { 'test': { 'get': {'get': {}} }, 'path': { 'get': {}, 'post': {} } } } ingestion_spec = { 'paths': { 'test2': { 'post': {'post': {}} }, 'path2': { 'get': {}, 'post': {} } } } agg.swagger_apis = {'identifications': {'spec': identifications_spec, 'url': 'http://trax/v1'}, 'ingestion': {'spec': ingestion_spec, 'url': 'http://air/v1'}} assert agg.get_spec_from_uri('test', 'get') == ({'get': {}}, 'http://trax/v1') assert agg.get_spec_from_uri('test2', 'post') == ({'post': {}}, 'http://air/v1')
def test_generate_swagger_json(mocker, yaml_file): try: mocker.patch('__builtin__.open', create=True) except Exception: # Python3 mocker.patch('builtins.open', create=True) mocker.patch('swagger_aggregator.swagger_aggregator.yaml.load', return_value=yaml_file) mock_yaml = mocker.patch('swagger_aggregator.swagger_aggregator.yaml.dump') mocker.patch('swagger_aggregator.swagger_aggregator.SwaggerParser') mocker.patch( 'swagger_aggregator.swagger_aggregator.SwaggerAggregator.generate_operation_id_function' ) mocker.patch( 'swagger_aggregator.swagger_aggregator.SwaggerAggregator.get_spec_from_uri', return_value=('uri', {})) mocker.patch('swagger_aggregator.swagger_aggregator.uuid', return_value='string') agg = SwaggerAggregator('config.yaml', 'trax', 'air') def exclude_paths(swagger): return swagger agg.exclude_paths = exclude_paths def swagger_aggregate(): return { 'identifications': { 'spec': { 'paths': { '123': { 'get': {} } }, 'definitions': { '456': { 'post': {} } } }, 'url': 'http://trax/v1' }, 'ingestion': { 'spec': { 'paths': { '789': { 'delete': {} } }, 'definitions': { '147': { 'put': {} } } }, 'url': 'http://air/v1' } } agg.get_aggregate_swagger = swagger_aggregate agg.generate_swagger_json() mock_yaml.assert_called_once_with( { 'info': { 'version': '0.1', 'title': 'API Gateway' }, 'definitions': { 'ingestion147': { 'put': {} }, 'identifications456': { 'post': {} } }, 'basePath': '/v1', 'swagger': '2.0', 'paths': { '123': { 'get': { 'operationId': 'swagger_aggregator.string' } }, '789': { 'delete': { 'operationId': 'swagger_aggregator.string' } } } }, default_flow_style=False)