diff --git a/codecov_cli/commands/process_test_results.py b/codecov_cli/commands/process_test_results.py index 3c5f19af9..0c903ea37 100644 --- a/codecov_cli/commands/process_test_results.py +++ b/codecov_cli/commands/process_test_results.py @@ -21,6 +21,7 @@ send_get_request, send_post_request, ) +from codecov_cli.helpers.upload_type import ReportType from codecov_cli.services.upload.file_finder import select_file_finder from codecov_cli.types import CommandContext, RequestResult, UploadCollectionResultFile @@ -103,7 +104,11 @@ def process_test_results( with sentry_sdk.start_transaction(op="task", name="Process Test Results"): with sentry_sdk.start_span(name="process_test_results"): file_finder = select_file_finder( - dir, exclude_folders, files, disable_search, report_type="test_results" + dir, + exclude_folders, + files, + disable_search, + report_type=ReportType.TEST_RESULTS, ) upload_collection_results: List[UploadCollectionResultFile] = ( diff --git a/codecov_cli/commands/upload.py b/codecov_cli/commands/upload.py index ebaf01cbb..62fc67e52 100644 --- a/codecov_cli/commands/upload.py +++ b/codecov_cli/commands/upload.py @@ -2,7 +2,6 @@ import os import pathlib import typing - import click import sentry_sdk @@ -11,6 +10,7 @@ from codecov_cli.helpers.options import global_options from codecov_cli.services.upload import do_upload_logic from codecov_cli.types import CommandContext +from codecov_cli.helpers.upload_type import report_type_from_str, ReportType logger = logging.getLogger("codecovcli") @@ -167,6 +167,7 @@ def _turn_env_vars_into_dict(ctx, params, value): ), click.option( "--report-type", + "report_type_str", help="The type of the file to upload, coverage by default. Possible values are: testing, coverage.", default="coverage", type=click.Choice(["coverage", "test_results"]), @@ -241,7 +242,7 @@ def do_upload( network_root_folder: pathlib.Path, plugin_names: typing.List[str], pull_request_number: typing.Optional[str], - report_type: str, + report_type_str: str, slug: typing.Optional[str], swift_project: typing.Optional[str], token: typing.Optional[str], @@ -261,6 +262,8 @@ def do_upload( extra_log_attributes=args, ), ) + + report_type: ReportType = report_type_from_str(report_type_str) do_upload_logic( cli_config, versioning_system, @@ -276,7 +279,9 @@ def do_upload( env_vars=env_vars, fail_on_error=fail_on_error, files_search_exclude_folders=list(files_search_exclude_folders), - files_search_explicitly_listed_files=list(files_search_explicitly_listed_files), + files_search_explicitly_listed_files=list( + files_search_explicitly_listed_files + ), files_search_root_folder=files_search_root_folder, flags=flags, gcov_args=gcov_args, @@ -296,7 +301,7 @@ def do_upload( slug=slug, swift_project=swift_project, token=token, - upload_file_type=report_type, + report_type=report_type, use_legacy_uploader=use_legacy_uploader, args=args, ) diff --git a/codecov_cli/commands/upload_coverage.py b/codecov_cli/commands/upload_coverage.py index 86b33dc69..efd873e6d 100644 --- a/codecov_cli/commands/upload_coverage.py +++ b/codecov_cli/commands/upload_coverage.py @@ -11,6 +11,7 @@ from codecov_cli.helpers.args import get_cli_args from codecov_cli.helpers.options import global_options from codecov_cli.opentelemetry import close_telem +from codecov_cli.helpers.upload_type import report_type_from_str, ReportType from codecov_cli.services.upload_coverage import upload_coverage_logic from codecov_cli.types import CommandContext @@ -56,7 +57,7 @@ def upload_coverage( plugin_names: typing.List[str], pull_request_number: typing.Optional[str], report_code: str, - report_type: str, + report_type_str: str, slug: typing.Optional[str], swift_project: typing.Optional[str], token: typing.Optional[str], @@ -72,7 +73,9 @@ def upload_coverage( ), ) - if not use_legacy_uploader and report_type == "coverage": + report_type = report_type_from_str(report_type_str) + + if not use_legacy_uploader and report_type == ReportType.COVERAGE: versioning_system = ctx.obj["versioning_system"] codecov_yaml = ctx.obj["codecov_yaml"] or {} cli_config = codecov_yaml.get("cli", {}) @@ -116,7 +119,7 @@ def upload_coverage( slug=slug, swift_project=swift_project, token=token, - upload_file_type=report_type, + report_type=report_type, use_legacy_uploader=use_legacy_uploader, args=args, ) @@ -132,7 +135,7 @@ def upload_coverage( git_service=git_service, fail_on_error=True, ) - if report_type == "coverage": + if report_type == ReportType.COVERAGE: ctx.invoke( create_report, token=token, @@ -171,7 +174,7 @@ def upload_coverage( plugin_names=plugin_names, pull_request_number=pull_request_number, report_code=report_code, - report_type=report_type, + report_type_str=report_type_str, slug=slug, swift_project=swift_project, token=token, diff --git a/codecov_cli/commands/upload_process.py b/codecov_cli/commands/upload_process.py index 87498fa0f..0dc7432a1 100644 --- a/codecov_cli/commands/upload_process.py +++ b/codecov_cli/commands/upload_process.py @@ -10,6 +10,7 @@ from codecov_cli.commands.upload import do_upload, global_upload_options from codecov_cli.helpers.args import get_cli_args from codecov_cli.helpers.options import global_options +from codecov_cli.helpers.upload_type import report_type_from_str, ReportType from codecov_cli.types import CommandContext logger = logging.getLogger("codecovcli") @@ -54,7 +55,7 @@ def upload_process( plugin_names: typing.List[str], pull_request_number: typing.Optional[str], report_code: str, - report_type: str, + report_type_str: str, slug: typing.Optional[str], swift_project: typing.Optional[str], token: typing.Optional[str], @@ -81,7 +82,9 @@ def upload_process( git_service=git_service, fail_on_error=True, ) - if report_type == "coverage": + + report_type = report_type_from_str(report_type_str) + if report_type == ReportType.COVERAGE: ctx.invoke( create_report, token=token, @@ -120,7 +123,7 @@ def upload_process( plugin_names=plugin_names, pull_request_number=pull_request_number, report_code=report_code, - report_type=report_type, + report_type_str=report_type_str, slug=slug, swift_project=swift_project, token=token, diff --git a/codecov_cli/helpers/upload_type.py b/codecov_cli/helpers/upload_type.py new file mode 100644 index 000000000..493bc8b53 --- /dev/null +++ b/codecov_cli/helpers/upload_type.py @@ -0,0 +1,15 @@ +from enum import Enum + + +class ReportType(Enum): + COVERAGE = "coverage" + TEST_RESULTS = "test_results" + + +def report_type_from_str(report_type_str: str) -> ReportType: + if report_type_str == "coverage": + return ReportType.COVERAGE + elif report_type_str == "test_results": + return ReportType.TEST_RESULTS + else: + raise ValueError(f"Invalid upload type: {report_type_str}") diff --git a/codecov_cli/opentelemetry.py b/codecov_cli/opentelemetry.py index 8fc2ae41d..089300071 100644 --- a/codecov_cli/opentelemetry.py +++ b/codecov_cli/opentelemetry.py @@ -7,9 +7,11 @@ def init_telem(ctx): - if ctx['disable_telem']: + if ctx["disable_telem"]: return - if ctx['enterprise_url']: # dont run on dedicated cloud + if ctx["enterprise_url"]: # dont run on dedicated cloud + return + if os.getenv("CODECOV_ENV", "production") == "test": return if os.getenv('CODECOV_ENV', 'production') == 'test': return diff --git a/codecov_cli/services/upload/__init__.py b/codecov_cli/services/upload/__init__.py index 09977cb77..fe6da7a6c 100644 --- a/codecov_cli/services/upload/__init__.py +++ b/codecov_cli/services/upload/__init__.py @@ -8,6 +8,7 @@ from codecov_cli.helpers.ci_adapters.base import CIAdapterBase from codecov_cli.helpers.request import log_warnings_and_errors_if_any from codecov_cli.helpers.versioning_systems import VersioningSystemInterface +from codecov_cli.helpers.upload_type import ReportType from codecov_cli.plugins import select_preparation_plugins from codecov_cli.services.upload.file_finder import select_file_finder from codecov_cli.services.upload.legacy_upload_sender import LegacyUploadSender @@ -59,7 +60,7 @@ def do_upload_logic( slug: typing.Optional[str], swift_project: typing.Optional[str], token: typing.Optional[str], - upload_file_type: str = "coverage", + report_type: ReportType = ReportType.COVERAGE, use_legacy_uploader: bool = False, ): plugin_config = { @@ -71,18 +72,18 @@ def do_upload_logic( "project_root": files_search_root_folder, "swift_project": swift_project, } - if upload_file_type == "coverage": + if report_type == ReportType.COVERAGE: preparation_plugins = select_preparation_plugins( cli_config, plugin_names, plugin_config ) - elif upload_file_type == "test_results": + elif report_type == ReportType.TEST_RESULTS: preparation_plugins = [] file_selector = select_file_finder( files_search_root_folder, files_search_exclude_folders, files_search_explicitly_listed_files, disable_search, - upload_file_type, + report_type, ) network_finder = select_network_finder( versioning_system, @@ -98,7 +99,7 @@ def do_upload_logic( plugin_config, ) try: - upload_data = collector.generate_upload_data(upload_file_type) + upload_data = collector.generate_upload_data(report_type) except click.ClickException as exp: if handle_no_reports_found: logger.info( @@ -138,7 +139,7 @@ def do_upload_logic( token=token, env_vars=env_vars, report_code=report_code, - upload_file_type=upload_file_type, + report_type=report_type, name=name, branch=branch, slug=slug, diff --git a/codecov_cli/services/upload/file_finder.py b/codecov_cli/services/upload/file_finder.py index ed67a745b..156f36599 100644 --- a/codecov_cli/services/upload/file_finder.py +++ b/codecov_cli/services/upload/file_finder.py @@ -6,6 +6,7 @@ import sentry_sdk from codecov_cli.helpers.folder_searcher import globs_to_regex, search_files +from codecov_cli.helpers.upload_type import ReportType from codecov_cli.types import UploadCollectionResultFile logger = logging.getLogger("codecovcli") @@ -193,20 +194,20 @@ def __init__( folders_to_ignore: Optional[List[Path]] = None, explicitly_listed_files: Optional[List[Path]] = None, disable_search: bool = False, - report_type: str = "coverage", + report_type: ReportType = ReportType.COVERAGE, ): self.search_root = search_root or Path(os.getcwd()) self.folders_to_ignore = list(folders_to_ignore) if folders_to_ignore else [] self.explicitly_listed_files = explicitly_listed_files or None self.disable_search = disable_search - self.report_type = report_type + self.report_type: ReportType = report_type def find_files(self) -> List[UploadCollectionResultFile]: with sentry_sdk.start_span(name="find_files"): - if self.report_type == "coverage": + if self.report_type == ReportType.COVERAGE: files_excluded_patterns = coverage_files_excluded_patterns files_patterns = coverage_files_patterns - elif self.report_type == "test_results": + elif self.report_type == ReportType.TEST_RESULTS: files_excluded_patterns = test_results_files_excluded_patterns files_patterns = test_results_files_patterns regex_patterns_to_exclude = globs_to_regex(files_excluded_patterns) @@ -214,17 +215,25 @@ def find_files(self) -> List[UploadCollectionResultFile]: files_paths: Iterable[Path] = [] user_files_paths = [] if self.explicitly_listed_files: - user_files_paths = self.get_user_specified_files(regex_patterns_to_exclude) + user_files_paths = self.get_user_specified_files( + regex_patterns_to_exclude + ) if not self.disable_search: regex_patterns_to_include = globs_to_regex(files_patterns) assert regex_patterns_to_include # this is never `None` files_paths = search_files( self.search_root, - default_folders_to_ignore + [str(folder) for folder in self.folders_to_ignore], + default_folders_to_ignore + + [str(folder) for folder in self.folders_to_ignore], filename_include_regex=regex_patterns_to_include, filename_exclude_regex=regex_patterns_to_exclude, ) result_files = [UploadCollectionResultFile(path) for path in files_paths] + user_result_files = [ + UploadCollectionResultFile(path) + for path in user_files_paths + if user_files_paths + ] user_result_files = [] for path in user_files_paths: @@ -232,7 +241,7 @@ def find_files(self) -> List[UploadCollectionResultFile]: user_result_files.append(UploadCollectionResultFile(path)) else: logger.warning( - f"File \"{path}\" could not be found or does not exist. Please enter in the full path or from the search root \"{self.search_root}\"", + f'File "{path}" could not be found or does not exist. Please enter in the full path or from the search root "{self.search_root}"', ) return list(set(result_files + user_result_files)) @@ -287,7 +296,7 @@ def select_file_finder( folders_to_ignore, explicitly_listed_files, disable_search, - report_type="coverage", + report_type: ReportType = ReportType.COVERAGE, ): return FileFinder( root_folder_to_search, diff --git a/codecov_cli/services/upload/upload_collector.py b/codecov_cli/services/upload/upload_collector.py index ec509c672..29beaf537 100644 --- a/codecov_cli/services/upload/upload_collector.py +++ b/codecov_cli/services/upload/upload_collector.py @@ -9,6 +9,7 @@ import click import sentry_sdk +from codecov_cli.helpers.upload_type import ReportType from codecov_cli.services.upload.file_finder import FileFinder from codecov_cli.services.upload.network_finder import NetworkFinder from codecov_cli.types import ( @@ -149,7 +150,9 @@ def _get_file_fixes( path, fixed_lines_without_reason, fixed_lines_with_reason, eof ) - def generate_upload_data(self, report_type="coverage") -> UploadCollectionResult: + def generate_upload_data( + self, report_type: ReportType = ReportType.COVERAGE + ) -> UploadCollectionResult: with sentry_sdk.start_span(name="upload_collector"): for prep in self.preparation_plugins: logger.debug(f"Running preparation plugin: {type(prep)}") @@ -158,10 +161,18 @@ def generate_upload_data(self, report_type="coverage") -> UploadCollectionResult with sentry_sdk.start_span(name="file_collector"): network = self.network_finder.find_files() report_files = self.file_finder.find_files() - logger.info(f"Found {len(report_files)} {report_type} files to report") + logger.info( + f"Found {len(report_files)} {report_type.value} files to report" + ) if not report_files: - if report_type == "test_results": + if report_type == ReportType.TEST_RESULTS: error_message = "No JUnit XML reports found. Please review our documentation (https://docs.codecov.com/docs/test-result-ingestion-beta) to generate and upload the file." + logger.error(error_message) + return UploadCollectionResult( + network=network, + files=[], + file_fixes=[], + ) else: error_message = "No coverage reports found. Please make sure you're generating reports successfully." raise click.ClickException( @@ -177,7 +188,7 @@ def generate_upload_data(self, report_type="coverage") -> UploadCollectionResult files=report_files, file_fixes=( self._produce_file_fixes(self.network_finder.find_files(True)) - if report_type == "coverage" + if report_type == ReportType.COVERAGE else [] ), ) diff --git a/codecov_cli/services/upload/upload_sender.py b/codecov_cli/services/upload/upload_sender.py index fa553b744..450f68385 100644 --- a/codecov_cli/services/upload/upload_sender.py +++ b/codecov_cli/services/upload/upload_sender.py @@ -10,6 +10,7 @@ from codecov_cli import __version__ as codecov_cli_version from codecov_cli.helpers.config import CODECOV_INGEST_URL from codecov_cli.helpers.encoder import encode_slug +from codecov_cli.helpers.upload_type import ReportType from codecov_cli.helpers.request import ( get_token_header, send_post_request, @@ -32,7 +33,7 @@ def send_upload_data( token: typing.Optional[str], env_vars: typing.Dict[str, str], report_code: str, - upload_file_type: str = "coverage", + report_type: ReportType = ReportType.COVERAGE, name: typing.Optional[str] = None, branch: typing.Optional[str] = None, slug: typing.Optional[str] = None, @@ -55,6 +56,10 @@ def send_upload_data( with sentry_sdk.start_span(name="upload_sender"): with sentry_sdk.start_span(name="upload_sender_preparation"): + file_not_found = False + if report_type == ReportType.TEST_RESULTS and not upload_data.files: + file_not_found = True + data = { "ci_service": ci_service, "ci_url": build_url, @@ -64,7 +69,9 @@ def send_upload_data( "job_code": job_code, "name": name, "version": codecov_cli_version, + "file_not_found": file_not_found, } + if upload_coverage: data["branch"] = branch data["code"] = report_code @@ -76,7 +83,7 @@ def send_upload_data( upload_url = enterprise_url or CODECOV_INGEST_URL url, data = self.get_url_and_possibly_update_data( data, - upload_file_type, + report_type, upload_url, git_service, branch, @@ -87,7 +94,7 @@ def send_upload_data( ) # Data that goes to storage reports_payload = self._generate_payload( - upload_data, env_vars, upload_file_type + upload_data, env_vars, report_type ) with sentry_sdk.start_span(name="upload_sender_storage_request"): @@ -97,6 +104,13 @@ def send_upload_data( data=data, headers=headers, ) + + if file_not_found: + logger.info( + "No test results reports found. Triggering notifications without uploading." + ) + return resp_from_codecov + if resp_from_codecov.status_code >= 400: return resp_from_codecov resp_json_obj = json.loads(resp_from_codecov.text) @@ -120,10 +134,10 @@ def _generate_payload( self, upload_data: UploadCollectionResult, env_vars: typing.Dict[str, str], - upload_file_type="coverage", + report_type: ReportType = ReportType.COVERAGE, ) -> bytes: network_files = upload_data.network - if upload_file_type == "coverage": + if report_type == ReportType.COVERAGE: payload = { "report_fixes": { "format": "legacy", @@ -133,7 +147,7 @@ def _generate_payload( "coverage_files": self._get_files(upload_data), "metadata": {}, } - elif upload_file_type == "test_results": + elif report_type == ReportType.TEST_RESULTS: payload = { "test_results_files": self._get_files(upload_data), } @@ -191,7 +205,7 @@ def _get_format_info(self, file: UploadCollectionResultFile): def get_url_and_possibly_update_data( self, data, - report_type, + report_type: ReportType, upload_url, git_service, branch, @@ -199,18 +213,20 @@ def get_url_and_possibly_update_data( commit_sha, report_code, upload_coverage=False, + file_not_found=False, ): - if report_type == "coverage": + if report_type == ReportType.COVERAGE: base_url = f"{upload_url}/upload/{git_service}/{encoded_slug}" if upload_coverage: url = f"{base_url}/upload-coverage" else: url = f"{base_url}/commits/{commit_sha}/reports/{report_code}/uploads" - elif report_type == "test_results": + elif report_type == ReportType.TEST_RESULTS: data["slug"] = encoded_slug data["branch"] = branch data["commit"] = commit_sha data["service"] = git_service + data["file_not_found"] = file_not_found url = f"{upload_url}/upload/test_results/v1" return url, data diff --git a/codecov_cli/services/upload_coverage/__init__.py b/codecov_cli/services/upload_coverage/__init__.py index 9f53a5540..4f4c98d3e 100644 --- a/codecov_cli/services/upload_coverage/__init__.py +++ b/codecov_cli/services/upload_coverage/__init__.py @@ -4,6 +4,7 @@ from codecov_cli.helpers.ci_adapters.base import CIAdapterBase from codecov_cli.helpers.versioning_systems import VersioningSystemInterface from codecov_cli.services.upload import do_upload_logic +from codecov_cli.helpers.upload_type import ReportType def upload_coverage_logic( @@ -44,7 +45,7 @@ def upload_coverage_logic( swift_project: typing.Optional[str], token: typing.Optional[str], use_legacy_uploader: bool, - upload_file_type: str = "coverage", + report_type: ReportType = ReportType.COVERAGE, args: dict = None, ): return do_upload_logic( @@ -86,5 +87,5 @@ def upload_coverage_logic( swift_project=swift_project, token=token, use_legacy_uploader=use_legacy_uploader, - upload_file_type=upload_file_type, + report_type=report_type, ) diff --git a/tests/helpers/test_upload_sender.py b/tests/helpers/test_upload_sender.py index b727708b3..0d7863223 100644 --- a/tests/helpers/test_upload_sender.py +++ b/tests/helpers/test_upload_sender.py @@ -2,6 +2,7 @@ import re from pathlib import Path +from copy import deepcopy import pytest import responses from responses import matchers @@ -9,15 +10,20 @@ from codecov_cli import __version__ as codecov_cli_version from codecov_cli.helpers.encoder import encode_slug from codecov_cli.services.upload.upload_sender import UploadSender -from codecov_cli.types import UploadCollectionResult, UploadCollectionResultFileFixer +from codecov_cli.types import ( + UploadCollectionResult, + UploadCollectionResultFileFixer, + UploadCollectionResultFile, +) from tests.data import reports_examples +from codecov_cli.helpers.upload_type import ReportType upload_collection = UploadCollectionResult(["1", "apple.py", "3"], [], []) random_token = "f359afb9-8a2a-42ab-a448-c3d267ff495b" random_sha = "845548c6b95223f12e8317a1820705f64beaf69e" named_upload_data = { "args": None, - "upload_file_type": "coverage", + "report_type": ReportType.COVERAGE, "report_code": "report_code", "env_vars": {}, "name": "name", @@ -32,7 +38,7 @@ "git_service": "github", } test_results_named_upload_data = { - "upload_file_type": "test_results", + "report_type": ReportType.TEST_RESULTS, "report_code": "report_code", "env_vars": {}, "name": "name", @@ -55,6 +61,7 @@ "job_code": "job_code", "name": "name", "version": codecov_cli_version, + "file_not_found": False, } @@ -110,6 +117,18 @@ def mocked_test_results_endpoint(mocked_responses): yield resp +@pytest.fixture +def mocked_test_results_endpoint_file_not_found(mocked_responses): + resp = responses.Response( + responses.POST, + "https://ingest.codecov.io/upload/test_results/v1", + status=200, + json={}, + ) + mocked_responses.add(resp) + yield resp + + @pytest.fixture def mocked_storage_server(mocked_responses): resp = responses.Response(responses.PUT, "https://puturl.com", status=200) @@ -239,7 +258,11 @@ def test_upload_sender_post_called_with_right_parameters_and_upload_coverage( ) # test dict is a subset of the other def test_upload_sender_post_called_with_right_parameters_test_results( - self, mocked_responses, mocked_test_results_endpoint, mocked_storage_server + self, + mocked_responses, + mocked_test_results_endpoint, + mocked_storage_server, + tmp_path, ): headers = {"Authorization": f"token {random_token}"} @@ -248,8 +271,15 @@ def test_upload_sender_post_called_with_right_parameters_test_results( matchers.header_matcher(headers), ] + ta_upload_collection = deepcopy(upload_collection) + + test_path = tmp_path / "test_results.xml" + test_path.write_bytes(b"test_data") + + ta_upload_collection.files = [UploadCollectionResultFile(test_path)] + sending_result = UploadSender().send_upload_data( - upload_collection, + ta_upload_collection, random_sha, random_token, **test_results_named_upload_data, @@ -271,6 +301,41 @@ def test_upload_sender_post_called_with_right_parameters_test_results( assert put_req_made.url == "https://puturl.com/" assert "test_results_files" in put_req_made.body.decode("utf-8") + def test_upload_sender_post_called_with_right_parameters_test_results_file_not_found( + self, + mocked_responses, + mocked_test_results_endpoint_file_not_found, + tmp_path, + ): + headers = {"Authorization": f"token {random_token}"} + + req_data = deepcopy(request_data) + req_data["file_not_found"] = True + + mocked_legacy_upload_endpoint.match = [ + matchers.json_params_matcher(req_data), + matchers.header_matcher(headers), + ] + + sending_result = UploadSender().send_upload_data( + upload_collection, + random_sha, + random_token, + **test_results_named_upload_data, + ) + assert sending_result.error is None + assert sending_result.warnings == [] + + assert len(mocked_responses.calls) == 1 + + post_req_made = mocked_responses.calls[0].request + response = json.loads(mocked_responses.calls[0].response.text) + assert response.get("raw_upload_location") is None + assert post_req_made.url == "https://ingest.codecov.io/upload/test_results/v1" + assert ( + post_req_made.headers.items() >= headers.items() + ) # test dict is a subset of the other + def test_upload_sender_post_called_with_right_parameters_tokenless( self, mocked_responses, diff --git a/tests/services/upload/test_coverage_file_finder.py b/tests/services/upload/test_coverage_file_finder.py index d655367d8..e5d5b9350 100644 --- a/tests/services/upload/test_coverage_file_finder.py +++ b/tests/services/upload/test_coverage_file_finder.py @@ -3,6 +3,7 @@ import pytest +from codecov_cli.helpers.upload_type import ReportType from codecov_cli.services.upload.file_finder import FileFinder from codecov_cli.types import UploadCollectionResultFile @@ -145,12 +146,16 @@ def test_find_coverage_files_test_results(self, tmp_path): expected = { UploadCollectionResultFile((tmp_path / file)) for file in should_find } - actual = set(FileFinder(tmp_path, report_type="test_results").find_files()) + actual = set( + FileFinder(tmp_path, report_type=ReportType.TEST_RESULTS).find_files() + ) assert actual == expected extra = tmp_path / "sub" / "nosetests.junit.xml" extra.touch() - actual = set(FileFinder(tmp_path, report_type="test_results").find_files()) + actual = set( + FileFinder(tmp_path, report_type=ReportType.TEST_RESULTS).find_files() + ) assert actual - expected == {UploadCollectionResultFile(extra)} diff --git a/tests/services/upload/test_upload_service.py b/tests/services/upload/test_upload_service.py index 08a41e6f1..fd31edc2d 100644 --- a/tests/services/upload/test_upload_service.py +++ b/tests/services/upload/test_upload_service.py @@ -2,6 +2,7 @@ import pytest from click.testing import CliRunner +from codecov_cli.helpers.upload_type import ReportType from codecov_cli.services.upload import ( LegacyUploadSender, UploadCollector, @@ -47,7 +48,7 @@ def test_do_upload_logic_happy_path_legacy_uploader(mocker): cli_config, versioning_system, ci_adapter, - upload_file_type="coverage", + report_type=ReportType.COVERAGE, commit_sha="commit_sha", report_code="report_code", build_code="build_code", @@ -98,21 +99,23 @@ def test_do_upload_logic_happy_path_legacy_uploader(mocker): "swift_project": "App", }, ) - mock_select_file_finder.assert_called_with(None, None, None, False, "coverage") + mock_select_file_finder.assert_called_with( + None, None, None, False, ReportType.COVERAGE + ) mock_select_network_finder.assert_called_with( versioning_system, network_filter=None, network_prefix=None, network_root_folder=None, ) - mock_generate_upload_data.assert_called_with("coverage") + mock_generate_upload_data.assert_called_with(ReportType.COVERAGE) mock_send_upload_data.assert_called_with( upload_data=mock_generate_upload_data.return_value, commit_sha="commit_sha", token="token", env_vars=None, report_code="report_code", - upload_file_type="coverage", + report_type=ReportType.COVERAGE, name="name", branch="branch", slug="slug", @@ -161,7 +164,7 @@ def test_do_upload_logic_happy_path(mocker): cli_config, versioning_system, ci_adapter, - upload_file_type="coverage", + report_type=ReportType.COVERAGE, commit_sha="commit_sha", report_code="report_code", build_code="build_code", @@ -210,21 +213,23 @@ def test_do_upload_logic_happy_path(mocker): "swift_project": "App", }, ) - mock_select_file_finder.assert_called_with(None, None, None, False, "coverage") + mock_select_file_finder.assert_called_with( + None, None, None, False, ReportType.COVERAGE + ) mock_select_network_finder.assert_called_with( versioning_system, network_filter=None, network_prefix=None, network_root_folder=None, ) - mock_generate_upload_data.assert_called_with("coverage") + mock_generate_upload_data.assert_called_with(ReportType.COVERAGE) mock_send_upload_data.assert_called_with( upload_data=mock_generate_upload_data.return_value, commit_sha="commit_sha", token="token", env_vars=None, report_code="report_code", - upload_file_type="coverage", + report_type=ReportType.COVERAGE, name="name", branch="branch", slug="slug", @@ -269,7 +274,7 @@ def test_do_upload_logic_dry_run(mocker): cli_config, versioning_system, ci_adapter, - upload_file_type="coverage", + report_type=ReportType.COVERAGE, commit_sha="commit_sha", report_code="report_code", build_code="build_code", @@ -299,7 +304,9 @@ def test_do_upload_logic_dry_run(mocker): enterprise_url=None, ) out_bytes = parse_outstreams_into_log_lines(outstreams[0].getvalue()) - mock_select_file_finder.assert_called_with(None, None, None, False, "coverage") + mock_select_file_finder.assert_called_with( + None, None, None, False, ReportType.COVERAGE + ) mock_select_network_finder.assert_called_with( versioning_system, network_filter=None, @@ -379,7 +386,7 @@ def test_do_upload_logic_verbose(mocker, use_verbose_option): slug="slug", swift_project="App", token="token", - upload_file_type="coverage", + report_type=ReportType.COVERAGE, use_legacy_uploader=True, ) out_bytes = parse_outstreams_into_log_lines(outstreams[0].getvalue()) @@ -434,7 +441,7 @@ def side_effect(*args, **kwargs): cli_config, versioning_system, ci_adapter, - upload_file_type="coverage", + report_type=ReportType.COVERAGE, commit_sha="commit_sha", report_code="report_code", build_code="build_code", @@ -489,14 +496,16 @@ def side_effect(*args, **kwargs): "swift_project": "App", }, ) - mock_select_file_finder.assert_called_with(None, None, None, False, "coverage") + mock_select_file_finder.assert_called_with( + None, None, None, False, ReportType.COVERAGE + ) mock_select_network_finder.assert_called_with( versioning_system, network_filter=None, network_prefix=None, network_root_folder=None, ) - mock_generate_upload_data.assert_called_with("coverage") + mock_generate_upload_data.assert_called_with(ReportType.COVERAGE) mock_upload_completion_call.assert_called_with( commit_sha="commit_sha", slug="slug", @@ -537,7 +546,7 @@ def side_effect(*args, **kwargs): cli_config, versioning_system, ci_adapter, - upload_file_type="coverage", + report_type=ReportType.COVERAGE, commit_sha="commit_sha", report_code="report_code", build_code="build_code", @@ -583,14 +592,16 @@ def side_effect(*args, **kwargs): "swift_project": "App", }, ) - mock_select_file_finder.assert_called_with(None, None, None, False, "coverage") + mock_select_file_finder.assert_called_with( + None, None, None, False, ReportType.COVERAGE + ) mock_select_network_finder.assert_called_with( versioning_system, network_filter=None, network_prefix=None, network_root_folder=None, ) - mock_generate_upload_data.assert_called_with("coverage") + mock_generate_upload_data.assert_called_with(ReportType.COVERAGE) def test_do_upload_logic_happy_path_test_results(mocker): @@ -651,7 +662,7 @@ def test_do_upload_logic_happy_path_test_results(mocker): slug="slug", swift_project="App", token="token", - upload_file_type="test_results", + report_type=ReportType.TEST_RESULTS, ) out_bytes = parse_outstreams_into_log_lines(outstreams[0].getvalue()) assert out_bytes == [ @@ -662,21 +673,23 @@ def test_do_upload_logic_happy_path_test_results(mocker): assert res == UploadSender.send_upload_data.return_value mock_select_preparation_plugins.assert_not_called - mock_select_file_finder.assert_called_with(None, None, None, False, "test_results") + mock_select_file_finder.assert_called_with( + None, None, None, False, ReportType.TEST_RESULTS + ) mock_select_network_finder.assert_called_with( versioning_system, network_filter="some_dir", network_prefix="hello/", network_root_folder="root/", ) - mock_generate_upload_data.assert_called_with("test_results") + mock_generate_upload_data.assert_called_with(ReportType.TEST_RESULTS) mock_send_upload_data.assert_called_with( upload_data=mock_generate_upload_data.return_value, commit_sha="commit_sha", token="token", env_vars=None, report_code="report_code", - upload_file_type="test_results", + report_type=ReportType.TEST_RESULTS, name="name", branch="branch", slug="slug",