File tree 4 files changed +88
-0
lines changed 4 files changed +88
-0
lines changed Original file line number Diff line number Diff line change
1
+ import pytest
2
+ from rest_framework .test import APIClient
3
+
4
+ from thunderstore .repository .factories import PackageVersionFactory
5
+ from thunderstore .repository .models import Package
6
+
7
+
8
+ @pytest .mark .django_db
9
+ def test_package_versions_api_view__returns_error_for_inactive_package (
10
+ api_client : APIClient ,
11
+ package : Package ,
12
+ ) -> None :
13
+ package .is_active = False
14
+ package .save ()
15
+
16
+ response = api_client .get (
17
+ f"/api/cyberstorm/versions/{ package .namespace } /{ package .name } /" ,
18
+ )
19
+ actual = response .json ()
20
+
21
+ assert actual ["detail" ] == "Not found."
22
+
23
+
24
+ @pytest .mark .django_db
25
+ def test_package_versions_api_view__does_not_return_inactive_versions (
26
+ api_client : APIClient ,
27
+ ) -> None :
28
+ inactive = PackageVersionFactory (is_active = False )
29
+
30
+ response = api_client .get (
31
+ f"/api/cyberstorm/versions/{ inactive .package .namespace } /{ inactive .package .name } /" ,
32
+ )
33
+ actual = response .json ()
34
+
35
+ assert actual ["detail" ] == "Not found."
36
+
37
+
38
+ @pytest .mark .django_db
39
+ def test_package_versions_api_view__returns_versions (
40
+ api_client : APIClient ,
41
+ ) -> None :
42
+ expected = PackageVersionFactory ()
43
+
44
+ response = api_client .get (
45
+ f"/api/cyberstorm/versions/{ expected .package .namespace } /{ expected .package .name } /" ,
46
+ )
47
+ actual = response .json ()
48
+
49
+ assert len (actual ) == 1
50
+ assert actual [0 ]["version_number" ] == expected .version_number
Original file line number Diff line number Diff line change 3
3
from .community_list import CommunityListAPIView
4
4
from .markdown import PackageVersionChangelogAPIView , PackageVersionReadmeAPIView
5
5
from .package_detail import PackageDetailAPIView
6
+ from .package_versions import PackageVersionsAPIView
6
7
from .packages import (
7
8
CommunityPackageListAPIView ,
8
9
NamespacePackageListAPIView ,
20
21
"PackageDetailAPIView" ,
21
22
"PackageVersionChangelogAPIView" ,
22
23
"PackageVersionReadmeAPIView" ,
24
+ "PackageVersionsAPIView" ,
23
25
"TeamDetailAPIView" ,
24
26
"TeamMembersAPIView" ,
25
27
"TeamServiceAccountsAPIView" ,
Original file line number Diff line number Diff line change
1
+ from rest_framework import serializers
2
+ from rest_framework .generics import ListAPIView , get_object_or_404
3
+
4
+ from thunderstore .api .utils import CyberstormAutoSchemaMixin
5
+ from thunderstore .repository .models import Package
6
+
7
+
8
+ class CyberstormPackageVersionSerializer (serializers .Serializer ):
9
+ version_number = serializers .CharField ()
10
+ datetime_created = serializers .DateTimeField (source = "date_created" )
11
+ download_count = serializers .IntegerField (min_value = 0 , source = "downloads" )
12
+ download_url = serializers .CharField (source = "full_download_url" )
13
+ install_url = serializers .CharField ()
14
+
15
+
16
+ class PackageVersionsAPIView (CyberstormAutoSchemaMixin , ListAPIView ):
17
+ """
18
+ Return a list of available versions of the package.
19
+ """
20
+
21
+ serializer_class = CyberstormPackageVersionSerializer
22
+
23
+ def get_queryset (self ):
24
+ package = get_object_or_404 (
25
+ Package .objects .active (),
26
+ namespace__name = self .kwargs ["namespace_id" ],
27
+ name__iexact = self .kwargs ["package_name" ],
28
+ )
29
+
30
+ return package .versions .active ()
Original file line number Diff line number Diff line change 10
10
PackageDetailAPIView ,
11
11
PackageVersionChangelogAPIView ,
12
12
PackageVersionReadmeAPIView ,
13
+ PackageVersionsAPIView ,
13
14
TeamDetailAPIView ,
14
15
TeamMembersAPIView ,
15
16
TeamServiceAccountsAPIView ,
89
90
PackageVersionReadmeAPIView .as_view (),
90
91
name = "cyberstorm.package-version.readme" ,
91
92
),
93
+ path (
94
+ "versions/<str:namespace_id>/<str:package_name>/" ,
95
+ PackageVersionsAPIView .as_view (),
96
+ name = "cyberstorm.package.versions" ,
97
+ ),
92
98
]
You can’t perform that action at this time.
0 commit comments