From d49ebb95083eddfcd91ce30e6a5620706f371496 Mon Sep 17 00:00:00 2001 From: Haakon Gunleiksrud <haakogun@stud.ntnu.no> Date: Sat, 6 Mar 2021 14:16:44 +0100 Subject: [PATCH] get coverage package and the rest of tests for permissions.py to get 100 percent test coverage --- backend/secfit/.coverage | Bin 0 -> 241664 bytes backend/secfit/workouts/tests.py | 229 +++++++++++++++++++++++++++++-- 2 files changed, 214 insertions(+), 15 deletions(-) create mode 100644 backend/secfit/.coverage diff --git a/backend/secfit/.coverage b/backend/secfit/.coverage new file mode 100644 index 0000000000000000000000000000000000000000..c8e6278232f9a5fbd9914fffb587ee1587ae6212 GIT binary patch literal 241664 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 H%lm%-4=A{~ literal 0 HcmV?d00001 diff --git a/backend/secfit/workouts/tests.py b/backend/secfit/workouts/tests.py index 3d9f0f5..eacc9d8 100644 --- a/backend/secfit/workouts/tests.py +++ b/backend/secfit/workouts/tests.py @@ -31,14 +31,9 @@ class IsOwnerTestCase(TestCase): self.client_2 = APIClient() def test_has_object_permission(self): - - self.client_1.login(username="Bill", password="secret") - self.client_2.login(username="Alice", password="supersecret") - self.client_1.force_authenticate(user=self.user_1) self.client_2.force_authenticate(user=self.user_2) - #Disse må kanskje endres når vi setter de inn i CI. request_1 = self.client_1.get("http://testserver/api/workouts/1/") request_2 = self.client_2.get("http://testserver/api/workouts/1/") @@ -79,13 +74,9 @@ class IsOwnerOfWorkoutTestCase(TestCase): self.client_2 = APIClient() def test_has_permission(self): - self.client_1.login(username="Bill", password="secret") - self.client_2.login(username="Alice", password="supersecret") - self.client_1.force_authenticate(user=self.user_1) self.client_2.force_authenticate(user=self.user_2) - #Disse må kanskje endres når vi setter de inn i CI. get_request_1 = self.client_1.get("http://testserver/api/workouts/1/") get_request_2 = self.client_2.get("http://testserver/api/workouts/1/") post_request_1 = self.client_1.post("http://testserver/api/workouts/",{\ @@ -112,13 +103,9 @@ class IsOwnerOfWorkoutTestCase(TestCase): self.assertTrue(IsOwnerOfWorkout.has_permission(self,post_request_1,None)) def test_has_object_permission(self): - self.client_1.login(username="Bill", password="secret") - self.client_2.login(username="Alice", password="supersecret") - self.client_1.force_authenticate(user=self.user_1) self.client_2.force_authenticate(user=self.user_2) - #Disse må kanskje endres når vi setter de inn i CI. request_1 = self.client_1.get("http://testserver/api/workouts/1/") request_2 = self.client_2.get("http://testserver/api/workouts/1/") @@ -145,10 +132,222 @@ class IsOwnerOfWorkoutTestCase(TestCase): class IsCoachAndVisibleToCoachTestCase(TestCase): def setUp(self): - pass + User.objects.create(id="1",username="Bill",password="secret") + User.objects.create(id="2",username="Alice",password="supersecret") + + self.user_1 = User.objects.get(id="1") + self.user_2 = User.objects.get(id="2") + + #Sets up Bill to be Alice's coach but not Allice to be Bill's coach + self.user_2.coach = self.user_1 + + Workout.objects.create(id="1",name="Bill's workout",date=timezone.now(),owner=self.user_1,visibility="CO") + Workout.objects.create(id="2",name="Allice's workout",date=timezone.now(),owner=self.user_2,visibility="CO") + self.workout_1 = Workout.objects.get(name="Bill's workout") + self.workout_2 = Workout.objects.get(name="Allice's workout") + self.workout_2.owner.coach = self.user_1 + + Workout.objects.create(id="3",name="Bill's public workout",date=timezone.now(),owner=self.user_1,visibility="PU") + Workout.objects.create(id="4",name="Allice's public workout",date=timezone.now(),owner=self.user_2,visibility="PU") + self.workout_3 = Workout.objects.get(name="Bill's public workout") + self.workout_4 = Workout.objects.get(name="Allice's public workout") + + self.client_1 = APIClient() + self.client_2 = APIClient() + + def test_has_object_permission(self): + self.client_1.force_authenticate(user=self.user_1) + self.client_2.force_authenticate(user=self.user_2) + + request_1 = self.client_1.get("http://testserver/api/workouts/2/") + request_2 = self.client_2.get("http://testserver/api/workouts/1/") + + request_3 = self.client_1.get("http://testserver/api/workouts/4/") + request_4 = self.client_2.get("http://testserver/api/workouts/3/") + + request_1.user = self.user_1 + request_2.user = self.user_2 + request_3.user = self.user_1 + request_4.user = self.user_2 + + #Bill, who is Allice's coach and sends request 1 for workout 2 (Alice's workout) should receive access + self.assertTrue(IsCoachAndVisibleToCoach.has_object_permission(self,request_1,None,self.workout_2)) + #Allice should not be able to see Bill's workout since she is not Bill's coach + self.assertFalse(IsCoachAndVisibleToCoach.has_object_permission(self,request_2,None,self.workout_1)) + + #Both of the public workouts should be available + self.assertEqual(request_3.status_code,200) + self.assertEqual(request_4.status_code,200) + + def tearDown(self): + return super().tearDown() + +class IsCoachOfOwrkoutAndVisibleToCoachTestCase(TestCase): + def setUp(self): + User.objects.create(id="1",username="Bill",password="secret") + User.objects.create(id="2",username="Alice",password="supersecret") + + self.user_1 = User.objects.get(id="1") + self.user_2 = User.objects.get(id="2") + + #Sets up Bill to be Alice's coach but not Allice to be Bill's coach + self.user_2.coach = self.user_1 + + Workout.objects.create(id="1",name="Bill's workout",date=timezone.now(),owner=self.user_1,visibility="CO") + Workout.objects.create(id="2",name="Allice's workout",date=timezone.now(),owner=self.user_2,visibility="CO") + self.workout_1 = Workout.objects.get(name="Bill's workout") + self.workout_2 = Workout.objects.get(name="Allice's workout") + self.workout_2.owner.coach = self.user_1 + + self.client_1 = APIClient() + self.client_2 = APIClient() + + def test_has_object_permission(self): + self.client_1.force_authenticate(user=self.user_1) + self.client_2.force_authenticate(user=self.user_2) + + request_1 = self.client_1.get("http://testserver/api/workouts/2/") + request_2 = self.client_2.get("http://testserver/api/workouts/1/") + + request_3 = self.client_1.get("http://testserver/api/workouts/4/") + request_4 = self.client_2.get("http://testserver/api/workouts/3/") + + request_1.user = self.user_1 + request_2.user = self.user_2 + + class WorkOutClass: + def __init__(self,workout): + self.workout = workout + + workout_obj_1 = WorkOutClass(self.workout_1) + workout_obj_2 = WorkOutClass(self.workout_2) + + #Bill, who is Allice's coach and sends request 1 for workout 2 (Alice's workout) should receive access + self.assertTrue(IsCoachOfWorkoutAndVisibleToCoach.has_object_permission(self,request_1,None,workout_obj_2)) + #Allice should not be able to see Bill's workout since she is not Bill's coach + self.assertFalse(IsCoachOfWorkoutAndVisibleToCoach.has_object_permission(self,request_2,None,workout_obj_1)) + + def tearDown(self): + return super().tearDown() + +class IsPublicTestCase(TestCase): + def setUp(self): + User.objects.create(id="1",username="Bill",password="secret") + self.user_1 = User.objects.get(id="1") + + Workout.objects.create(id="1",name="Bill's public workout",date=timezone.now(),owner=self.user_1,visibility="PU") + Workout.objects.create(id="2",name="Bill's workout",date=timezone.now(),owner=self.user_1,visibility="CO") + Workout.objects.create(id="3",name="Bill's private workout",date=timezone.now(),owner=self.user_1,visibility="PR") + self.workout_1 = Workout.objects.get(name="Bill's public workout") + self.workout_2 = Workout.objects.get(name="Bill's workout") + self.workout_3 = Workout.objects.get(name="Bill's private workout") + + self.client_1 = APIClient() + + def test_has_object_permission(self): + self.client_1.force_authenticate(user=self.user_1) + + request_1 = self.client_1.get("http://testserver/api/workouts/1/") + request_2 = self.client_1.get("http://testserver/api/workouts/2/") + request_3 = self.client_1.get("http://testserver/api/workouts/2/") + + request_1.user = self.user_1 + request_2.user = self.user_1 + request_3.user = self.user_1 + + + #Bill, who is Allice's coach and sends request 1 for workout 2 (Alice's workout) should receive access + self.assertTrue(IsPublic.has_object_permission(self,request_1,None,self.workout_1)) + self.assertFalse(IsPublic.has_object_permission(self,request_2,None,self.workout_2)) + self.assertFalse(IsPublic.has_object_permission(self,request_3,None,self.workout_3)) + + def tearDown(self): + return super().tearDown() + +class IsWorkoutPublicTestCase(TestCase): + def setUp(self): + User.objects.create(id="1",username="Bill",password="secret") + self.user_1 = User.objects.get(id="1") + + Workout.objects.create(id="1",name="Bill's workout",date=timezone.now(),owner=self.user_1,visibility="PU") + Workout.objects.create(id="2",name="Bill's public workout",date=timezone.now(),owner=self.user_1,visibility="CO") + Workout.objects.create(id="3",name="Bill's private workout",date=timezone.now(),owner=self.user_1,visibility="PR") + + self.workout_1 = Workout.objects.get(name="Bill's workout") + self.workout_2 = Workout.objects.get(name="Bill's public workout") + self.workout_3 = Workout.objects.get(name="Bill's private workout") + + + self.client_1 = APIClient() + + def test_has_object_permission(self): + self.client_1.force_authenticate(user=self.user_1) + + request_1 = self.client_1.get("http://testserver/api/workouts/1/") + request_2 = self.client_1.get("http://testserver/api/workouts/2/") + request_3 = self.client_1.get("http://testserver/api/workouts/2/") + + + request_1.user = self.user_1 + request_2.user = self.user_1 + request_3.user = self.user_1 + + + class WorkOutClass: + def __init__(self,workout): + self.workout = workout + + workout_obj_1 = WorkOutClass(self.workout_1) + workout_obj_2 = WorkOutClass(self.workout_2) + workout_obj_3 = WorkOutClass(self.workout_3) + + + #The first + self.assertTrue(IsWorkoutPublic.has_object_permission(self,request_1,None,workout_obj_1)) + self.assertFalse(IsWorkoutPublic.has_object_permission(self,request_2,None,workout_obj_2)) + self.assertFalse(IsWorkoutPublic.has_object_permission(self,request_3,None,workout_obj_3)) + + def tearDown(self): + return super().tearDown() + +class IsReadOnlyTestCase(TestCase): + def setUp(self): + User.objects.create(id="1",username="Bill",password="secret") + self.user_1 = User.objects.get(id="1") + + Workout.objects.create(id="1",name="Bill's public workout",date=timezone.now(),owner=self.user_1,visibility="PU") + self.workout_1 = Workout.objects.get(name="Bill's public workout") + + self.client_1 = APIClient() def test_has_object_permission(self): - pass + self.client_1.force_authenticate(user=self.user_1) + + get_request = self.client_1.get("http://testserver/api/workouts/1/") + head_request = self.client_1.head("http://testserver/api/workouts/1/") + options_request = self.client_1.options("http://testserver/api/workouts/1/") + put_request = self.client_1.post("http://testserver/api/workouts/",{\ + 'name':'myeditedworkout', 'date':timezone.now(), 'notes':'QWERTY', 'exercise_instances':[], 'visbility':'PR'},format='json') + post_request = self.client_1.post("http://testserver/api/workouts/",{\ + 'name':'myworkout', 'date':timezone.now(), 'notes':'qwerty', 'exercise_instances':[], 'visbility':'PR'},format='json') + delete_request = self.client_1.delete("http://testserver/api/workouts/2/") + + get_request.method = get_request.request.get("REQUEST_METHOD") + head_request.method = head_request.request.get("REQUEST_METHOD") + options_request.method = options_request.request.get("REQUEST_METHOD") + put_request.method = put_request.request.get("REQUEST_METHOD") + post_request.method = post_request.request.get("REQUEST_METHOD") + delete_request.method = delete_request.request.get("REQUEST_METHOD") + + #Checks that GET, HEAD and OPTIONS requests return true. + self.assertTrue(IsReadOnly.has_object_permission(self,get_request,None,None)) + self.assertTrue(IsReadOnly.has_object_permission(self,head_request,None,None)) + self.assertTrue(IsReadOnly.has_object_permission(self,options_request,None,None)) + + #Checks that PUT, POST and DELETE requests fail this permission + self.assertFalse(IsReadOnly.has_object_permission(self,put_request,None,None)) + self.assertFalse(IsReadOnly.has_object_permission(self,post_request,None,None)) + self.assertFalse(IsReadOnly.has_object_permission(self,delete_request,None,None)) def tearDown(self): return super().tearDown() \ No newline at end of file -- GitLab