Skip to content

Commit 4f7afc3

Browse files
committed
Added rest of CRUD API handler for Alias except for updating
1 parent 7ecc839 commit 4f7afc3

File tree

4 files changed

+82
-10
lines changed

4 files changed

+82
-10
lines changed

entry/api_v2/serializers.py

+10-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
from airone.lib.types import AttrDefaultValue, AttrType
2424
from entity.api_v2.serializers import EntitySerializer
2525
from entity.models import Entity, EntityAttr
26-
from entry.models import Attribute, AttributeValue, Entry
26+
from entry.models import Attribute, AttributeValue, Entry, AliasEntry
2727
from entry.settings import CONFIG as CONFIG_ENTRY
2828
from group.models import Group
2929
from job.models import Job, JobStatus
@@ -1330,3 +1330,12 @@ class Meta:
13301330
"name",
13311331
"entry",
13321332
]
1333+
1334+
class EntryAliasUpdateSerializer(serializers.ModelSerializer):
1335+
class Meta:
1336+
model = AliasEntry
1337+
fields = [
1338+
"id",
1339+
"name",
1340+
"entry",
1341+
]

entry/api_v2/urls.py

+18-2
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,25 @@
4747
),
4848
path(
4949
"<int:pk>/alias/",
50-
views.AliasEntryAPI.as_view(
50+
views.EntryAPI.as_view(
5151
{
52-
"get": "list",
52+
"get": "list_alias",
53+
}
54+
),
55+
),
56+
path(
57+
"alias/",
58+
views.AliasUpdateAPI.as_view(
59+
{
60+
"post": "create",
61+
}
62+
),
63+
),
64+
path(
65+
"alias/<int:pk>",
66+
views.AliasUpdateAPI.as_view(
67+
{
68+
"delete": "destroy",
5369
}
5470
),
5571
),

entry/api_v2/views.py

+28-4
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
AdvancedSearchSerializer,
3737
EntryAttributeValueRestoreSerializer,
3838
EntryAliasRetrieveSerializer,
39+
EntryAliasUpdateSerializer,
3940
EntryBaseSerializer,
4041
EntryCopySerializer,
4142
EntryExportSerializer,
@@ -85,6 +86,7 @@ def get_serializer_class(self):
8586
"update": serializers.Serializer,
8687
"copy": EntryCopySerializer,
8788
"list": EntryHistoryAttributeValueSerializer,
89+
"list_alias": AliasListAPI,
8890
}
8991
return serializer.get(self.action, EntryBaseSerializer)
9092

@@ -174,6 +176,15 @@ def copy(self, request: Request, *args, **kwargs) -> Response:
174176

175177
return Response({}, status=status.HTTP_200_OK)
176178

179+
def list_alias(self, request: Request, *args, **kwargs) -> Response:
180+
print("[onix/view.list_alias(00)]")
181+
user: User = self.request.user
182+
entry: Entry = self.get_object()
183+
184+
self.queryset = AliasEntry.objects.filter(entry=entry, entry__is_active=True)
185+
186+
return super(EntryAPI, self).list(request, *args, **kwargs)
187+
177188
# histories view
178189
def list(self, request: Request, *args, **kwargs) -> Response:
179190
user: User = self.request.user
@@ -829,12 +840,25 @@ def delete(self, request: Request, *args, **kwargs) -> Response:
829840
return Response(status=status.HTTP_204_NO_CONTENT)
830841

831842

832-
class AliasEntryAPI(viewsets.ModelViewSet):
833-
#queryset = AliasEntry.objects.all()
843+
class AliasListAPI(viewsets.ModelViewSet):
834844
permission_classes = [IsAuthenticated & EntryPermission]
835845
pagination_class = LimitOffsetPagination
836846
serializer_class = EntryAliasRetrieveSerializer
837847

838848
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"])
849+
# get all aliasentry items that are associated with specified entryid
850+
return aliasentry.objects.filter(entry__id=self.kwargs["pk"])
851+
852+
class AliasUpdateAPI(viewsets.ModelViewSet):
853+
# permission_classes = [IsAuthenticated & EntryPermission]
854+
permission_classes = [IsAuthenticated]
855+
pagination_class = LimitOffsetPagination
856+
queryset = AliasEntry.objects.filter(entry__is_active=True)
857+
858+
def get_serializer_class(self):
859+
print("[onix/view/get_serializer_class(00)] action: %s" % str(self.action))
860+
serializer = {
861+
"create": EntryAliasUpdateSerializer,
862+
"destroy": EntryAliasUpdateSerializer,
863+
}
864+
return serializer.get(self.action, EntryAliasRetrieveSerializer)

entry/tests/test_api_v2_alias.py

+26-3
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import json
2+
13
from airone.lib.test import AironeViewTest
24
from entity.models import Entity, EntityAttr
35
from entry.models import Attribute, AttributeValue, Entry, AliasEntry
@@ -32,8 +34,29 @@ def test_list(self):
3234
self.assertEqual([x["name"] for x in resp.json()["results"]], ["foo", "bar", "baz"])
3335
self.assertTrue(all([x["entry"]["id"] == self.item.id for x in resp.json()["results"]]))
3436

35-
def test_update(self):
36-
pass
37+
def test_create(self):
38+
resp = self.client.post("/entry/api/v2/alias/", json.dumps({
39+
"name": "NewAlias",
40+
"entry": self.item.id,
41+
}), "application/json")
42+
self.assertEqual(resp.status_code, 201)
43+
self.assertEqual(resp.json()["name"], "NewAlias")
44+
self.assertEqual(resp.json()["entry"], self.item.id)
45+
46+
# check expected Alias was created correctly
47+
self.assertEqual(AliasEntry.objects.filter(entry=self.item).count(), 1)
3748

3849
def test_delete(self):
39-
pass
50+
# create Alias to be deleted
51+
alias = self.item.add_alias("Deleting Alias")
52+
53+
# send request to list aliases
54+
resp = self.client.delete(
55+
"/entry/api/v2/alias/%s" % alias.id,
56+
None,
57+
"application/json"
58+
)
59+
self.assertEqual(resp.status_code, 204)
60+
61+
# check specified Alias was deleted actually
62+
self.assertFalse(AliasEntry.objects.filter(entry=self.item).exists())

0 commit comments

Comments
 (0)