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

Commit 234cfb9

Browse files
Merge branch 'main' into cy/cancellation_grace
2 parents 1cb5591 + cdebb02 commit 234cfb9

File tree

21 files changed

+139
-75
lines changed

21 files changed

+139
-75
lines changed

api/public/v2/tests/test_test_results_view.py

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,6 @@ def test_list(self):
5353
"outcome": self.test_instances[0].outcome,
5454
"branch": self.test_instances[0].branch,
5555
"repoid": self.test_instances[0].repoid,
56-
"failure_rate": self.test_instances[0].test.failure_rate,
57-
"commits_where_fail": self.test_instances[
58-
0
59-
].test.commits_where_fail,
6056
},
6157
{
6258
"id": self.test_instances[1].id,
@@ -68,10 +64,6 @@ def test_list(self):
6864
"outcome": self.test_instances[1].outcome,
6965
"branch": self.test_instances[1].branch,
7066
"repoid": self.test_instances[1].repoid,
71-
"failure_rate": self.test_instances[1].test.failure_rate,
72-
"commits_where_fail": self.test_instances[
73-
1
74-
].test.commits_where_fail,
7567
},
7668
],
7769
"total_pages": 1,
@@ -103,10 +95,6 @@ def test_list_filters(self):
10395
"outcome": self.test_instances[0].outcome,
10496
"branch": self.test_instances[0].branch,
10597
"repoid": self.test_instances[0].repoid,
106-
"failure_rate": self.test_instances[0].test.failure_rate,
107-
"commits_where_fail": self.test_instances[
108-
0
109-
].test.commits_where_fail,
11098
},
11199
],
112100
"total_pages": 1,
@@ -137,8 +125,6 @@ def test_retrieve(self, get_repo_permissions):
137125
"outcome": self.test_instances[0].outcome,
138126
"branch": self.test_instances[0].branch,
139127
"repoid": self.test_instances[0].repoid,
140-
"failure_rate": self.test_instances[0].test.failure_rate,
141-
"commits_where_fail": self.test_instances[0].test.commits_where_fail,
142128
}
143129

144130
@patch("api.shared.permissions.RepositoryArtifactPermissions.has_permission")
@@ -240,6 +226,4 @@ def test_result_with_valid_super_token(
240226
"outcome": self.test_instances[0].outcome,
241227
"branch": self.test_instances[0].branch,
242228
"repoid": self.test_instances[0].repoid,
243-
"failure_rate": self.test_instances[0].test.failure_rate,
244-
"commits_where_fail": self.test_instances[0].test.commits_where_fail,
245229
}

codecov/settings_base.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -356,6 +356,9 @@
356356
"setup", "upload_throttling_enabled", default=True
357357
)
358358

359+
HIDE_ALL_CODECOV_TOKENS = get_config("setup", "hide_all_codecov_tokens", default=False)
360+
361+
359362
SENTRY_JWT_SHARED_SECRET = get_config(
360363
"sentry", "jwt_shared_secret", default=None
361364
) or get_config("setup", "sentry", "jwt_shared_secret", default=None)

graphql_api/tests/test_owner.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
UnauthorizedGuestAccess,
2828
)
2929
from codecov_auth.models import GithubAppInstallation, OwnerProfile
30+
from graphql_api.types.repository.repository import TOKEN_UNAVAILABLE
3031
from plan.constants import PlanName, TrialStatus
3132
from reports.tests.factories import CommitReportFactory, UploadFactory
3233

@@ -426,6 +427,28 @@ def test_get_org_upload_token(self, mocker):
426427
data = self.gql_request(query, owner=self.owner)
427428
assert data["owner"]["orgUploadToken"] == "upload_token"
428429

430+
@override_settings(HIDE_ALL_CODECOV_TOKENS=True)
431+
def test_get_org_upload_token_hide_tokens_setting_owner_not_admin(self):
432+
random_owner = OwnerFactory()
433+
query = """{
434+
owner(username: "%s") {
435+
orgUploadToken
436+
}
437+
}
438+
""" % (self.owner.username)
439+
random_owner.organizations = [self.owner.ownerid]
440+
random_owner.save()
441+
data = self.gql_request(query, owner=random_owner)
442+
assert data["owner"]["orgUploadToken"] == TOKEN_UNAVAILABLE
443+
444+
@patch("codecov_auth.commands.owner.owner.OwnerCommands.get_org_upload_token")
445+
@override_settings(HIDE_ALL_CODECOV_TOKENS=True)
446+
def test_get_org_upload_token_hide_tokens_setting_owner_is_admin(self, mocker):
447+
mocker.return_value = "upload_token"
448+
query = query_repositories % (self.owner.username, "", "")
449+
data = self.gql_request(query, owner=self.owner)
450+
assert data["owner"]["orgUploadToken"] == "upload_token"
451+
429452
# Applies for old users that didn't get their owner profiles created w/ their owner
430453
def test_when_owner_profile_doesnt_exist(self):
431454
owner = OwnerFactory(username="no-profile-user")

graphql_api/tests/test_repository.py

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
RepositoryTokenFactory,
1212
)
1313

14+
from graphql_api.types.repository.repository import TOKEN_UNAVAILABLE
1415
from services.profiling import CriticalFile
1516

1617
from .helper import GraphQLTestHelper
@@ -73,6 +74,11 @@
7374
"""
7475

7576

77+
def mock_get_config_global_upload_tokens(*args):
78+
if args == ("setup", "hide_all_codecov_tokens"):
79+
return True
80+
81+
7682
class TestFetchRepository(GraphQLTestHelper, TransactionTestCase):
7783
def fetch_repository(self, name, fields=None):
7884
data = self.gql_request(
@@ -683,6 +689,68 @@ def test_fetch_is_github_rate_limited_not_on_gh_service(self):
683689

684690
assert data["me"]["owner"]["repository"]["isGithubRateLimited"] == False
685691

692+
@override_settings(HIDE_ALL_CODECOV_TOKENS=True)
693+
def test_repo_upload_token_not_available_config_setting_owner_not_admin(self):
694+
owner = OwnerFactory(service="gitlab")
695+
696+
repo = RepositoryFactory(
697+
author=owner,
698+
author__service="gitlab",
699+
service_id=12345,
700+
active=True,
701+
)
702+
new_owner = OwnerFactory(service="gitlab", organizations=[owner.ownerid])
703+
new_owner.permission = [repo.repoid]
704+
new_owner.save()
705+
owner.admins = []
706+
707+
query = """
708+
query {
709+
owner(username: "%s") {
710+
repository(name: "%s") {
711+
... on Repository {
712+
uploadToken
713+
}
714+
}
715+
}
716+
}
717+
""" % (
718+
owner.username,
719+
repo.name,
720+
)
721+
722+
data = self.gql_request(
723+
query,
724+
owner=new_owner,
725+
variables={"name": repo.name},
726+
provider="gitlab",
727+
)
728+
729+
assert data["owner"]["repository"]["uploadToken"] == TOKEN_UNAVAILABLE
730+
731+
@override_settings(HIDE_ALL_CODECOV_TOKENS=True)
732+
def test_repo_upload_token_not_available_config_setting_owner_is_admin(self):
733+
owner = OwnerFactory(service="gitlab")
734+
repo = RepositoryFactory(
735+
author=owner,
736+
author__service="gitlab",
737+
service_id=12345,
738+
active=True,
739+
)
740+
owner.admins = [owner.ownerid]
741+
742+
data = self.gql_request(
743+
query_repository
744+
% """
745+
uploadToken
746+
""",
747+
owner=owner,
748+
variables={"name": repo.name},
749+
provider="gitlab",
750+
)
751+
752+
assert data["me"]["owner"]["repository"]["uploadToken"] != TOKEN_UNAVAILABLE
753+
686754
@patch("shared.rate_limits.determine_entity_redis_key")
687755
@patch("shared.rate_limits.determine_if_entity_is_rate_limited")
688756
@patch("logging.Logger.warning")

graphql_api/types/bundle_analysis/base.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from typing import Dict, List, Mapping, Optional, Union
44

55
import sentry_sdk
6-
from ariadne import ObjectType, convert_kwargs_to_snake_case
6+
from ariadne import ObjectType
77
from graphql import GraphQLResolveInfo
88

99
from codecov.commands.exceptions import ValidationError
@@ -139,7 +139,6 @@ def resolve_modules(
139139

140140
@sentry_sdk.trace
141141
@bundle_asset_bindable.field("measurements")
142-
@convert_kwargs_to_snake_case
143142
@sync_to_async
144143
def resolve_asset_report_measurements(
145144
bundle_asset: AssetReport,
@@ -277,7 +276,6 @@ def resolve_bundle_report_filtered(
277276

278277
@sentry_sdk.trace
279278
@bundle_report_bindable.field("measurements")
280-
@convert_kwargs_to_snake_case
281279
@sync_to_async
282280
def resolve_bundle_report_measurements(
283281
bundle_report: BundleReport,

graphql_api/types/commit/commit.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import sentry_sdk
55
import shared.reports.api_report_service as report_service
66
import yaml
7-
from ariadne import ObjectType, convert_kwargs_to_snake_case
7+
from ariadne import ObjectType
88
from graphql import GraphQLResolveInfo
99
from shared.reports.api_report_service import ReadOnlyReport
1010
from shared.reports.filtered import FilteredReportFile
@@ -84,7 +84,6 @@ async def resolve_yaml(commit: Commit, info) -> dict:
8484

8585

8686
@commit_bindable.field("yamlState")
87-
@convert_kwargs_to_snake_case
8887
async def resolve_yaml_state(commit: Commit, info) -> YamlStates:
8988
command = info.context["executor"].get_command("commit")
9089
final_yaml = await command.get_final_yaml(commit)
@@ -149,7 +148,6 @@ def resolve_critical_files(commit: Commit, info, **kwargs) -> List[CriticalFile]
149148

150149
@sentry_sdk.trace
151150
@commit_bindable.field("pathContents")
152-
@convert_kwargs_to_snake_case
153151
@sync_to_async
154152
def resolve_path_contents(commit: Commit, info, path: str = None, filters=None):
155153
"""

graphql_api/types/comparison/comparison.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from typing import List, Optional
33

44
import sentry_sdk
5-
from ariadne import ObjectType, UnionType, convert_kwargs_to_snake_case
5+
from ariadne import ObjectType, UnionType
66
from graphql.type.definition import GraphQLResolveInfo
77

88
import services.components as components_service
@@ -36,7 +36,6 @@ def resolve_state(comparison: ComparisonReport, info: GraphQLResolveInfo) -> str
3636

3737

3838
@comparison_bindable.field("impactedFiles")
39-
@convert_kwargs_to_snake_case
4039
@sync_to_async
4140
def resolve_impacted_files(
4241
comparison_report: ComparisonReport, info: GraphQLResolveInfo, filters=None

graphql_api/types/impacted_file/impacted_file.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from typing import List, Union
33

44
import sentry_sdk
5-
from ariadne import ObjectType, UnionType, convert_kwargs_to_snake_case
5+
from ariadne import ObjectType, UnionType
66
from shared.reports.types import ReportTotals
77
from shared.torngit.exceptions import TorngitClientError
88

@@ -67,7 +67,6 @@ def resolve_hashed_path(impacted_file: ImpactedFile, info) -> str:
6767
@sentry_sdk.trace
6868
@impacted_file_bindable.field("segments")
6969
@sync_to_async
70-
@convert_kwargs_to_snake_case
7170
def resolve_segments(
7271
impacted_file: ImpactedFile, info, filters=None
7372
) -> Union[UnknownPath, ProviderError, SegmentComparisons]:

graphql_api/types/line_comparison/line_comparison.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from functools import cached_property
22
from typing import List, Optional
33

4-
from ariadne import ObjectType, convert_kwargs_to_snake_case
4+
from ariadne import ObjectType
55
from shared.utils.merge import LineType
66

77
from graphql_api.types.enums import CoverageLine
@@ -72,7 +72,6 @@ def resolve_content(line_comparison: LineComparison, info) -> str:
7272

7373

7474
@line_comparison_bindable.field("coverageInfo")
75-
@convert_kwargs_to_snake_case
7675
def resolve_coverage_info(
7776
line_comparison: LineComparison,
7877
info,

graphql_api/types/me/me.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from typing import Optional
22

3-
from ariadne import ObjectType, convert_kwargs_to_snake_case
3+
from ariadne import ObjectType
44
from graphql import GraphQLResolveInfo
55

66
from codecov.db import sync_to_async
@@ -41,7 +41,6 @@ def resolve_owner(user, _):
4141

4242

4343
@me_bindable.field("viewableRepositories")
44-
@convert_kwargs_to_snake_case
4544
def resolve_viewable_repositories(
4645
current_user,
4746
info: GraphQLResolveInfo,

0 commit comments

Comments
 (0)