Coverage for api\tests\test_discipline.py: 100%
92 statements
« prev ^ index » next coverage.py v7.10.7, created at 2025-10-13 15:18 +0200
« prev ^ index » next coverage.py v7.10.7, created at 2025-10-13 15:18 +0200
1from django.test import TestCase
2from rest_framework.test import APIClient
3from rest_framework import status
4from api.models import Discipline
5from users.models.base_user import User
6from django.urls import reverse
7from api.serializers import DisciplineSerializer
10# ---------- MODELE ----------
11class DisciplineModelTest(TestCase):
12 def test_str_representation(self):
13 discipline = Discipline.objects.create(nom="Boxe")
14 self.assertEqual(str(discipline), "Boxe")
16# ---------- SERIALIZER ----------
18class DisciplineSerializerTest(TestCase):
19 def test_serializer_content(self):
20 discipline = Discipline.objects.create(nom="tennis", icone="aaa")
21 serializer = DisciplineSerializer(instance=discipline)
22 self.assertEqual(serializer.data, {'id': discipline.id, 'nom': "tennis", 'icone': "aaa"})
24# ---------- API ----------
25class DisciplineAPITest(TestCase):
26 def setUp(self):
27 self.client = APIClient()
28 self.discipline = Discipline.objects.create(nom="Boxe")
30 self.admin_user = User.objects.create_admin(
31 email="admin@example.com",
32 password="Adminp@ss123456789",
33 )
34 self.super_user = User.objects.create_superuser(
35 email="super@example.com",
36 password="Superp@ss123456789",
37 )
38 self.normal_user = User.objects.create_user(
39 email="user@example.com",
40 password="Userp@ss123456789",
41 )
43 def test_get_list_lieux(self):
44 response = self.client.get(reverse('discipline-list'))
45 self.assertEqual(response.status_code, status.HTTP_200_OK)
46 self.assertIn("Boxe", str(response.data))
48 def test_get_detail_lieu(self):
49 response = self.client.get(reverse('discipline-detail', kwargs={'pk': self.discipline.id}))
50 self.assertEqual(response.status_code, status.HTTP_200_OK)
51 self.assertEqual(response.data['nom'], self.discipline.nom)
53 def test_create_lieu_unauthenticated_fail(self):
54 response = self.client.post(reverse('discipline-create'), data={'nom': 'Nouveau Discipline'})
55 self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
57 def test_create_lieu_user_fail(self):
58 self.client.login(email="user@example.com", password="Userp@ss123456789")
59 self.client.force_authenticate(user=self.normal_user)
60 response = self.client.post(reverse('discipline-create'), data={'nom': 'Discipline Interdit'})
61 self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
63 def test_create_lieu_admin_succed(self):
64 self.client.force_authenticate(user=self.admin_user)
65 response = self.client.post(reverse('discipline-create'), data={'nom': 'Discipline Admin'})
66 self.assertEqual(response.status_code, status.HTTP_201_CREATED)
67 self.assertTrue(Discipline.objects.filter(nom='Discipline Admin').exists())
69 def test_update_lieu_unauthenticated_fail(self):
70 url = reverse('discipline-update', kwargs={'pk': self.discipline.id})
71 response = self.client.put(url, data={'nom': 'Lieu Modifié'})
72 self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
73 self.discipline.refresh_from_db()
74 self.assertEqual(self.discipline.nom, 'Boxe')
76 def test_update_lieu_user_fail(self):
77 self.client.login(email="user@example.com", password="Userp@ss123456789")
78 self.client.force_authenticate(user=self.normal_user)
79 url = reverse('discipline-update', kwargs={'pk': self.discipline.id})
80 response = self.client.put(url, data={'nom': 'Discipline Modifié'})
81 self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
82 self.discipline.refresh_from_db()
83 self.assertEqual(self.discipline.nom, 'Boxe')
85 def test_update_lieu_admin_succed(self):
86 self.client.force_authenticate(user=self.admin_user)
87 url = reverse('discipline-update', kwargs={'pk': self.discipline.id})
88 response = self.client.put(url, data={'nom': 'Discipline Modifié'})
89 self.assertEqual(response.status_code, status.HTTP_200_OK)
90 self.discipline.refresh_from_db()
91 self.assertEqual(self.discipline.nom, 'Discipline Modifié')
93 def test_delete_lieu_unauthenticated_fail(self):
94 url = reverse('discipline-delete', kwargs={'pk': self.discipline.id})
95 response = self.client.delete(url)
96 self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
97 self.assertTrue(Discipline.objects.filter(pk=self.discipline.id).exists())
99 def test_delete_lieu_user_fail(self):
100 self.client.login(email="user@example.com", password="Userp@ss123456789")
101 self.client.force_authenticate(user=self.normal_user)
102 url = reverse('discipline-delete', kwargs={'pk': self.discipline.id})
103 response = self.client.delete(url)
104 self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
105 self.assertTrue(Discipline.objects.filter(pk=self.discipline.id).exists())
107 def test_delete_lieu_admin_succed(self):
108 self.client.force_authenticate(user=self.admin_user)
109 url = reverse('discipline-delete', kwargs={'pk': self.discipline.id})
110 response = self.client.delete(url)
111 self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
112 self.assertFalse(Discipline.objects.filter(pk=self.discipline.id).exists())
114 def test_create_discipline_invalid_data(self):
115 self.client.force_authenticate(user=self.admin_user)
116 response = self.client.post(reverse('discipline-create'), data={})
117 self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
118 self.assertIn('nom', response.data)
120 def test_serializer_invalid(self):
121 serializer = DisciplineSerializer(data={})
122 self.assertFalse(serializer.is_valid())
123 self.assertIn('nom', serializer.errors)