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_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_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_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)