Skip to content
This repository was archived by the owner on Jun 13, 2025. It is now read-only.
Merged
2 changes: 1 addition & 1 deletion upload/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -756,7 +756,7 @@ def validate_activated_repo(repository):
if repository.active and not repository.activated:
settings_url = f"{settings.CODECOV_DASHBOARD_URL}/{repository.author.service}/{repository.author.username}/{repository.name}/settings"
raise ValidationError(
f"This repository has been deactivated. To resume uploading to it, please activate the repository in the codecov UI: {settings_url}"
f"This repository is deactivated. To resume uploading to it, please activate the repository in the codecov UI: {settings_url}"
)


Expand Down
2 changes: 1 addition & 1 deletion upload/tests/test_helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,7 @@ def test_deactivated_repo(db, mocker):
with pytest.raises(ValidationError) as exp:
validate_activated_repo(repository)
assert exp.match(
f"This repository has been deactivated. To resume uploading to it, please activate the repository in the codecov UI: {settings_url}"
f"This repository is deactivated. To resume uploading to it, please activate the repository in the codecov UI: {settings_url}"
)


Expand Down
30 changes: 30 additions & 0 deletions upload/tests/views/test_commits.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from unittest.mock import patch

import pytest
from django.conf import settings
from django.urls import reverse
from rest_framework.exceptions import ValidationError
from rest_framework.test import APIClient
Expand Down Expand Up @@ -42,6 +43,35 @@ def test_get_repo_not_found(db):
assert exp.match("Repository not found")


def test_deactivated_repo(db):
repo = RepositoryFactory(
name="the_repo",
author__username="codecov",
author__service="github",
active=True,
activated=False,
)
repo.save()
repo_slug = f"{repo.author.username}::::{repo.name}"

client = APIClient()
client.credentials(HTTP_AUTHORIZATION="token " + repo.upload_token)
url = reverse(
"new_upload.commits",
args=[repo.author.service, repo_slug],
)
response = client.post(
url,
{"commitid": "commit_sha"},
format="json",
)
response_json = response.json()
assert response.status_code == 400
assert response_json == [
f"This repository is deactivated. To resume uploading to it, please activate the repository in the codecov UI: {settings.CODECOV_DASHBOARD_URL}/github/codecov/the_repo/settings"
]


def test_get_queryset(db):
target_repo = RepositoryFactory(
name="the_repo", author__username="codecov", author__service="github"
Expand Down
30 changes: 30 additions & 0 deletions upload/tests/views/test_reports.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from unittest.mock import patch

import pytest
from django.conf import settings
from django.urls import reverse
from rest_framework.test import APIClient
from shared.django_apps.core.tests.factories import (
Expand Down Expand Up @@ -39,6 +40,35 @@ def test_reports_get_not_allowed(client, mocker, db):
assert res.status_code == 405


def test_deactivated_repo(db):
repo = RepositoryFactory(
name="the_repo",
author__username="codecov",
author__service="github",
active=True,
activated=False,
)
commit = CommitFactory(repository=repo)
repo.save()
commit.save()
repo_slug = f"{repo.author.username}::::{repo.name}"

client = APIClient()
client.credentials(HTTP_AUTHORIZATION="token " + repo.upload_token)
url = reverse(
"new_upload.reports",
args=["github", repo_slug, commit.commitid],
)
response = client.post(
url, data={"code": "code1"}, headers={"User-Agent": "codecov-cli/0.4.7"}
)
response_json = response.json()
assert response.status_code == 400
assert response_json == [
f"This repository is deactivated. To resume uploading to it, please activate the repository in the codecov UI: {settings.CODECOV_DASHBOARD_URL}/github/codecov/the_repo/settings"
]


def test_reports_post(client, db, mocker):
mocked_call = mocker.patch.object(TaskService, "preprocess_upload")
mock_prometheus_metrics = mocker.patch("upload.metrics.API_UPLOAD_COUNTER.labels")
Expand Down
2 changes: 1 addition & 1 deletion upload/tests/views/test_uploads.py
Original file line number Diff line number Diff line change
Expand Up @@ -793,7 +793,7 @@ def test_deactivated_repo(db, mocker, mock_redis):
response_json = response.json()
assert response.status_code == 400
assert response_json == [
f"This repository has been deactivated. To resume uploading to it, please activate the repository in the codecov UI: {settings.CODECOV_DASHBOARD_URL}/github/codecov/the_repo/settings"
f"This repository is deactivated. To resume uploading to it, please activate the repository in the codecov UI: {settings.CODECOV_DASHBOARD_URL}/github/codecov/the_repo/settings"
]


Expand Down
6 changes: 5 additions & 1 deletion upload/views/commits.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,10 @@
repo_auth_custom_exception_handler,
)
from core.models import Commit
from upload.helpers import generate_upload_prometheus_metrics_labels
from upload.helpers import (
generate_upload_prometheus_metrics_labels,
validate_activated_repo,
)
from upload.metrics import API_UPLOAD_COUNTER
from upload.serializers import CommitSerializer
from upload.views.base import GetterMixin
Expand Down Expand Up @@ -65,6 +68,7 @@ def perform_create(self, serializer):
),
)
repository = self.get_repo()
validate_activated_repo(repository)

commit = serializer.save(repository=repository)

Expand Down
6 changes: 5 additions & 1 deletion upload/views/reports.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,10 @@
)
from reports.models import CommitReport, ReportResults
from services.task import TaskService
from upload.helpers import generate_upload_prometheus_metrics_labels
from upload.helpers import (
generate_upload_prometheus_metrics_labels,
validate_activated_repo,
)
from upload.metrics import API_UPLOAD_COUNTER
from upload.serializers import CommitReportSerializer, ReportResultsSerializer
from upload.views.base import GetterMixin
Expand Down Expand Up @@ -52,6 +55,7 @@ def perform_create(self, serializer):
),
)
repository = self.get_repo()
validate_activated_repo(repository)
commit = self.get_commit(repository)
log.info(
"Request to create new report",
Expand Down
Loading