Skip to content
This repository was archived by the owner on Jun 13, 2025. It is now read-only.

Commit 02f2f83

Browse files
828 repo validation throughout upload flow (#948)
1 parent 5495e13 commit 02f2f83

File tree

7 files changed

+73
-5
lines changed

7 files changed

+73
-5
lines changed

upload/helpers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -756,7 +756,7 @@ def validate_activated_repo(repository):
756756
if repository.active and not repository.activated:
757757
settings_url = f"{settings.CODECOV_DASHBOARD_URL}/{repository.author.service}/{repository.author.username}/{repository.name}/settings"
758758
raise ValidationError(
759-
f"This repository has been deactivated. To resume uploading to it, please activate the repository in the codecov UI: {settings_url}"
759+
f"This repository is deactivated. To resume uploading to it, please activate the repository in the codecov UI: {settings_url}"
760760
)
761761

762762

upload/tests/test_helpers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ def test_deactivated_repo(db, mocker):
264264
with pytest.raises(ValidationError) as exp:
265265
validate_activated_repo(repository)
266266
assert exp.match(
267-
f"This repository has been deactivated. To resume uploading to it, please activate the repository in the codecov UI: {settings_url}"
267+
f"This repository is deactivated. To resume uploading to it, please activate the repository in the codecov UI: {settings_url}"
268268
)
269269

270270

upload/tests/views/test_commits.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from unittest.mock import patch
22

33
import pytest
4+
from django.conf import settings
45
from django.urls import reverse
56
from rest_framework.exceptions import ValidationError
67
from rest_framework.test import APIClient
@@ -42,6 +43,35 @@ def test_get_repo_not_found(db):
4243
assert exp.match("Repository not found")
4344

4445

46+
def test_deactivated_repo(db):
47+
repo = RepositoryFactory(
48+
name="the_repo",
49+
author__username="codecov",
50+
author__service="github",
51+
active=True,
52+
activated=False,
53+
)
54+
repo.save()
55+
repo_slug = f"{repo.author.username}::::{repo.name}"
56+
57+
client = APIClient()
58+
client.credentials(HTTP_AUTHORIZATION="token " + repo.upload_token)
59+
url = reverse(
60+
"new_upload.commits",
61+
args=[repo.author.service, repo_slug],
62+
)
63+
response = client.post(
64+
url,
65+
{"commitid": "commit_sha"},
66+
format="json",
67+
)
68+
response_json = response.json()
69+
assert response.status_code == 400
70+
assert response_json == [
71+
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"
72+
]
73+
74+
4575
def test_get_queryset(db):
4676
target_repo = RepositoryFactory(
4777
name="the_repo", author__username="codecov", author__service="github"

upload/tests/views/test_reports.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from unittest.mock import patch
22

33
import pytest
4+
from django.conf import settings
45
from django.urls import reverse
56
from rest_framework.test import APIClient
67
from shared.django_apps.core.tests.factories import (
@@ -39,6 +40,35 @@ def test_reports_get_not_allowed(client, mocker, db):
3940
assert res.status_code == 405
4041

4142

43+
def test_deactivated_repo(db):
44+
repo = RepositoryFactory(
45+
name="the_repo",
46+
author__username="codecov",
47+
author__service="github",
48+
active=True,
49+
activated=False,
50+
)
51+
commit = CommitFactory(repository=repo)
52+
repo.save()
53+
commit.save()
54+
repo_slug = f"{repo.author.username}::::{repo.name}"
55+
56+
client = APIClient()
57+
client.credentials(HTTP_AUTHORIZATION="token " + repo.upload_token)
58+
url = reverse(
59+
"new_upload.reports",
60+
args=["github", repo_slug, commit.commitid],
61+
)
62+
response = client.post(
63+
url, data={"code": "code1"}, headers={"User-Agent": "codecov-cli/0.4.7"}
64+
)
65+
response_json = response.json()
66+
assert response.status_code == 400
67+
assert response_json == [
68+
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"
69+
]
70+
71+
4272
def test_reports_post(client, db, mocker):
4373
mocked_call = mocker.patch.object(TaskService, "preprocess_upload")
4474
mock_prometheus_metrics = mocker.patch("upload.metrics.API_UPLOAD_COUNTER.labels")

upload/tests/views/test_uploads.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -793,7 +793,7 @@ def test_deactivated_repo(db, mocker, mock_redis):
793793
response_json = response.json()
794794
assert response.status_code == 400
795795
assert response_json == [
796-
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"
796+
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"
797797
]
798798

799799

upload/views/commits.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,10 @@
1414
repo_auth_custom_exception_handler,
1515
)
1616
from core.models import Commit
17-
from upload.helpers import generate_upload_prometheus_metrics_labels
17+
from upload.helpers import (
18+
generate_upload_prometheus_metrics_labels,
19+
validate_activated_repo,
20+
)
1821
from upload.metrics import API_UPLOAD_COUNTER
1922
from upload.serializers import CommitSerializer
2023
from upload.views.base import GetterMixin
@@ -65,6 +68,7 @@ def perform_create(self, serializer):
6568
),
6669
)
6770
repository = self.get_repo()
71+
validate_activated_repo(repository)
6872

6973
commit = serializer.save(repository=repository)
7074

upload/views/reports.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@
1616
)
1717
from reports.models import CommitReport, ReportResults
1818
from services.task import TaskService
19-
from upload.helpers import generate_upload_prometheus_metrics_labels
19+
from upload.helpers import (
20+
generate_upload_prometheus_metrics_labels,
21+
validate_activated_repo,
22+
)
2023
from upload.metrics import API_UPLOAD_COUNTER
2124
from upload.serializers import CommitReportSerializer, ReportResultsSerializer
2225
from upload.views.base import GetterMixin
@@ -52,6 +55,7 @@ def perform_create(self, serializer):
5255
),
5356
)
5457
repository = self.get_repo()
58+
validate_activated_repo(repository)
5559
commit = self.get_commit(repository)
5660
log.info(
5761
"Request to create new report",

0 commit comments

Comments
 (0)