66
77from users .views import UserList
88from users .models import CustomUser
9- from invites .views import InviteList , InviteDetail
9+ from invites .views import InviteList , InviteDetail , InviteAccept , InviteDecline
1010from invites .models import Invite
1111from industries .models import Industry
1212from 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