diff --git a/rowers/teams.py b/rowers/teams.py index 5ef6ce70..5b4a23bb 100644 --- a/rowers/teams.py +++ b/rowers/teams.py @@ -637,7 +637,9 @@ def process_invite_code(user,code): # pragma: no cover return (0,'The invitation has expired') t = invitation.team + result, comment = add_member(t.id,r) + if not result: return (result,"The member couldn't be added") diff --git a/rowers/tests/test_team.py b/rowers/tests/test_team.py index 2147d006..4ffc5b68 100644 --- a/rowers/tests/test_team.py +++ b/rowers/tests/test_team.py @@ -350,6 +350,98 @@ class TeamTest(TestCase): response = self.c.post(url, form_data) self.assertEqual(response.status_code, 200) + def test_team_invite_convoluted(self): + uA = User.objects.get(username='user1') + uB = User.objects.get(username='user2') + + passwordA = self.user_passwords[0] + passwordB = self.user_passwords[1] + + # login User A + login = self.c.login(username=uA.username, password = passwordA) + self.assertTrue(login) + + # start a group + teamA = Team( + manager = uA, + name = 'teamA', + private = 'open', + viewing = 'allmembers' + ) + teamA.save() + uA.rower.team.add(teamA) + + # invite B to the group + inviteA = TeamInvite( + team = teamA, + user = uB, + code = 'ABCDEF', + email = self.users[1].email, + ) + inviteA.save() + + invite = TeamInvite.objects.get(code=inviteA.code) + + # B accepts the invite + login = self.c.login(username = uB.username, password = passwordB) + self.assertTrue(login) + + url = reverse('rower_invitations_view')+inviteA.code + response = self.c.get(url,follow=True) + + expected_url = reverse('team_view', kwargs={'team_id':teamA.id}) + self.assertRedirects(response, expected_url=expected_url, status_code=301, target_status_code=200) + + # A requests B to become their coach + coachrequest = CoachRequest( + coach = uB.rower, + user = uA, + code = 'ABCDEFG' + ) + coachrequest.save() + + # B accepts coaching request + login = self.c.login(username = uB.username, password = passwordB) + self.assertTrue(login) + + url = reverse('coach_accept_coachrequest_view', kwargs={'code':coachrequest.code}) + response = self.c.get(url,follow=True) + expected_url = reverse('rower_teams_view') + self.assertRedirects(response, expected_url=expected_url, status_code=302, target_status_code=200) + + # Now check a few things + self.assertTrue(is_team_member(uA,teamA)) + self.assertTrue(is_team_member(uB,teamA)) + self.assertTrue(is_coach_user(uB,uA)) + + # B leaves A's group + url = reverse('team_leave_view',kwargs={'id':teamA.id}) + response = self.c.get(url) + expected_url = reverse('rower_teams_view') + self.assertRedirects(response, expected_url=expected_url, status_code=302, target_status_code=200) + self.assertFalse(is_team_member(uB,teamA)) + + self.assertTrue(is_coach_user(uB,uA)) + + # B should see A's workouts on the list + url = reverse('workouts_view',kwargs={'userid':uA.id}) + response = self.c.get(url) + self.assertEqual(response.status_code, 200) + + # B should see A's Plan + url = '/rowers/sessions/' + response = self.c.get(url) + self.assertEqual(response.status_code, 200) + + self.assertTrue(uA.first_name in str(response.content)) + + url = reverse('plannedsessions_view',kwargs={'userid':uA.id}) + response = self.c.get(url) + self.assertEqual(response.status_code, 200) + + self.assertTrue(uA.first_name in str(response.content)) + + @override_settings(TESTING=True) class TeamTestLowLevel(TestCase): def setUp(self): diff --git a/rowers/views/planviews.py b/rowers/views/planviews.py index 9d02627a..91e3b57a 100644 --- a/rowers/views/planviews.py +++ b/rowers/views/planviews.py @@ -1387,6 +1387,7 @@ from rowers.plannedsessions import cratiocolors,checkscores def plannedsessions_view(request, userid=0,startdatestring='',enddatestring=''): + try: r = getrequestplanrower(request,userid=userid) except PermissionDenied: # pragma: no cover diff --git a/rowers/views/teamviews.py b/rowers/views/teamviews.py index a862b5fc..a989b59a 100644 --- a/rowers/views/teamviews.py +++ b/rowers/views/teamviews.py @@ -564,9 +564,10 @@ def invitation_reject_view(request,id=0): @login_required() def rower_invitations_view(request,code=None,message='',successmessage=''): - if code: teams.remove_expired_invites() + + res,text = teams.process_invite_code(request.user,code) if res: # pragma: no cover messages.info(request,text)