From 688630571f44928b8c39dc02e267558a3085073a Mon Sep 17 00:00:00 2001 From: Sondre Malerud Date: Thu, 3 Apr 2025 12:54:41 +0200 Subject: [PATCH] Added tests --- .github/workflows/deploy_test.yml | 12 ++++++++ backend/{tests => }/Dockerfile.test | 5 +-- backend/tests/test_user.py | 48 ++++++++++++++++++++++++++++- 3 files changed, 62 insertions(+), 3 deletions(-) rename backend/{tests => }/Dockerfile.test (69%) diff --git a/.github/workflows/deploy_test.yml b/.github/workflows/deploy_test.yml index 0568147..debb08c 100644 --- a/.github/workflows/deploy_test.yml +++ b/.github/workflows/deploy_test.yml @@ -19,6 +19,18 @@ on: - "docker-compose.yml" jobs: + test: + runs-on: self-hosted + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Build and run tests + run: | + docker build -f backend/Dockerfile.test -t secfit_test . + docker run --rm secfit_test + + deploy: runs-on: self-hosted env: diff --git a/backend/tests/Dockerfile.test b/backend/Dockerfile.test similarity index 69% rename from backend/tests/Dockerfile.test rename to backend/Dockerfile.test index 7c28661..ae1ce60 100644 --- a/backend/tests/Dockerfile.test +++ b/backend/Dockerfile.test @@ -12,5 +12,6 @@ WORKDIR /app EXPOSE 8000 -# Runs migrations and starts the server -CMD ["sh", "-c", "python manage.py migrate && python manage.py runserver 0.0.0.0:8000"] +# Runs tests +CMD ["sh", "-c", "python manage.py test"] +#CMD ["sh", "-c", "python manage.py migrate && python manage.py runserver 0.0.0.0:8000"] diff --git a/backend/tests/test_user.py b/backend/tests/test_user.py index 6388e5f..fd5de4c 100644 --- a/backend/tests/test_user.py +++ b/backend/tests/test_user.py @@ -1,8 +1,12 @@ from django.test import TestCase from users.models import User from users.serializers import UserSerializer +from workouts.serializers import ExerciseSerializer +from comments.serializers import CommentSerializer + class TestUser(TestCase): + #TC_001 def test_signing_up_with_invalid_email(self): data = { "username": "test", @@ -19,6 +23,7 @@ def test_signing_up_with_invalid_email(self): self.assertFalse(serializer.is_valid()) self.assertIn('email', serializer.errors) + #TC_002 def test_password_below_minimum_length(self): data = { "username": "test", @@ -33,4 +38,45 @@ def test_password_below_minimum_length(self): } serializer = UserSerializer(data=data) self.assertFalse(serializer.is_valid()) - self.assertIn('password', serializer.errors) \ No newline at end of file + self.assertIn('password', serializer.errors) + + #New test case + def test_exercise_name_exceeds_max_length(self): + long_name = "A" * 100_000 # 100000 characters, going far over the 100 character limit + data = { + "name": long_name, + "description": "blablabla", + "unit": "reps" + } + serializer = ExerciseSerializer(data=data) + self.assertFalse(serializer.is_valid()) + self.assertIn("name", serializer.errors) + + #New test case + def test_duplicate_username(self): + User.objects.create_user(username="testuser", password="Tdt4141!?@abc", email="testuser@mail.com") + + # creating a new user with thte same username + user_data = { + "username": "testuser", #duplicate + "password": "Tdt4141!?@abc", + "password1": "Tdt4141!?@abc", + "email": "notthesameuser@mail.com", + "isCoach": False, + } + + serializer = UserSerializer(data=user_data) + self.assertFalse(serializer.is_valid()) + self.assertIn("username", serializer.errors) + + #New test case + def test_comment_without_content(self): + comment_data = { + "owner": "mock_user", + "workout": "mock_workout", + "content": "", #empty comment + } + + serializer = CommentSerializer(data=comment_data) + self.assertFalse(serializer.is_valid()) + self.assertIn("content", serializer.errors)