From cf03910dc75f8142994677675d26e31d07e84310 Mon Sep 17 00:00:00 2001 From: Emilorv Date: Thu, 3 Apr 2025 22:56:45 +0200 Subject: [PATCH] make tests for number and set --- backend/tests/test_exercise_number.py | 158 +++++++++++--------------- backend/tests/test_exercise_set.py | 122 ++++++++++++-------- backend/tests/test_template.py | 16 --- 3 files changed, 142 insertions(+), 154 deletions(-) delete mode 100644 backend/tests/test_template.py diff --git a/backend/tests/test_exercise_number.py b/backend/tests/test_exercise_number.py index 7d2d8d2..17d2222 100644 --- a/backend/tests/test_exercise_number.py +++ b/backend/tests/test_exercise_number.py @@ -1,8 +1,9 @@ import pytest from rest_framework.test import APIClient from django.utils.timezone import now -from workouts.models import Workout +from workouts.models import Workout, Exercise from django.contrib.auth import get_user_model +from workouts.serializers import ExerciseSerializer from django.test import TestCase @@ -12,113 +13,92 @@ def setUp(self): self.client = APIClient() self.user = get_user_model().objects.create_user(username="testuser", password="password") self.client.force_authenticate(self.user) - - def test_exercise_number_negative_number(self): + self.exercise = Exercise.objects.create(name="Test Exercise", description="Test Description") + self.exercise.url = ExerciseSerializer(self.exercise, context={"request": None}).data["url"] + + def test_exercise_number_min_minus(self): response = self.client.post("/api/workouts/", { - "name": "Morning Run", - "date": now().isoformat(), - "notes": "5km run", + "name": "Invalid workout", # Adding name field which is required + "date": now().isoformat(), # Adding date field which is required + "notes": "Invalid", # Adding notes field which is required "visibility": "PU", # Adding visibility field which is required - "owner": self.user.id, # Adding owner field which seems to be required - "exercise_instances": [] # Adding exercise_instances field which is required - }, format="json") - - - assert response.status_code == 201 - assert Workout.objects.count() == 1 - - def test_exercise_number_non_number(self): # - response = self.client.post("/api/workouts/", { - "name": "Invalid Run", - "date": "invalid_date", - "notes": "Wrong format", - "visibility": "PU", # Adding required field - "owner": self.user.id, # Adding required field - "exercise_instances": [] # Adding required field + "owner": self.user.id, # Adding owner field which is required + "exercise_instances": [{"exercise":self.exercise.url, "sets": 1, "number": -5}] }, format="json") - - assert response.status_code == 400 # Should return validation error - def test_exercise_number_min_minus(self): # + assert response.status_code == 400 + + def test_exercise_number_non_number(self): response = self.client.post("/api/workouts/", { - "name": "Invalid Run", - "date": "invalid_date", - "notes": "Wrong format", - "visibility": "PU", # Adding required field - "owner": self.user.id, # Adding required field - "exercise_instances": [] # Adding required field + "name": "Valid workout", # Adding name field which is required + "date": now().isoformat(), # Adding date field which is required + "notes": "Valid", # Adding notes field which is required + "visibility": "PU", # Adding visibility field which is required + "owner": self.user.id, # Adding owner field which is required + "exercise_instances": [{"exercise":self.exercise.url, "sets": 1, "number": "a"}] }, format="json") - - assert response.status_code == 400 # Should return validation error - def test_exercise_number_min(self): # - response = self.client.post("/api/workouts/", { - "name": "Invalid Run", - "date": "invalid_date", - "notes": "Wrong format", - "visibility": "PU", # Adding required field - "owner": self.user.id, # Adding required field - "exercise_instances": [] # Adding required field - }, format="json") - - assert response.status_code == 400 # Should return validation error + assert response.status_code == 400 - def test_exercise_number_min_plus(self): # + + def test_exercise_number_min_minus(self): response = self.client.post("/api/workouts/", { - "name": "Invalid Run", - "date": "invalid_date", - "notes": "Wrong format", - "visibility": "PU", # Adding required field - "owner": self.user.id, # Adding required field - "exercise_instances": [] # Adding required field + "name": "Invalid workout", # Adding name field which is required + "date": now().isoformat(), # Adding date field which is required + "notes": "Invalid", # Adding notes field which is required + "visibility": "PU", # Adding visibility field which is required + "owner": self.user.id, # Adding owner field which is required + "exercise_instances": [{"exercise":self.exercise.url, "sets": 1, "number": 0}] }, format="json") - - assert response.status_code == 400 # Should return validation error + + print(self.exercise.id) + assert response.status_code == 400 - def test_exercise_number_nom(self): # + def test_exercise_number_min_plus(self): response = self.client.post("/api/workouts/", { - "name": "Invalid Run", - "date": "invalid_date", - "notes": "Wrong format", - "visibility": "PU", # Adding required field - "owner": self.user.id, # Adding required field - "exercise_instances": [] # Adding required field + "name": "Valid workout", # Adding name field which is required + "date": now().isoformat(), # Adding date field which is required + "notes": "Valid", # Adding notes field which is required + "visibility": "PU", # Adding visibility field which is required + "owner": self.user.id, # Adding owner field which is required + "exercise_instances": [{"exercise":self.exercise.url, "sets": 1, "number": 2}] }, format="json") - - assert response.status_code == 400 # Should return validation error - def test_exercise_number_max_minus(self): # + assert response.status_code == 201 + + def test_exercise_number_nom(self): response = self.client.post("/api/workouts/", { - "name": "Invalid Run", - "date": "invalid_date", - "notes": "Wrong format", - "visibility": "PU", # Adding required field - "owner": self.user.id, # Adding required field - "exercise_instances": [] # Adding required field + "name": "Valid workout", # Adding name field which is required + "date": now().isoformat(), # Adding date field which is required + "notes": "Valid", # Adding notes field which is required + "visibility": "PU", # Adding visibility field which is required + "owner": self.user.id, # Adding owner field which is required + "exercise_instances": [{"exercise":self.exercise.url, "sets": 1, "number": 3}] }, format="json") - - assert response.status_code == 400 # Should return validation error - def test_exercise_number_max(self): # + assert response.status_code == 201 + + def test_exercise_number_max_minus(self): response = self.client.post("/api/workouts/", { - "name": "Invalid Run", - "date": "invalid_date", - "notes": "Wrong format", - "visibility": "PU", # Adding required field - "owner": self.user.id, # Adding required field - "exercise_instances": [] # Adding required field + "name": "Valid workout", # Adding name field which is required + "date": now().isoformat(), # Adding date field which is required + "notes": "Valid", # Adding notes field which is required + "visibility": "PU", # Adding visibility field which is required + "owner": self.user.id, # Adding owner field which is required + "exercise_instances": [{"exercise":self.exercise.url, "sets": 1, "number": 998}] }, format="json") - - assert response.status_code == 400 # Should return validation error - def test_exercise_number_max_plus(self): # + assert response.status_code == 201 + + def test_exercise_number_max_plus(self): response = self.client.post("/api/workouts/", { - "name": "Invalid Run", - "date": "invalid_date", - "notes": "Wrong format", - "visibility": "PU", # Adding required field - "owner": self.user.id, # Adding required field - "exercise_instances": [] # Adding required field + "name": "Valid workout", # Adding name field which is required + "date": now().isoformat(), # Adding date field which is required + "notes": "Valid", # Adding notes field which is required + "visibility": "PU", # Adding visibility field which is required + "owner": self.user.id, # Adding owner field which is required + "exercise_instances": [{"exercise":self.exercise.url, "sets": 1, "number": 1000}] }, format="json") - - assert response.status_code == 400 # Should return validation error \ No newline at end of file + + assert response.status_code == 400 + \ No newline at end of file diff --git a/backend/tests/test_exercise_set.py b/backend/tests/test_exercise_set.py index abf883e..f787648 100644 --- a/backend/tests/test_exercise_set.py +++ b/backend/tests/test_exercise_set.py @@ -1,8 +1,9 @@ import pytest from rest_framework.test import APIClient from django.utils.timezone import now -from workouts.models import Workout +from workouts.models import Workout, Exercise from django.contrib.auth import get_user_model +from workouts.serializers import ExerciseSerializer from django.test import TestCase @@ -12,66 +13,89 @@ def setUp(self): self.client = APIClient() self.user = get_user_model().objects.create_user(username="testuser", password="password") self.client.force_authenticate(self.user) - - def test_exercise_set_min_minus(self): # + self.exercise = Exercise.objects.create(name="Test Exercise", description="Test Description") + self.exercise.url = ExerciseSerializer(self.exercise, context={"request": None}).data["url"] + + def test_exercise_set_min_minus(self): response = self.client.post("/api/workouts/", { - "name": "Morning Run", - "date": now().isoformat(), - "notes": "5km run", + "name": "Invalid workout", # Adding name field which is required + "date": now().isoformat(), # Adding date field which is required + "notes": "Invalid", # Adding notes field which is required "visibility": "PU", # Adding visibility field which is required - "owner": self.user.id, # Adding owner field which seems to be required - "exercise_instances": [] # Adding exercise_instances field which is required + "owner": self.user.id, # Adding owner field which is required + "exercise_instances": [{"exercise":self.exercise.url, "sets": 0, "number": 1}] }, format="json") - - + + assert response.status_code == 400 + + def test_exercise_set_min(self): + response = self.client.post("/api/workouts/", { + "name": "Valid workout", # Adding name field which is required + "date": now().isoformat(), # Adding date field which is required + "notes": "Valid", # Adding notes field which is required + "visibility": "PU", # Adding visibility field which is required + "owner": self.user.id, # Adding owner field which is required + "exercise_instances": [{"exercise":self.exercise.url, "sets": 1, "number": 1}] + }, format="json") + + assert response.status_code == 201 + + def test_exercise_set_min_plus(self): + response = self.client.post("/api/workouts/", { + "name": "Valid workout", # Adding name field which is required + "date": now().isoformat(), # Adding date field which is required + "notes": "Valid", # Adding notes field which is required + "visibility": "PU", # Adding visibility field which is required + "owner": self.user.id, # Adding owner field which is required + "exercise_instances": [{"exercise":self.exercise.url, "sets": 2, "number": 1}] + }, format="json") + assert response.status_code == 201 - assert Workout.objects.count() == 1 - def test_exercise_set_min_plus(self): # + def test_exercise_set_nom(self): response = self.client.post("/api/workouts/", { - "name": "Invalid Run", - "date": "invalid_date", - "notes": "Wrong format", - "visibility": "PU", # Adding required field - "owner": self.user.id, # Adding required field - "exercise_instances": [] # Adding required field + "name": "Valid workout", # Adding name field which is required + "date": now().isoformat(), # Adding date field which is required + "notes": "Valid", # Adding notes field which is required + "visibility": "PU", # Adding visibility field which is required + "owner": self.user.id, # Adding owner field which is required + "exercise_instances": [{"exercise":self.exercise.url, "sets": 3, "number": 1}] }, format="json") - - assert response.status_code == 400 # Should return validation error - def test_exercise_set_nom(self): # + assert response.status_code == 201 + + def test_exercise_set_max_minus(self): response = self.client.post("/api/workouts/", { - "name": "Invalid Run", - "date": "invalid_date", - "notes": "Wrong format", - "visibility": "PU", # Adding required field - "owner": self.user.id, # Adding required field - "exercise_instances": [] # Adding required field + "name": "Valid workout", # Adding name field which is required + "date": now().isoformat(), # Adding date field which is required + "notes": "Valid", # Adding notes field which is required + "visibility": "PU", # Adding visibility field which is required + "owner": self.user.id, # Adding owner field which is required + "exercise_instances": [{"exercise":self.exercise.url, "sets": 998, "number": 1}] }, format="json") - - assert response.status_code == 400 # Should return validation error - def test_exercise_set_max_minus(self): # + assert response.status_code == 201 + + def test_exercise_set_max(self): response = self.client.post("/api/workouts/", { - "name": "Invalid Run", - "date": "invalid_date", - "notes": "Wrong format", - "visibility": "PU", # Adding required field - "owner": self.user.id, # Adding required field - "exercise_instances": [] # Adding required field + "name": "Valid workout", # Adding name field which is required + "date": now().isoformat(), # Adding date field which is required + "notes": "Valid", # Adding notes field which is required + "visibility": "PU", # Adding visibility field which is required + "owner": self.user.id, # Adding owner field which is required + "exercise_instances": [{"exercise":self.exercise.url, "sets": 999, "number": 1}] }, format="json") - - assert response.status_code == 400 # Should return validation error - - def test_exercise_set_max_plus(self): # + + assert response.status_code == 201 + + def test_exercise_set_max_plus(self): response = self.client.post("/api/workouts/", { - "name": "Invalid Run", - "date": "invalid_date", - "notes": "Wrong format", - "visibility": "PU", # Adding required field - "owner": self.user.id, # Adding required field - "exercise_instances": [] # Adding required field + "name": "Invalid workout", # Adding name field which is required + "date": now().isoformat(), # Adding date field which is required + "notes": "Invalid", # Adding notes field which is required + "visibility": "PU", # Adding visibility field which is required + "owner": self.user.id, # Adding owner field which is required + "exercise_instances": [{"exercise":self.exercise.url, "sets": 1000, "number": 1}] }, format="json") - - assert response.status_code == 400 # Should return validation error - \ No newline at end of file + + assert response.status_code == 400 \ No newline at end of file diff --git a/backend/tests/test_template.py b/backend/tests/test_template.py deleted file mode 100644 index 4a3dda4..0000000 --- a/backend/tests/test_template.py +++ /dev/null @@ -1,16 +0,0 @@ -from django.test import TestCase -from workouts.models import Exercise - - -class User(TestCase): - def setUp(self): - Exercise.objects.create(name="Pushup", description="Pushup", unit="reps") - Exercise.objects.create(name="Running", description="Running", unit="minutes") - Exercise.objects.create(name="Dumbbell curl", description="Lifting dumbbells", unit="reps") - - def test_user_has_coach(self): - all_exercises = Exercise.objects.all() - num_reps = Exercise.objects.filter(unit="reps") - - self.assertEqual(len(all_exercises), 3) - self.assertEqual(len(num_reps), 2)