Skip to content

Commit 7ecc839

Browse files
committed
Wrote new API handler to retrieve Aliases which are related with specified Item(Entry)
1 parent d13d4b1 commit 7ecc839

File tree

4 files changed

+73
-1
lines changed

4 files changed

+73
-1
lines changed

entry/api_v2/serializers.py

+12
Original file line numberDiff line numberDiff line change
@@ -1318,3 +1318,15 @@ def save(self, **kwargs) -> None:
13181318
params=self.validated_data,
13191319
)
13201320
job.run()
1321+
1322+
1323+
class EntryAliasRetrieveSerializer(serializers.ModelSerializer):
1324+
entry = EntryRetrieveSerializer()
1325+
1326+
class Meta:
1327+
model = Entry
1328+
fields = [
1329+
"id",
1330+
"name",
1331+
"entry",
1332+
]

entry/api_v2/urls.py

+8
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,14 @@
4545
}
4646
),
4747
),
48+
path(
49+
"<int:pk>/alias/",
50+
views.AliasEntryAPI.as_view(
51+
{
52+
"get": "list",
53+
}
54+
),
55+
),
4856
path(
4957
"search/",
5058
views.searchAPI.as_view(

entry/api_v2/views.py

+14-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
from django.conf import settings
66
from django.db.models import Prefetch, Q
7+
from django.http.response import JsonResponse
78
from drf_spectacular.types import OpenApiTypes
89
from drf_spectacular.utils import OpenApiParameter, extend_schema
910
from rest_framework import generics, serializers, status, viewsets
@@ -34,6 +35,7 @@
3435
AdvancedSearchResultSerializer,
3536
AdvancedSearchSerializer,
3637
EntryAttributeValueRestoreSerializer,
38+
EntryAliasRetrieveSerializer,
3739
EntryBaseSerializer,
3840
EntryCopySerializer,
3941
EntryExportSerializer,
@@ -43,7 +45,7 @@
4345
EntryUpdateSerializer,
4446
GetEntryAttrReferralSerializer,
4547
)
46-
from entry.models import Attribute, AttributeValue, Entry
48+
from entry.models import Attribute, AttributeValue, Entry, AliasEntry
4749
from entry.services import AdvancedSearchService
4850
from entry.settings import CONFIG
4951
from entry.settings import CONFIG as ENTRY_CONFIG
@@ -825,3 +827,14 @@ def delete(self, request: Request, *args, **kwargs) -> Response:
825827
job.run()
826828

827829
return Response(status=status.HTTP_204_NO_CONTENT)
830+
831+
832+
class AliasEntryAPI(viewsets.ModelViewSet):
833+
#queryset = AliasEntry.objects.all()
834+
permission_classes = [IsAuthenticated & EntryPermission]
835+
pagination_class = LimitOffsetPagination
836+
serializer_class = EntryAliasRetrieveSerializer
837+
838+
def get_queryset(self, *args, **kwargs):
839+
# get all AliasEntry items that are associated with specified EntryID
840+
return AliasEntry.objects.filter(entry__id=self.kwargs["pk"])

entry/tests/test_api_v2_alias.py

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
from airone.lib.test import AironeViewTest
2+
from entity.models import Entity, EntityAttr
3+
from entry.models import Attribute, AttributeValue, Entry, AliasEntry
4+
from user.models import User
5+
6+
7+
class APITest(AironeViewTest):
8+
def setUp(self):
9+
super(APITest, self).setUp()
10+
self.user: User = self.guest_login()
11+
12+
# initialize Mdoel and Item for test
13+
self.model = self.create_entity(self.user, "TestModel")
14+
self.item = self.add_entry(self.user, "Item", self.model)
15+
16+
def test_list(self):
17+
# initialize Aliases to be listed
18+
[self.item.add_alias(x) for x in ["foo", "bar", "baz"]]
19+
20+
# create another Model, Item and Aliases to test to get only Aliases
21+
# that are associated with specified Item in the URL parameter.
22+
another_model = self.create_entity(self.user, "AnotherModel")
23+
another_item = self.add_entry(self.user, "Item", another_model)
24+
another_item.add_alias("hoge")
25+
26+
# send request to list aliases
27+
resp = self.client.get("/entry/api/v2/%d/alias/" % self.item.id)
28+
self.assertEqual(resp.status_code, 200)
29+
30+
# check this returned only Aliases that are associated with self.item
31+
self.assertEqual(resp.json()["count"], 3)
32+
self.assertEqual([x["name"] for x in resp.json()["results"]], ["foo", "bar", "baz"])
33+
self.assertTrue(all([x["entry"]["id"] == self.item.id for x in resp.json()["results"]]))
34+
35+
def test_update(self):
36+
pass
37+
38+
def test_delete(self):
39+
pass

0 commit comments

Comments
 (0)