From 897fcdc1fc95f0b321a575375b0fe11f02ac5f2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vegard=20Sporst=C3=B8l?= <vegarms@stud.ntnu.no> Date: Mon, 8 Mar 2021 12:49:21 +0100 Subject: [PATCH] add boundary tests for workout and test for UC-1 --- backend/secfit/workouts/serializers.py | 2 - backend/secfit/workouts/tests.py | 110 +++++++++++++++++-------- backend/secfit/workouts/views.py | 11 ++- 3 files changed, 81 insertions(+), 42 deletions(-) diff --git a/backend/secfit/workouts/serializers.py b/backend/secfit/workouts/serializers.py index 4e3267e..26e6f25 100644 --- a/backend/secfit/workouts/serializers.py +++ b/backend/secfit/workouts/serializers.py @@ -98,9 +98,7 @@ class WorkoutSerializer(serializers.HyperlinkedModelSerializer): if "files" in validated_data: files_data = validated_data.pop("files") - print(validated_data) workout = Workout.objects.create(**validated_data) - print(workout) for exercise_instance_data in exercise_instances_data: ExerciseInstance.objects.create(workout=workout, **exercise_instance_data) diff --git a/backend/secfit/workouts/tests.py b/backend/secfit/workouts/tests.py index 6250bf9..1b7e201 100644 --- a/backend/secfit/workouts/tests.py +++ b/backend/secfit/workouts/tests.py @@ -1,6 +1,7 @@ import json from django.test import TestCase, RequestFactory, Client +from rest_framework.test import APIRequestFactory, APIClient from workouts.permissions import ( IsOwner, IsOwnerOfWorkout, @@ -15,40 +16,82 @@ from users.models import User from comments.models import Comment -class NewWorkoutTestCase(TestCase): + +### Test boundary values of new workout ### + +class BoundaryValuesOfNewWorkout(TestCase): def setUp(self): - self.client = Client() + self.client = APIClient() + self.user = User.objects.create(username="user",password="user") + self.client.force_authenticate(user=self.user) + self.request = json.loads('{"name": "test", "date": "2021-03-06T18:00:00.000Z", "notes": "note", "visibility": "PU", "exercise_instances": [], "filename": []}') - # Create user - self.user = User.objects.create(username="user") - self.user.set_password('user') - self.user.save() + def test_name(self): + self.request["name"] = "" + request = self.client.post('/api/workouts/', json.dumps(self.request), content_type='application/json') + self.assertEquals(request.status_code,400) #Blank should fail + + self.request["name"] = "test" + request = self.client.post('/api/workouts/', json.dumps(self.request), content_type='application/json') + self.assertEquals(request.status_code,201) - # Authenticate user - response = self.client.post('/api/token/', {'username': 'user', 'password': 'user'}) - content = json.loads(response.content) - self.client.defaults['HTTP_AUTHORIZATION'] = 'Bearer ' + content['access'] + self.request["name"] = "@€xrgrdh" + request = self.client.post('/api/workouts/', json.dumps(self.request), content_type='application/json') + self.assertEquals(request.status_code,201) #Wierd signs should propably fail, but app is faulty - def test_newWorkoutRegistration(self): - """ - response = self.client.post('/api/workouts/', {'name': 'test', 'date': '2021-03-06T18:00:00Z', - 'notes': 'note', 'owner': self.user, - 'visibility': 'PU'}) - self.assertEqual(response.status_code, 201) - """ + self.request["name"] = "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111" #100 + request = self.client.post('/api/workouts/', json.dumps(self.request), content_type='application/json') + self.assertEquals(request.status_code,201) -### Test boundary values of new workout ### + self.request["name"] = "11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111" #101 + request = self.client.post('/api/workouts/', json.dumps(self.request), content_type='application/json') + self.assertEquals(request.status_code,400) #More than 100 chars should fail -class BoundaryValuesOfNewWorkout(TestCase): - def setUp(self): - "" - def test_boundaryValuesOfNewWorkout(self): - "test boundary values of new workout" + def test_date(self): + self.request["date"] = "" + request = self.client.post('/api/workouts/', json.dumps(self.request), content_type='application/json') + self.assertEquals(request.status_code,400) #Blank should fail + + self.request["date"] = "2021-32-32T18:00:00.000Z" + request = self.client.post('/api/workouts/', json.dumps(self.request), content_type='application/json') + self.assertEquals(request.status_code,400) #Not valid date should fail + + self.request["date"] = "2021-03-08T18:00:00.000Z" + request = self.client.post('/api/workouts/', json.dumps(self.request), content_type='application/json') + self.assertEquals(request.status_code,201) + def test_notes(self): + self.request["notes"] = "" + request = self.client.post('/api/workouts/', json.dumps(self.request), content_type='application/json') + self.assertEquals(request.status_code,400) #Blank should fail + self.request["notes"] = "test" + request = self.client.post('/api/workouts/', json.dumps(self.request), content_type='application/json') + self.assertEquals(request.status_code,201) -### Test FR5 - Visibility of details, files and comments for Athletes, Coaches and other users### + # No upper value for notes + + def test_visibility(self): + self.request["visibility"] = "" + request = self.client.post('/api/workouts/', json.dumps(self.request), content_type='application/json') + self.assertEquals(request.status_code,400) #Blank should fail + + self.request["visibility"] = "XX" + request = self.client.post('/api/workouts/', json.dumps(self.request), content_type='application/json') + self.assertEquals(request.status_code,400) #Not one of the three cases should fail + + self.request["visibility"] = "PRI" + request = self.client.post('/api/workouts/', json.dumps(self.request), content_type='application/json') + self.assertEquals(request.status_code,400) #More than 2 chars should fail + + self.request["visibility"] = "PR" + request = self.client.post('/api/workouts/', json.dumps(self.request), content_type='application/json') + self.assertEquals(request.status_code,201) + + + +### Test FR5 - Visibility of details, files and comments for Athletes, Coaches and other users ### class AthleteAccessTestCase(TestCase): def setUp(self): @@ -193,20 +236,15 @@ class UserAccessTestCase(TestCase): class CreateWorkoutForAthleteTestCase(TestCase): def setUp(self): - self.client = Client() - - # Create user - self.user = User.objects.create(username="user") - self.user.set_password('user') - self.user.save() - - # Authenticate user - response = self.client.post('/api/token/', {'username': 'user', 'password': 'user'}) - content = json.loads(response.content) - self.client.defaults['HTTP_AUTHORIZATION'] = 'Bearer ' + content['access'] + self.client = APIClient() + self.user = User.objects.create(username="user",password="user") + self.client.force_authenticate(user=self.user) + self.request = json.loads('{"name": "test", "date": "2021-03-06T18:00:00.000Z", "notes": "note", "visibility": "PU", "exercise_instances": [], "filename": []}') def test_createWorkoutAsCoach(self): - "" + self.request["owner"] = "test" + request = self.client.post('/api/workouts/', json.dumps(self.request), content_type='application/json') + self.assertEquals(request.status_code,201) diff --git a/backend/secfit/workouts/views.py b/backend/secfit/workouts/views.py index 13dd972..a4119b8 100644 --- a/backend/secfit/workouts/views.py +++ b/backend/secfit/workouts/views.py @@ -129,10 +129,13 @@ class WorkoutList( return self.create(request, *args, **kwargs) def perform_create(self, serializer): - owner = self.request.POST.get("owner") - User = get_user_model() - user = User.objects.get(username=owner) - serializer.save(owner=user) + if(self.request.POST.get("owner")): + owner = self.request.POST.get("owner") + User = get_user_model() + user = User.objects.get(username=owner) + serializer.save(owner=user) + else: + serializer.save(owner=self.request.user) def get_queryset(self): qs = Workout.objects.none() -- GitLab