videoflix/backend/auth_app/tests.py

160 lines
No EOL
6.3 KiB
Python

from django.urls import reverse
from rest_framework import status
from rest_framework.test import APITestCase
from rest_framework.authtoken.models import Token
from user_app.models import CustomUser
class AuthTests(APITestCase):
"""
Prepares the test environment by creating an active user and an authentication token.
"""
def setUp(self):
self.user = CustomUser.objects.create_user(
username='testuser', email='testuser@example.com', password='testpass'
)
self.user.is_active = True
self.user.save()
self.token = Token.objects.create(user=self.user)
def test_login(self):
"""
Tests whether an active user can log in successfully.
"""
url = reverse('login')
data = {'email': 'testuser@example.com', 'password': 'testpass'}
response = self.client.post(url, data)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertIn('token', response.data)
def test_login_inactive_user(self):
"""
Tests that an inactive user cannot log in.
"""
self.user.is_active = False
self.user.save()
url = reverse('login')
data = {'email': 'testuser@example.com', 'password': 'testpass'}
response = self.client.post(url, data)
self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
def test_register(self):
"""
Tests the registration of a new user and their inactivity after registration.
"""
url = reverse('register')
data = {'email': 'newuser@example.com', 'password': 'newpass', 'username': 'newuser'}
response = self.client.post(url, data)
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
self.assertFalse(CustomUser.objects.get(email='newuser@example.com').is_active)
def test_register_existing_user(self):
"""
Tests that registration with an existing e-mail fails.
"""
url = reverse('register')
data = {'email': 'testuser@example.com', 'password': 'newpass'}
response = self.client.post(url, data)
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
def test_verify_email(self):
"""
Tests email verification for an inactive user.
"""
self.user.is_active = False
self.user.verify_email_token = 'validtoken'
self.user.save()
url = reverse('verify_email')
data = {'email': 'testuser@example.com', 'token': 'validtoken'}
response = self.client.post(url, data)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.user.refresh_from_db()
self.assertTrue(self.user.is_active)
def test_verify_email_already_active(self):
"""
Tests that an already active user receives an error message during e-mail verification.
"""
email = 'testuser@example.com'
token = 'anytoken'
user = CustomUser.objects.create(email=email, verify_email_token=token, is_active=True)
url = reverse('verify_email')
data = {'email': email, 'token': token}
response = self.client.post(url, data)
self.assertEqual(response.status_code, status.HTTP_409_CONFLICT)
def test_verify_email_invalid(self):
"""
Tests the e-mail verification with invalid data.
"""
url = reverse('verify_email')
data = {'email': 'invalid@example.com', 'token': 'invalidtoken'}
response = self.client.post(url, data)
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
def test_forgot_password(self):
"""
Tests the forget password functionality and the generation of a new token.
"""
url = reverse('forgot_password')
data = {'email': 'testuser@example.com'}
response = self.client.post(url, data)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.user.refresh_from_db()
self.assertIsNotNone(self.user.verify_email_token)
def test_forgot_password_invalid_email(self):
"""
Tests the forgot password functionality with an invalid e-mail address.
"""
url = reverse('forgot_password')
data = {'email': 'invalid@example.com'}
response = self.client.post(url, data)
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
def test_change_password(self):
"""
Tests the password change with a valid token.
"""
self.user.verify_email_token = 'validtoken'
self.user.save()
url = reverse('change_password')
data = {'email': 'testuser@example.com', 'token': 'validtoken', 'new_password': 'newpass123'}
response = self.client.post(url, data)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.user.refresh_from_db()
self.assertTrue(self.user.check_password('newpass123'))
def test_change_password_invalid_token(self):
"""
Tests the password change with an invalid token.
"""
url = reverse('change_password')
data = {'email': 'testuser@example.com', 'token': 'invalidtoken', 'new_password': 'newpass123'}
response = self.client.post(url, data)
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
def test_auth_view_get_authenticated(self):
"""
Tests access to a protected view with authentication.
"""
self.client.credentials(HTTP_AUTHORIZATION='Token ' + self.token.key)
url = reverse('auth_view')
response = self.client.get(url)
self.assertEqual(response.status_code, status.HTTP_200_OK)
def test_auth_view_get_unauthenticated(self):
"""
Tests access to a protected view without authentication.
"""
url = reverse('auth_view')
response = self.client.get(url)
self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
def test_auth_view_post_existing_user(self):
"""
Tests access to a protected view with an existing user.
"""
url = reverse('auth_view')
data = {'email': 'testuser@example.com'}
response = self.client.post(url, data)
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)