mirror of
https://git.v0id.ovh/n3wt-innov/n3wt-school.git
synced 2026-04-03 16:51:26 +00:00
146 lines
5.5 KiB
Python
146 lines
5.5 KiB
Python
"""
|
|
Tests unitaires pour le module Common.
|
|
Vérifie que les endpoints Domain et Category requièrent une authentification JWT.
|
|
"""
|
|
|
|
import json
|
|
|
|
from django.test import TestCase, override_settings
|
|
from django.urls import reverse
|
|
from rest_framework import status
|
|
from rest_framework.test import APIClient
|
|
from rest_framework_simplejwt.tokens import RefreshToken
|
|
|
|
from Auth.models import Profile
|
|
|
|
|
|
def create_user(email="common_test@example.com", password="testpassword123"):
|
|
return Profile.objects.create_user(username=email, email=email, password=password)
|
|
|
|
|
|
def get_jwt_token(user):
|
|
refresh = RefreshToken.for_user(user)
|
|
return str(refresh.access_token)
|
|
|
|
|
|
TEST_REST_FRAMEWORK = {
|
|
'DEFAULT_AUTHENTICATION_CLASSES': (
|
|
'rest_framework_simplejwt.authentication.JWTAuthentication',
|
|
),
|
|
'DEFAULT_PERMISSION_CLASSES': (
|
|
'rest_framework.permissions.IsAuthenticated',
|
|
),
|
|
}
|
|
|
|
TEST_CACHES = {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}}
|
|
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Domain
|
|
# ---------------------------------------------------------------------------
|
|
|
|
@override_settings(
|
|
CACHES=TEST_CACHES,
|
|
SESSION_ENGINE='django.contrib.sessions.backends.db',
|
|
REST_FRAMEWORK=TEST_REST_FRAMEWORK,
|
|
)
|
|
class DomainEndpointAuthTest(TestCase):
|
|
"""Tests d'authentification sur les endpoints Domain."""
|
|
|
|
def setUp(self):
|
|
self.client = APIClient()
|
|
self.list_url = reverse("Common:domain_list_create")
|
|
self.user = create_user()
|
|
|
|
def test_get_domains_sans_auth_retourne_401(self):
|
|
"""GET /Common/domains sans token doit retourner 401."""
|
|
response = self.client.get(self.list_url)
|
|
self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
|
|
|
|
def test_post_domain_sans_auth_retourne_401(self):
|
|
"""POST /Common/domains sans token doit retourner 401."""
|
|
response = self.client.post(
|
|
self.list_url,
|
|
data=json.dumps({"name": "Musique"}),
|
|
content_type="application/json",
|
|
)
|
|
self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
|
|
|
|
def test_get_domains_avec_auth_retourne_200(self):
|
|
"""GET /Common/domains avec token valide doit retourner 200."""
|
|
token = get_jwt_token(self.user)
|
|
self.client.credentials(HTTP_AUTHORIZATION=f"Bearer {token}")
|
|
response = self.client.get(self.list_url)
|
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
|
|
|
def test_put_domain_sans_auth_retourne_401(self):
|
|
"""PUT /Common/domains/{id} sans token doit retourner 401."""
|
|
url = reverse("Common:domain_detail", kwargs={"id": 1})
|
|
response = self.client.put(
|
|
url,
|
|
data=json.dumps({"name": "Danse"}),
|
|
content_type="application/json",
|
|
)
|
|
self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
|
|
|
|
def test_delete_domain_sans_auth_retourne_401(self):
|
|
"""DELETE /Common/domains/{id} sans token doit retourner 401."""
|
|
url = reverse("Common:domain_detail", kwargs={"id": 1})
|
|
response = self.client.delete(url)
|
|
self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
|
|
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Category
|
|
# ---------------------------------------------------------------------------
|
|
|
|
@override_settings(
|
|
CACHES=TEST_CACHES,
|
|
SESSION_ENGINE='django.contrib.sessions.backends.db',
|
|
REST_FRAMEWORK=TEST_REST_FRAMEWORK,
|
|
)
|
|
class CategoryEndpointAuthTest(TestCase):
|
|
"""Tests d'authentification sur les endpoints Category."""
|
|
|
|
def setUp(self):
|
|
self.client = APIClient()
|
|
self.list_url = reverse("Common:category_list_create")
|
|
self.user = create_user(email="category_test@example.com")
|
|
|
|
def test_get_categories_sans_auth_retourne_401(self):
|
|
"""GET /Common/categories sans token doit retourner 401."""
|
|
response = self.client.get(self.list_url)
|
|
self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
|
|
|
|
def test_post_category_sans_auth_retourne_401(self):
|
|
"""POST /Common/categories sans token doit retourner 401."""
|
|
response = self.client.post(
|
|
self.list_url,
|
|
data=json.dumps({"name": "Jazz"}),
|
|
content_type="application/json",
|
|
)
|
|
self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
|
|
|
|
def test_get_categories_avec_auth_retourne_200(self):
|
|
"""GET /Common/categories avec token valide doit retourner 200."""
|
|
token = get_jwt_token(self.user)
|
|
self.client.credentials(HTTP_AUTHORIZATION=f"Bearer {token}")
|
|
response = self.client.get(self.list_url)
|
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
|
|
|
def test_put_category_sans_auth_retourne_401(self):
|
|
"""PUT /Common/categories/{id} sans token doit retourner 401."""
|
|
url = reverse("Common:category_detail", kwargs={"id": 1})
|
|
response = self.client.put(
|
|
url,
|
|
data=json.dumps({"name": "Classique"}),
|
|
content_type="application/json",
|
|
)
|
|
self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
|
|
|
|
def test_delete_category_sans_auth_retourne_401(self):
|
|
"""DELETE /Common/categories/{id} sans token doit retourner 401."""
|
|
url = reverse("Common:category_detail", kwargs={"id": 1})
|
|
response = self.client.delete(url)
|
|
self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
|