Skip to content

Commit 6d1df10

Browse files
authored
Merge pull request #240 from PROCOLLAB-github/feature/invites-tests
Added unit-tests for Invites
2 parents 310704c + 16ef942 commit 6d1df10

1 file changed

Lines changed: 74 additions & 1 deletion

File tree

invites/tests.py

Lines changed: 74 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
from users.views import UserList
88
from users.models import CustomUser
9-
from invites.views import InviteList, InviteDetail
9+
from invites.views import InviteList, InviteDetail, InviteAccept, InviteDecline
1010
from invites.models import Invite
1111
from industries.models import Industry
1212
from projects.views import ProjectList, ProjectDetail
@@ -114,6 +114,69 @@ def test_invites_creation_with_empty_data(self):
114114

115115
self.assertEqual(response.status_code, 400)
116116

117+
def test_accept_invite_by_intended_user(self):
118+
sender = self._user_create("sender@example.com")
119+
recipient = self._user_create("recipient@example.com")
120+
project = self._project_create(sender)
121+
122+
invite = self._create_invite(sender, recipient, project)
123+
124+
request = self.factory.post(f"/invites/{invite.id}/accept/")
125+
force_authenticate(request, user=recipient)
126+
accept_response = InviteAccept.as_view()(request, pk=invite.id)
127+
128+
self.assertEqual(accept_response.status_code, 200)
129+
invite.refresh_from_db()
130+
self.assertTrue(invite.is_accepted)
131+
132+
def test_decline_invite_by_intended_user(self):
133+
sender = self._user_create("sender@example.com")
134+
recipient = self._user_create("recipient@example.com")
135+
project = self._project_create(sender)
136+
137+
invite = self._create_invite(sender, recipient, project)
138+
139+
request = self.factory.post(f"/invites/{invite.id}/decline/")
140+
force_authenticate(request, user=recipient)
141+
decline_response = InviteDecline.as_view()(request, pk=invite.id)
142+
143+
self.assertEqual(decline_response.status_code, 200)
144+
invite.refresh_from_db()
145+
self.assertFalse(invite.is_accepted)
146+
147+
def test_accept_decline_invite_by_unintended_user(self):
148+
sender = self._user_create("sender@example.com")
149+
recipient = self._user_create("recipient@example.com")
150+
unintended_user = self._user_create("unintended@example.com")
151+
project = self._project_create(sender)
152+
153+
invite = self._create_invite(sender, recipient, project)
154+
155+
accept_request = self.factory.post(f"/invites/{invite.id}/accept/")
156+
force_authenticate(accept_request, user=unintended_user)
157+
accept_response = InviteAccept.as_view()(accept_request, pk=invite.id)
158+
159+
decline_request = self.factory.post(f"/invites/{invite.id}/decline/")
160+
force_authenticate(decline_request, user=unintended_user)
161+
decline_response = InviteDecline.as_view()(decline_request, pk=invite.id)
162+
163+
self.assertNotEqual(accept_response.status_code, 200)
164+
self.assertNotEqual(decline_response.status_code, 200)
165+
166+
def test_delete_invite_by_sender(self):
167+
sender = self._user_create("sender@example.com")
168+
recipient = self._user_create("recipient@example.com")
169+
project = self._project_create(sender)
170+
171+
invite = self._create_invite(sender, recipient, project)
172+
173+
request = self.factory.delete(f"/invites/{invite.id}/")
174+
force_authenticate(request, user=sender)
175+
delete_response = self.invite_detail_view(request, pk=invite.id)
176+
177+
self.assertEqual(delete_response.status_code, 204)
178+
self.assertFalse(Invite.objects.filter(pk=invite.id).exists())
179+
117180
def _project_create(self, user):
118181
request = self.factory.post("projects/", self.project_create_data)
119182
force_authenticate(request, user=user)
@@ -132,3 +195,13 @@ def _user_create(self, email):
132195
user.is_active = True
133196
user.save()
134197
return user
198+
199+
def _create_invite(self, sender, recipient, project):
200+
invite_data = self.invite_create_data.copy()
201+
invite_data.update({"project": project.id, "user": recipient.id})
202+
203+
request = self.factory.post("/invites/", invite_data, format="json")
204+
force_authenticate(request, user=sender)
205+
response = self.invite_list_view(request)
206+
207+
return Invite.objects.get(pk=response.data["id"])

0 commit comments

Comments
 (0)