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

Commit de1f3de

Browse files
Tests
1 parent d987ef7 commit de1f3de

File tree

3 files changed

+67
-58
lines changed

3 files changed

+67
-58
lines changed

graphql_api/actions/repository.py

Lines changed: 37 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -6,53 +6,44 @@
66
from shared.django_apps.codecov_auth.models import GithubAppInstallation, Owner
77
from shared.django_apps.core.models import Repository
88

9-
from graphql_api.types.owner.owner import AI_FEATURES_GH_APP_ID
9+
from utils.config import get_config
1010

1111
log = logging.getLogger(__name__)
12+
AI_FEATURES_GH_APP_ID = get_config("github", "ai_features_app_id")
1213

1314

14-
def apply_filters_to_queryset(
15-
queryset: QuerySet, filters: dict[str, Any] | None, owner: Owner
16-
) -> QuerySet:
15+
def basic_filters(queryset: QuerySet, filters: dict[str, Any]) -> QuerySet:
1716
filters = filters or {}
18-
term = filters.get("term")
19-
active = filters.get("active")
20-
activated = filters.get("activated")
21-
repo_names = filters.get("repo_names")
22-
is_public = filters.get("is_public")
23-
ai_enabled = filters.get("ai_enabled")
24-
25-
if repo_names:
17+
if repo_names := filters.get("repo_names"):
2618
queryset = queryset.filter(name__in=repo_names)
27-
if term:
19+
if term := filters.get("term"):
2820
queryset = queryset.filter(name__contains=term)
29-
if activated is not None:
30-
queryset = queryset.filter(activated=activated)
31-
if active is not None:
32-
queryset = queryset.filter(active=active)
33-
if is_public is not None:
34-
queryset = queryset.filter(private=not is_public)
35-
if is_public is not None:
36-
queryset = queryset.filter(private=not is_public)
37-
if ai_enabled is not None:
38-
queryset = filter_queryset_by_ai_enabled_repos(queryset, owner)
21+
for field in ("activated", "active"):
22+
if filters.get(field) is not None:
23+
queryset = queryset.filter(**{field: filters[field]})
24+
if filters.get("is_public") is not None:
25+
queryset = queryset.filter(private=not filters["is_public"])
3926
return queryset
4027

4128

4229
def filter_queryset_by_ai_enabled_repos(queryset: QuerySet, owner: Owner) -> QuerySet:
43-
ai_features_app_install = GithubAppInstallation.objects.filter(
30+
install = GithubAppInstallation.objects.filter(
4431
app_id=AI_FEATURES_GH_APP_ID, owner=owner
4532
).first()
46-
47-
if not ai_features_app_install:
33+
if not install:
4834
return Repository.objects.none()
35+
if install.repository_service_ids:
36+
queryset = queryset.filter(service_id__in=install.repository_service_ids)
37+
return queryset
4938

50-
if ai_features_app_install.repository_service_ids:
51-
queryset = queryset.filter(
52-
service_id__in=ai_features_app_install.repository_service_ids
53-
)
5439

55-
return queryset
40+
def apply_filters(
41+
queryset: QuerySet, filters: dict[str, Any] | None, owner: Owner
42+
) -> QuerySet:
43+
filters = filters or {}
44+
if filters.get("ai_enabled"):
45+
return filter_queryset_by_ai_enabled_repos(queryset, owner)
46+
return basic_filters(queryset, filters)
5647

5748

5849
@sentry_sdk.trace
@@ -63,23 +54,14 @@ def list_repository_for_owner(
6354
okta_account_auths: list[int],
6455
exclude_okta_enforced_repos: bool = True,
6556
) -> QuerySet:
66-
queryset = Repository.objects.viewable_repos(current_owner)
67-
68-
ai_enabled_filter = filters.get("ai_enabled")
69-
70-
if ai_enabled_filter:
71-
return filter_queryset_by_ai_enabled_repos(queryset, owner)
72-
57+
filters = filters or {}
58+
qs = Repository.objects.viewable_repos(current_owner)
59+
if filters.get("ai_enabled"):
60+
return filter_queryset_by_ai_enabled_repos(qs, owner)
7361
if exclude_okta_enforced_repos:
74-
queryset = queryset.exclude_accounts_enforced_okta(okta_account_auths)
75-
76-
if not ai_enabled_filter:
77-
queryset = (
78-
queryset.with_recent_coverage().with_latest_commit_at().filter(author=owner)
79-
)
80-
81-
queryset = apply_filters_to_queryset(queryset, filters, owner)
82-
return queryset
62+
qs = qs.exclude_accounts_enforced_okta(okta_account_auths)
63+
qs = qs.with_recent_coverage().with_latest_commit_at().filter(author=owner)
64+
return basic_filters(qs, filters)
8365

8466

8567
@sentry_sdk.trace
@@ -89,16 +71,14 @@ def search_repos(
8971
okta_account_auths: list[int],
9072
exclude_okta_enforced_repos: bool = True,
9173
) -> QuerySet:
92-
authors_from = [current_owner.ownerid] + (current_owner.organizations or [])
93-
queryset = Repository.objects.viewable_repos(current_owner)
94-
74+
filters = filters or {}
75+
authors = [current_owner.ownerid] + (current_owner.organizations or [])
76+
qs = Repository.objects.viewable_repos(current_owner)
9577
if exclude_okta_enforced_repos:
96-
queryset = queryset.exclude_accounts_enforced_okta(okta_account_auths)
97-
98-
queryset = (
99-
queryset.with_recent_coverage()
78+
qs = qs.exclude_accounts_enforced_okta(okta_account_auths)
79+
qs = (
80+
qs.with_recent_coverage()
10081
.with_latest_commit_at()
101-
.filter(author__ownerid__in=authors_from)
82+
.filter(author__ownerid__in=authors)
10283
)
103-
queryset = apply_filters_to_queryset(queryset, filters)
104-
return queryset
84+
return apply_filters(qs, filters, current_owner)

graphql_api/tests/test_owner.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1209,3 +1209,32 @@ def test_fetch_owner_with_no_service(self):
12091209
""" % (current_org.username)
12101210
data = self.gql_request(query, owner=current_org, provider="", with_errors=True)
12111211
assert data == {"data": {"owner": None}}
1212+
1213+
def test_fetch_repositories_ai_features_enabled(self):
1214+
ai_app_installation = GithubAppInstallation(
1215+
name="ai-features",
1216+
owner=self.owner,
1217+
repository_service_ids=[],
1218+
installation_id=12345,
1219+
)
1220+
1221+
ai_app_installation.save()
1222+
query = query_repositories % (
1223+
self.owner.username,
1224+
"(filters: { aiEnabled: true })",
1225+
"",
1226+
)
1227+
1228+
data = self.gql_request(query, owner=self.owner)
1229+
repos = paginate_connection(data["owner"]["repositories"])
1230+
assert repos == [{"name": "a"}, {"name": "b"}]
1231+
1232+
def test_fetch_repositories_ai_features_enabled_no_app_install(self):
1233+
query = query_repositories % (
1234+
self.owner.username,
1235+
"(filters: { aiEnabled: true })",
1236+
"",
1237+
)
1238+
data = self.gql_request(query, owner=self.owner)
1239+
repos = paginate_connection(data["owner"]["repositories"])
1240+
assert repos == []

utils/test_utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,4 +68,4 @@ def setUp(self) -> None:
6868
self.apps = executor.loader.project_state(self.migrate_to).apps
6969

7070
def setUpBeforeMigration(self, apps: Any) -> None:
71-
pass
71+
pass

0 commit comments

Comments
 (0)