From 5f8fd9315a931d456cfcb8812b4ca99dab380f26 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Sat, 16 Feb 2019 19:43:21 +0100 Subject: [PATCH] passing tests again - now with coachinggroups --- rowers/models.py | 26 +++++++++++++++----------- rowers/teams.py | 16 ++++++++-------- rowers/templates/teams.html | 2 +- rowers/templatetags/rowerfilters.py | 10 +++------- rowers/tests/test_permissions.py | 13 ++++++++++--- rowers/tests/testdata/testdata.csv.gz | Bin 12525 -> 12525 bytes rowers/views/teamviews.py | 14 ++++++++------ rowers/views/workoutviews.py | 6 +++--- 8 files changed, 48 insertions(+), 39 deletions(-) diff --git a/rowers/models.py b/rowers/models.py index b4426431..b02e4889 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -633,7 +633,7 @@ class PaidPlan(models.Model): ) class CoachingGroup(models.Model): - pass + name = models.CharField(default='group',max_length=30,null=True,blank=True) # Extension of User with rowing specific data class Rower(models.Model): @@ -1003,13 +1003,15 @@ def checkworkoutuser(user,workout): return False try: r = Rower.objects.get(user=user) - coaches = rower_get_coaches(user.rower) if workout.user == r: return True - elif coaches: - for coach in coaches: - if user.rower == coach and workout.privacy == 'visible': - return True + coaches = [] + for group in workout.user.coachinggroups.all(): + coach = Rower.objects.get(mycoachgroup=group) + coaches.append(coach) + for coach in coaches: + if user.rower == coach and workout.privacy == 'visible': + return True else: return False except Rower.DoesNotExist: @@ -1022,11 +1024,13 @@ def checkaccessuser(user,rower): r = Rower.objects.get(user=user) if rower == r: return True - coaches = rower_get_coaches(rower) - if coaches: - for coach in coaches: - if user.rower == coach: - return True + coaches = [] + for group in rower.coachinggroups.all(): + coach = Rower.objects.get(mycoachgroup=group) + coaches.append(coach) + for coach in coaches: + if user.rower == coach: + return True else: return False except Rower.DoesNotExist: diff --git a/rowers/teams.py b/rowers/teams.py index 91b9e75d..ad9ed73e 100644 --- a/rowers/teams.py +++ b/rowers/teams.py @@ -17,7 +17,8 @@ queuelow = django_rq.get_queue('low') queuehigh = django_rq.get_queue('low') from rowers.models import ( - Rower, Workout, Team, TeamInvite,User,TeamRequest, CoachRequest, CoachOffer + Rower, Workout, Team, TeamInvite,User,TeamRequest, CoachRequest, CoachOffer, + CoachingGroup ) from rowers.tasks import ( @@ -105,15 +106,14 @@ def remove_team(id): def add_coach(coach,rower): # get coaching group - try: - coachgroup = coach.mycoachgroup - except CoachingGroup.DoesNotExist: - coachgroup = CoachingGroup() + coachgroup = coach.mycoachgroup + if coachgroup is None: + coachgroup = CoachingGroup(name=coach.user.first_name) coachgroup.save() coach.mycoachgroup = coachgroup coach.save() - rower.coachinggroups.add(coach) + rower.coachinggroups.add(coach.mycoachgroup) return (1,"Added Coach") @@ -159,7 +159,7 @@ def remove_coach(coach,rower): def rower_get_coaches(rower): coaches = [] - for group in rower.coachinggroups: + for group in rower.coachinggroups.all(): coach = Rower.objects.get(mycoachgroup=group) coaches.append(coach) @@ -167,7 +167,7 @@ def rower_get_coaches(rower): def coach_getcoachees(coach): - return Rower.objects.filter(coachinggroups__in=[coach.mycoachgroup]) + return Rower.objects.filter(coachinggroups__in=[coach.mycoachgroup]).distinct() def coach_remove_athlete(coach,rower): try: diff --git a/rowers/templates/teams.html b/rowers/templates/teams.html index d31b6ae4..59570f7d 100644 --- a/rowers/templates/teams.html +++ b/rowers/templates/teams.html @@ -313,7 +313,7 @@ Offer Coaching + href="/rowers/me/coachoffer/{{ a.user.id }}/">Offer Coaching {% endfor %} diff --git a/rowers/templatetags/rowerfilters.py b/rowers/templatetags/rowerfilters.py index be4413fb..c37c0e6a 100644 --- a/rowers/templatetags/rowerfilters.py +++ b/rowers/templatetags/rowerfilters.py @@ -376,15 +376,11 @@ def team_rowers(user): return [] +from rowers.teams import coach_getcoachees + @register.filter def coach_rowers(user): - try: - members = Rower.objects.filter(coaches__in=user.rower).distinct().order_by( - "user__last_name","user__last_name" - ) - return members - except TypeError: - return [] + return coach_getcoachees(user.rower) @register.filter def verbosetimeperiod(timeperiod): diff --git a/rowers/tests/test_permissions.py b/rowers/tests/test_permissions.py index cda4b9e5..72c43ff1 100644 --- a/rowers/tests/test_permissions.py +++ b/rowers/tests/test_permissions.py @@ -23,6 +23,9 @@ class PermissionsBasicsTests(TestCase): rowerplan='coach') self.ucoach_workouts = WorkoutFactory.create_batch(5, user=self.rcoach) + self.coachinggroup = CoachingGroup.objects.create() + self.rcoach.mycoachgroup = self.coachinggroup + self.rcoach.save() self.factory = RequestFactory() self.password = faker.word() self.ucoach.set_password(self.password) @@ -280,6 +283,9 @@ class PermissionsViewTests(TestCase): rowerplan='coach') self.ucoach_workouts = WorkoutFactory.create_batch(5, user=self.rcoach) + self.coachinggroup = CoachingGroup.objects.create() + self.rcoach.mycoachgroup = self.coachinggroup + self.rcoach.save() self.factory = RequestFactory() self.ucoachpassword = faker.word() self.ucoach.set_password(self.ucoachpassword) @@ -458,7 +464,7 @@ class PermissionsViewTests(TestCase): ## Coach can edit on behalf of athlete if permitted def test_coach_edit_athlete_settings(self): self.rbasic.team.add(self.teamcoach) - self.rbasic.coaches.add(self.rcoach) + self.rbasic.coachinggroups.add(self.coachinggroup) login = self.c.login(username=self.ucoach.username, password=self.ucoachpassword) self.assertTrue(login) @@ -483,7 +489,7 @@ class PermissionsViewTests(TestCase): @patch('rowers.dataprep.read_cols_df_sql', side_effect = mocked_read_df_cols_sql_multistats) def test_coach_edit_athlete_analysis(self,mocked_df): self.rbasic.team.add(self.teamcoach) - self.rbasic.coaches.add(self.rcoach) + self.rbasic.coachinggroups.add(self.coachinggroup) login = self.c.login(username=self.ucoach.username, password=self.ucoachpassword) self.assertTrue(login) @@ -523,7 +529,8 @@ class PermissionsViewTests(TestCase): @patch('rowers.dataprep.getsmallrowdata_db',side_effect=mocked_getsmallrowdata_db) def test_coach_edit_athlete_upload(self,mocked_sqlalchemy,mocked_getsmallrowdata_db): self.rbasic.team.add(self.teamcoach) - self.rbasic.coaches.add(self.rcoach) + self.rbasic.coachinggroups.add(self.coachinggroup) + login = self.c.login(username=self.ucoach.username, password=self.ucoachpassword) self.assertTrue(login) diff --git a/rowers/tests/testdata/testdata.csv.gz b/rowers/tests/testdata/testdata.csv.gz index 7256d94144270203437770568d2c04f40f5a37da..39549454059f23d3023d96cba1b69c6f57433f2f 100644 GIT binary patch delta 16 XcmaEx_%@MUzMF$%UU