Skip to content

Commit 3463100

Browse files
authored
Feature - Delete Membership history (#3737)
* Add: method to delete membership history
1 parent df67c3c commit 3463100

File tree

3 files changed

+94
-4
lines changed

3 files changed

+94
-4
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ target/
5757
# Pycharm
5858
.idea/
5959

60+
.venv/
6061
venv/
6162
lego/settings/local.py
6263
lego/db.sqlite

lego/apps/users/tests/test_membership_history.py

Lines changed: 67 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1+
from datetime import timedelta
2+
3+
from django.utils import timezone
14
from rest_framework import status
25

36
from lego.apps.users.constants import GROUP_OTHER
4-
from lego.apps.users.models import AbakusGroup, User
7+
from lego.apps.users.models import AbakusGroup, MembershipHistory, User
58
from lego.utils.test_utils import BaseAPITestCase
69

710

@@ -42,3 +45,66 @@ def test_list_history_as_authenticated(self):
4245
response = self.client.get(self.url)
4346
self.assertEqual(status.HTTP_200_OK, response.status_code)
4447
self.assertEqual(0, len(response.json()["results"]))
48+
49+
def test_delete_history(self):
50+
user = User.objects.get(username="test1")
51+
group = AbakusGroup.objects.get(id=26)
52+
53+
MembershipHistory.objects.create(
54+
user=user,
55+
abakus_group=group,
56+
start_date=timezone.now(),
57+
end_date=timezone.now() + timedelta(days=2),
58+
)
59+
MembershipHistory.objects.create(
60+
user=user,
61+
abakus_group=group,
62+
start_date=timezone.now() + timedelta(days=4),
63+
end_date=timezone.now() + timedelta(days=6),
64+
)
65+
66+
self.client.force_authenticate(user)
67+
request_body = {"group_id": 26}
68+
response = self.client.delete(self.url, request_body)
69+
self.assertEqual(status.HTTP_200_OK, response.status_code)
70+
self.assertEqual("AbaBrygg got deleted", response.json()["result"])
71+
self.assertFalse(
72+
MembershipHistory.objects.filter(user=user, abakus_group=group).exists()
73+
)
74+
75+
def test_delete_history_empty_query(self):
76+
user = User.objects.get(username="test1")
77+
group = AbakusGroup.objects.get(id=26)
78+
79+
MembershipHistory.objects.create(
80+
user=user,
81+
abakus_group=group,
82+
start_date=timezone.now(),
83+
end_date=timezone.now() + timedelta(days=2),
84+
)
85+
MembershipHistory.objects.create(
86+
user=user,
87+
abakus_group=group,
88+
start_date=timezone.now() + timedelta(days=4),
89+
end_date=timezone.now() + timedelta(days=6),
90+
)
91+
92+
self.client.force_authenticate(user)
93+
request_body = {"group_id": 0}
94+
response = self.client.delete(self.url, request_body)
95+
self.assertEqual(status.HTTP_400_BAD_REQUEST, response.status_code)
96+
self.assertTrue(
97+
MembershipHistory.objects.filter(user=user, abakus_group=group).exists()
98+
)
99+
100+
def test_delete_history_no_group_history(self):
101+
user = User.objects.get(username="test1")
102+
group = AbakusGroup.objects.get(id=26)
103+
104+
self.client.force_authenticate(user)
105+
request_body = {"group_id": 26}
106+
response = self.client.delete(self.url, request_body)
107+
self.assertEqual(status.HTTP_400_BAD_REQUEST, response.status_code)
108+
self.assertFalse(
109+
MembershipHistory.objects.filter(user=user, abakus_group=group).exists()
110+
)

lego/apps/users/views/membership_history.py

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
from rest_framework import mixins, permissions, viewsets
1+
from rest_framework import mixins, permissions, status, viewsets
2+
from rest_framework.response import Response
23

34
from lego.apps.permissions.constants import EDIT
4-
from lego.apps.users.constants import PUBLIC_GROUPS
5+
from lego.apps.users.constants import GROUP_INTEREST, PUBLIC_GROUPS
56
from lego.apps.users.filters import MembershipHistoryFilterSet
6-
from lego.apps.users.models import Membership, MembershipHistory
7+
from lego.apps.users.models import AbakusGroup, Membership, MembershipHistory
78
from lego.apps.users.serializers.membership_history import MembershipHistorySerializer
89

910

@@ -27,3 +28,25 @@ def get_queryset(self):
2728
return queryset.filter(abakus_group__type__in=PUBLIC_GROUPS)
2829

2930
return queryset
31+
32+
def delete(self, request):
33+
try:
34+
group = AbakusGroup.objects.get(id=request.data["group_id"])
35+
user_membership_history = MembershipHistory.objects.filter(
36+
user__id=request.user.id, abakus_group__id=group.id
37+
)
38+
39+
if group.type == GROUP_INTEREST and len(user_membership_history) != 0:
40+
name = user_membership_history[0].abakus_group.name
41+
user_membership_history.delete()
42+
return Response(
43+
{"result": f"{name} got deleted"}, status=status.HTTP_200_OK
44+
)
45+
return Response(
46+
{"result": "Nothing to delete"}, status=status.HTTP_400_BAD_REQUEST
47+
)
48+
except Exception as e:
49+
return Response(
50+
{"result": f"Unexpected error: {str(e)}"},
51+
status=status.HTTP_400_BAD_REQUEST,
52+
)

0 commit comments

Comments
 (0)