diff --git a/apps/worker/tasks/tests/unit/test_upload_finisher_task.py b/apps/worker/tasks/tests/unit/test_upload_finisher_task.py index 31f806f182..55bd762ae3 100644 --- a/apps/worker/tasks/tests/unit/test_upload_finisher_task.py +++ b/apps/worker/tasks/tests/unit/test_upload_finisher_task.py @@ -13,7 +13,11 @@ from database.tests.factories.timeseries import DatasetFactory from helpers.checkpoint_logger import _kwargs_key from helpers.checkpoint_logger.flows import UploadFlow -from helpers.exceptions import RepositoryWithoutValidBotError +from helpers.exceptions import ( + NoConfiguredAppsAvailable, + OwnerWithoutValidBotError, + RepositoryWithoutValidBotError, +) from helpers.log_context import LogContext, set_log_context from services.lock_manager import LockRetry from services.processing.intermediate import intermediate_report_key @@ -99,6 +103,32 @@ def test_load_commit_diff_no_bot(mocker, mock_configuration, dbsession): assert diff is None +def test_load_commit_diff_no_configured_apps(mocker, mock_configuration, dbsession): + commit = CommitFactory.create() + dbsession.add(commit) + dbsession.flush() + mock_get_repo_service = mocker.patch( + "tasks.upload_finisher.get_repo_provider_service" + ) + mock_get_repo_service.side_effect = NoConfiguredAppsAvailable( + apps_count=1, rate_limited_count=1, suspended_count=0 + ) + diff = load_commit_diff(commit) + assert diff is None + + +def test_load_commit_diff_owner_without_bot(mocker, mock_configuration, dbsession): + commit = CommitFactory.create() + dbsession.add(commit) + dbsession.flush() + mock_get_repo_service = mocker.patch( + "tasks.upload_finisher.get_repo_provider_service" + ) + mock_get_repo_service.side_effect = OwnerWithoutValidBotError() + diff = load_commit_diff(commit) + assert diff is None + + def test_mark_uploads_as_failed(dbsession): commit = CommitFactory.create() dbsession.add(commit) diff --git a/apps/worker/tasks/upload_finisher.py b/apps/worker/tasks/upload_finisher.py index 498b6f104b..619e16b7e1 100644 --- a/apps/worker/tasks/upload_finisher.py +++ b/apps/worker/tasks/upload_finisher.py @@ -14,7 +14,11 @@ from database.models.core import GITHUB_APP_INSTALLATION_DEFAULT_NAME from database.models.reports import Upload from helpers.checkpoint_logger.flows import UploadFlow -from helpers.exceptions import RepositoryWithoutValidBotError +from helpers.exceptions import ( + NoConfiguredAppsAvailable, + OwnerWithoutValidBotError, + RepositoryWithoutValidBotError, +) from helpers.github_installation import get_installation_name_for_owner_for_task from helpers.save_commit_error import save_commit_error from services.comparison import get_or_create_comparison @@ -931,5 +935,15 @@ def load_commit_diff(commit: Commit, task_name: str | None = None) -> dict | Non "Could not apply diff to report because there is no valid bot found for that repo", exc_info=True, ) + except (NoConfiguredAppsAvailable, OwnerWithoutValidBotError): + save_commit_error( + commit, + error_code=CommitErrorTypes.REPO_BOT_INVALID.value, + ) + + log.warning( + "Could not apply diff to report because no valid GitHub app is configured for that owner", + exc_info=True, + ) return None