From 63cd7d8e83b7c554c924391fce0e1e49ef330370 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Sun, 5 May 2019 20:49:47 +0200 Subject: [PATCH] basic stuff done for Free Coach model --- rowers/models.py | 10 +- rowers/tests/test_permissions.py | 177 +++++++++++++++++++++++++++++++ 2 files changed, 186 insertions(+), 1 deletion(-) diff --git a/rowers/models.py b/rowers/models.py index f124ac36..b44fc6c7 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -601,7 +601,8 @@ plans = ( ('basic','basic'), ('pro','pro'), ('plan','plan'), - ('coach','coach') + ('coach','coach'), + ('freecoach','freecoach'), ) paymenttypes = ( @@ -2575,6 +2576,13 @@ class Workout(models.Model): choices=privacychoices) rankingpiece = models.BooleanField(default=False,verbose_name='Ranking Piece') duplicate = models.BooleanField(default=False,verbose_name='Duplicate Workout') + + def save(self, *args, **kwargs): + user = self.user + if self.user.rowerplan == 'freecoach': + raise ValidationError("Free Coach User cannot have any workouts") + + super(Workout, self).save(*args, **kwargs) def __str__(self): diff --git a/rowers/tests/test_permissions.py b/rowers/tests/test_permissions.py index 5486f7cc..a82002a7 100644 --- a/rowers/tests/test_permissions.py +++ b/rowers/tests/test_permissions.py @@ -14,7 +14,184 @@ from django.db import transaction import rowers.teams as teams import rowers.plannedsessions as plannedsessions +@override_settings(TESTING=True) +class PermissionsFreeCoach(TestCase): + def setUp(self): + self.c = Client() + ## Users - Pro, Basic, Free Coach & Self Coach + self.ufreecoach = UserFactory(username='coachuser') + self.rfreecoach = Rower.objects.create(user=self.ufreecoach, + birthdate=faker.profile()['birthdate'], + gdproptin=True,gdproptindate=timezone.now(), + rowerplan='freecoach',clubsize=100) + + self.coachinggroup = CoachingGroup.objects.create() + self.rfreecoach.mycoachgroup = self.coachinggroup + self.rfreecoach.save() + self.factory = RequestFactory() + self.password = faker.word() + self.ufreecoach.set_password(self.password) + self.ufreecoach.save() + + self.uplan = UserFactory(username='planuser') + self.rplan = Rower.objects.create(user=self.uplan, + birthdate=faker.profile()['birthdate'], + gdproptin=True,gdproptindate=timezone.now(), + rowerplan='plan') + + self.uplan_workouts = WorkoutFactory.create_batch(5, user=self.rplan) + self.factory = RequestFactory() + self.password = faker.word() + self.uplan.set_password(self.password) + self.uplan.save() + + self.upro = UserFactory(username='prouser') + self.rpro = Rower.objects.create(user=self.upro, + birthdate=faker.profile()['birthdate'], + gdproptin=True,gdproptindate=timezone.now(), + rowerplan='pro') + + self.upro_workouts = WorkoutFactory.create_batch(5, user=self.rpro) + self.factory = RequestFactory() + self.password = faker.word() + self.upro.set_password(self.password) + self.upro.save() + + self.uplan2 = UserFactory(username='planuser2') + self.rplan2 = Rower.objects.create(user=self.uplan2, + birthdate=faker.profile()['birthdate'], + gdproptin=True,gdproptindate=timezone.now(), + rowerplan='plan') + + self.uplan2_workouts = WorkoutFactory.create_batch(5, user=self.rplan2) + self.factory = RequestFactory() + self.password = faker.word() + self.uplan2.set_password(self.password) + self.uplan2.save() + + self.upro2 = UserFactory(username='prouser2') + self.rpro2 = Rower.objects.create(user=self.upro2, + birthdate=faker.profile()['birthdate'], + gdproptin=True,gdproptindate=timezone.now(), + rowerplan='pro') + + self.upro2_workouts = WorkoutFactory.create_batch(5, user=self.rpro2) + self.factory = RequestFactory() + self.password = faker.word() + self.upro2.set_password(self.password) + self.upro2.save() + + self.ubasic = UserFactory(username='basicuser') + self.rbasic = Rower.objects.create(user=self.ubasic, + birthdate=faker.profile()['birthdate'], + gdproptin=True,gdproptindate=timezone.now(), + rowerplan='basic') + + self.ubasic_workouts = WorkoutFactory.create_batch(5, user=self.rbasic) + self.factory = RequestFactory() + self.ubasicpassword = faker.word() + self.ubasic.set_password(self.ubasicpassword) + self.ubasic.save() + + + + ## TeamFreeCoach + + self.teamfreecoach = Team.objects.create( + name=faker.word()+'3', + notes=faker.text(), + manager=self.ufreecoach) + + ## Coach can have any number of groups + def test_coach_groupmanager(self): + team1 = Team.objects.create( + name = 'FirstTeam', + notes = faker.text(), + manager = self.ufreecoach, + ) + + self.assertEqual(team1.manager,self.ufreecoach) + + team2 = Team.objects.create( + name = 'SecondTeam', + notes = faker.text(), + manager = self.ufreecoach, + ) + + self.assertEqual(team2.manager,self.ufreecoach) + + + team3 = Team.objects.create( + name = 'ThirdTeam', + notes = faker.text(), + manager = self.ufreecoach, + ) + + self.assertEqual(team3.manager,self.ufreecoach) + + + + ## Free coach can create more than one group + def test_plan_groupmanager(self): + team1 = Team.objects.create( + name = 'FirstTeam', + notes = faker.text(), + manager = self.ufreecoach, + ) + + self.assertEqual(team1.manager,self.ufreecoach) + + team2 = Team.objects.create( + name = 'SecondTeam', + notes = faker.text(), + manager = self.ufreecoach, + ) + + self.assertEqual(team2.manager,self.ufreecoach) + + + + ## Free Coach can create planned sessions and team planned sessions + ## Self Coach and higher can create planned sessions and team planned sessions + def test_plan_create_session(self): + ps = PlannedSession.objects.create( + manager=self.ufreecoach, + name=faker.word(), + comment=faker.text() + ) + self.assertEqual(ps.manager,self.ufreecoach) + + def test_coach_create_session(self): + ps = PlannedSession.objects.create( + manager=self.ufreecoach, + name=faker.word(), + comment=faker.text() + ) + self.assertEqual(ps.manager,self.ufreecoach) + + + ## Basic cannot join groups led by Free Coach + def test_add_basic_pro_or_plan(self): + with transaction.atomic(): + with self.assertRaises(ValidationError): + self.rbasic.team.add(self.teamfreecoach) + + + ## Free Coach user cannot have workouts + def test_add_workout_freecoach(self): + result = get_random_file(filename='rowers/tests/testdata/erg1.csv') + with transaction.atomic(): + with self.assertRaises(ValidationError): + self.werg1 = WorkoutFactory(user=self.rfreecoach, + csvfilename=result['filename'], + starttime=result['starttime'], + startdatetime=result['startdatetime'], + duration=result['duration'], + distance=result['totaldist'], + workouttype = 'rower', + ) + @override_settings(TESTING=True) class PermissionsBasicsTests(TestCase): def setUp(self):