Skip to content

Commit 031c313

Browse files
committed
Add endpoint for fetching package source
Add endpoint for fetching package source data. Implement tests. Refs. TS-2282
1 parent 56bb24f commit 031c313

File tree

5 files changed

+63
-2
lines changed

5 files changed

+63
-2
lines changed
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import pytest
2+
from rest_framework.test import APIClient
3+
4+
from thunderstore.community.models import PackageListing
5+
from thunderstore.core.types import UserType
6+
7+
8+
def get_package_source_endpoint_url(owner: str, package_name: str) -> str:
9+
return f"/api/cyberstorm/package/{owner}/{package_name}/source/"
10+
11+
12+
@pytest.mark.django_db
13+
def test_package_source_endpoint_not_authenticated(
14+
api_client: APIClient, active_package_listing: PackageListing
15+
) -> None:
16+
package_name = active_package_listing.package.name
17+
owner = active_package_listing.package.owner.name
18+
19+
url = get_package_source_endpoint_url(owner=owner, package_name=package_name)
20+
response = api_client.get(url)
21+
assert response.status_code == 401
22+
23+
24+
@pytest.mark.django_db
25+
def test_package_source_endpoint_authenticated(
26+
api_client: APIClient, active_package_listing: PackageListing, user: UserType
27+
) -> None:
28+
api_client.force_authenticate(user)
29+
package_name = active_package_listing.package.name
30+
owner = active_package_listing.package.owner.name
31+
32+
url = get_package_source_endpoint_url(owner=owner, package_name=package_name)
33+
response = api_client.get(url)
34+
assert response.status_code == 200
35+
36+
37+
@pytest.mark.django_db
38+
def test_package_source_response_format(
39+
api_client: APIClient,
40+
active_package_listing: PackageListing,
41+
user: UserType,
42+
) -> None:
43+
api_client.force_authenticate(user)
44+
45+
package_name = active_package_listing.package.name
46+
owner = active_package_listing.package.owner.name
47+
48+
url = get_package_source_endpoint_url(owner=owner, package_name=package_name)
49+
response = api_client.get(url)
50+
51+
assert response.status_code == 200
52+
assert "is_visible" in response.json()
53+
assert "decompilations" in response.json()

django/thunderstore/api/urls.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
TeamMemberListAPIView,
1818
TeamServiceAccountListAPIView,
1919
)
20+
from thunderstore.plugins.registry import plugin_registry
2021

2122
cyberstorm_urls = [
2223
path(
@@ -104,4 +105,4 @@
104105
TeamServiceAccountListAPIView.as_view(),
105106
name="cyberstorm.team.service-account",
106107
),
107-
]
108+
] + plugin_registry.get_package_api_urls()

django/thunderstore/plugins/base.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ def get_legacy_package_urls(cls) -> List[URLPattern]:
3030
def get_new_package_urls(cls) -> List[URLPattern]:
3131
return []
3232

33+
@classmethod
34+
def get_package_api_urls(cls) -> List[URLPattern]:
35+
return []
36+
3337
@classmethod
3438
def get_package_tabs(
3539
cls,

django/thunderstore/plugins/registry.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ def get_legacy_package_urls(self) -> List[URLPattern]:
4444
def get_new_package_urls(self) -> List[URLPattern]:
4545
return list(itertools.chain(*(x.get_new_package_urls() for x in self.plugins)))
4646

47+
def get_package_api_urls(self) -> List[URLPattern]:
48+
return list(itertools.chain(*(x.get_package_api_urls() for x in self.plugins)))
49+
4750
def get_package_tabs(
4851
self, user: "UserType", listing: "PackageListing"
4952
) -> Dict[str, "PartialTab"]:

python-packages

0 commit comments

Comments
 (0)