add tests for user API endpoints
This commit is contained in:
parent
5e39c3d035
commit
e4bb9f1ff2
3 changed files with 76 additions and 4 deletions
|
|
@ -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/<id>/ 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/<id>/ 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/<id>/ 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/<id>/ 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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -41,8 +41,8 @@ urlpatterns = [
|
|||
path('content/movie/<int:id>/', content_views.check_video),
|
||||
|
||||
# Users URLs
|
||||
path('users/', user_views.user_list),
|
||||
path('users/<int:id>/', user_views.user_detail),
|
||||
path('users/', user_views.user_list, name='user_list'),
|
||||
path('users/<int:id>/', user_views.user_detail, name='user_detail'),
|
||||
|
||||
# Authentication URLs
|
||||
path('auth/', AuthView.as_view()),
|
||||
|
|
|
|||
Loading…
Reference in a new issue