diff --git a/backend/videoflix/users/tests.py b/backend/videoflix/users/tests.py index 7ce503c..c7bb4fa 100644 --- a/backend/videoflix/users/tests.py +++ b/backend/videoflix/users/tests.py @@ -1,3 +1,75 @@ from django.test import TestCase +from django.urls import reverse +from rest_framework import status +from rest_framework.test import APIClient +from .models import CustomUser +from django.contrib.auth import get_user_model -# Create your tests here. +User = get_user_model() + +class UserTests(TestCase): + def setUp(self): + """ + Initializes the APIClient and creates test users. Authenticates a user for the tests. + """ + self.client = APIClient() + self.user = User.objects.create_user(username='testuser', password='testpass') + self.client.force_authenticate(user=self.user) + self.user2 = User.objects.create_user(username='testuser2', password='testpass2') + + def test_get_users(self): + """ + Checks whether the GET request to /users/ returns a 200 OK response and returns two users. + """ + url = reverse('user_list') + response = self.client.get(url) + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(len(response.data), 2) + + def test_post_user(self): + """ + Tests whether a POST request to /users/ creates a new user and returns a 201 Created response. + """ + url = reverse('user_list') + data = {'username': 'testuser3', 'password': 'testpass3'} + response = self.client.post(url, data, format='json') + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + self.assertEqual(User.objects.count(), 3) + self.assertEqual(User.objects.get(username='testuser3').username, 'testuser3') + + def test_get_user_detail(self): + """ + Checks whether the GET request to /users// returns the correct user details. + """ + url = reverse('user_detail', args=[self.user.pk]) + response = self.client.get(url) + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(response.data['username'], 'testuser') + + def test_put_user_detail(self): + """ + Tests whether a PUT request to /users// updates the user details and returns a 200 OK response. + """ + url = reverse('user_detail', args=[self.user.pk]) + data = {'username': 'updateduser', 'password': 'newpass'} + response = self.client.put(url, data, format='json') + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.user.refresh_from_db() + self.assertEqual(self.user.username, 'updateduser') + + def test_delete_user_detail(self): + """ + Checks whether a DELETE request to /users// deletes the user and returns a 204 No Content response. + """ + url = reverse('user_detail', args=[self.user.pk]) + response = self.client.delete(url) + self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) + self.assertFalse(User.objects.filter(pk=self.user.pk).exists()) + + def test_get_user_detail_not_found(self): + """ + Tests whether a GET request to /users// for a non-existent user returns a 404 Not Found response. + """ + url = reverse('user_detail', args=[9999]) + response = self.client.get(url) + self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) diff --git a/backend/videoflix/users/views.py b/backend/videoflix/users/views.py index 9008dda..22e0450 100644 --- a/backend/videoflix/users/views.py +++ b/backend/videoflix/users/views.py @@ -19,7 +19,7 @@ def user_list(request): elif request.method == 'POST': serializer = UserSerializer(data= request.data) if serializer.is_valid(): - serializer.save + serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) diff --git a/backend/videoflix/videoflix/urls.py b/backend/videoflix/videoflix/urls.py index 61691c8..25d9cfe 100644 --- a/backend/videoflix/videoflix/urls.py +++ b/backend/videoflix/videoflix/urls.py @@ -41,8 +41,8 @@ urlpatterns = [ path('content/movie//', content_views.check_video), # Users URLs - path('users/', user_views.user_list), - path('users//', user_views.user_detail), + path('users/', user_views.user_list, name='user_list'), + path('users//', user_views.user_detail, name='user_detail'), # Authentication URLs path('auth/', AuthView.as_view()),