def test_when_requests_are_successful(self, mock_run_request): mock_run_request.side_effect = ["foo", "bar"] node = EndpointNode( { "endpoints": [ { "name": "foo", "requests": [ {"name": "First", "path": "http://foo.com/first",}, { "name": "Second", "path": "http://foo.com/second", }, ], } ], "name": "node", "requests": [], } ) requests_gen = node.run() requests = [] for request in requests_gen: requests.append(request) assert len(requests) == 2 assert requests == ["foo", "bar"]
def scan(): """Caller function that tries to scans the file and write the report.""" spec_path = settings["spec_path"] no_report = settings["no_report"] open_browser = settings["open_browser"] try: api_spec = load_config_file(spec_path) except FileNotFoundError as e: error_message = f"Could not find API spec file: {spec_path}. {str(e)}" logger.error(error_message) raise SystemExit(ExitCode.USAGE_ERROR) except EmptyConfigFileError as e: error_message = f"API spec file is empty. {str(e)}" logger.error(error_message) raise SystemExit(ExitCode.USAGE_ERROR) except yaml.YAMLError as e: error_message = "Error loading specification file." error_message = "{}\nPyYAML: {}".format(error_message, str(e)) logger.error(error_message) raise SystemExit(ExitCode.USAGE_ERROR) try: root_node = EndpointNode(api_spec) results = root_node.run() except ( InvalidKeyError, KeyError, InvalidPythonCodeError, ) as e: error_message = "Error loading API spec." error_message = "{} {}".format(error_message, str(e)) logger.error(error_message) raise SystemExit(ExitCode.USAGE_ERROR) if no_report: write_without_generating_report(results) else: try: write_report(results) if open_browser: open_report_in_browser() except (BadConfigurationError, InvalidPythonCodeError) as e: logger.error(e) raise SystemExit(ExitCode.USAGE_ERROR) session.exit()
def scan(): spec_path = settings["spec_path"] try: api_spec = load_config_file(spec_path) except FileNotFoundError as e: error_message = f"Could not find API spec file: {spec_path}. {str(e)}" logger.error(error_message) raise SystemExit(ExitCode.USAGE_ERROR) except EmptyConfigFileError as e: error_message = f"API spec file is empty. {str(e)}" logger.error(error_message) raise SystemExit(ExitCode.USAGE_ERROR) except (yaml.YAMLError, FileFormatNotSupportedError) as e: logger.error(e) raise SystemExit(ExitCode.USAGE_ERROR) try: if API_KEY not in api_spec: raise MissingMandatoryKeyError({API_KEY}, ROOT_SCOPE) root_node = EndpointNode(api_spec[API_KEY]) results = root_node.run() except ( InvalidKeyError, MissingMandatoryKeyError, KeyError, InvalidPythonCodeError, ) as e: error_message = "Error loading API spec." error_message = "{} {}".format(error_message, str(e)) logger.error(error_message) raise SystemExit(ExitCode.USAGE_ERROR) try: write_report(results) except (BadConfigurationError, InvalidPythonCodeError) as e: logger.error(e) raise SystemExit(ExitCode.USAGE_ERROR) session.exit()
def scan(spec_path, output_path, config_path, reporter, template, log_level): """Automated Testing and Documentation for your REST API.""" logging.basicConfig(level=log_level, format="%(message)s") logger = logging.getLogger(__name__) settings.save_preferences( **{ "spec_path": spec_path, "output_path": output_path, "config_path": config_path, "reporter": reporter, "template": template, }) spec_path = settings["spec_path"] try: api_spec = load_config_file(spec_path) except FileNotFoundError as e: error_message = f"Could not find API spec file: {spec_path}. {str(e)}" logger.error(error_message) return except EmptyConfigFileError as e: error_message = f"API spec file is empty. {str(e)}" logger.error(error_message) return except (yaml.YAMLError, FileFormatNotSupportedError) as e: logger.error(e) return try: if API_KEY not in api_spec: raise MissingMandatoryKeyError({API_KEY}, ROOT_SCOPE) root_node = EndpointNode(api_spec[API_KEY]) Reporter(settings["output_path"], settings["reporter"], settings["template"]).write(root_node.run()) except (InvalidKeyError, MissingMandatoryKeyError, KeyError) as e: error_message = "Error loading API spec." error_message = "{} {}".format(error_message, str(e)) logger.error(error_message) return
def test_when_request_fails(self, mock_run_request, mock_session, caplog): mock_run_request.side_effect = ["foo", Exception("error: bar")] node = EndpointNode( { "endpoints": [ { "name": "foo", "requests": [ {"name": "First", "path": "http://foo.com/first",}, { "name": "Second", "path": "http://foo.com/second", }, ], } ], "name": "node", "requests": [], } ) requests = [] with caplog.at_level(logging.ERROR): requests_gen = node.run() for request in requests_gen: requests.append(request) assert len(requests) == 1 assert ( "\nError to make request `http://foo.com/second`. \nerror: bar\n" in caplog.text ) assert mock_run_request.call_count == 2 assert mock_session.exit_code == ExitCode.REQUEST_ERROR
def scan(): """Caller function that tries to scans the file and write the report.""" spec_path = settings["spec_path"] try: api_spec = load_config_file(spec_path) except FileNotFoundError as e: error_message = f"Could not find API spec file: {spec_path}. {str(e)}" logger.error(error_message) raise SystemExit(ExitCode.USAGE_ERROR) except EmptyConfigFileError as e: error_message = f"API spec file is empty. {str(e)}" logger.error(error_message) raise SystemExit(ExitCode.USAGE_ERROR) except yaml.YAMLError as e: error_message = "Error loading specification file." error_message = "{}\nPyYAML: {}".format(error_message, str(e)) logger.error(error_message) raise SystemExit(ExitCode.USAGE_ERROR) try: root_node = EndpointNode(api_spec) results = root_node.run() except ( InvalidKeyError, KeyError, InvalidPythonCodeError, ) as e: error_message = "Error loading API spec." error_message = "{} {}".format(error_message, str(e)) logger.error(error_message) raise SystemExit(ExitCode.USAGE_ERROR) _write(results) write_summary() session.exit()