Coverage for api\tests\test_epreuve.py: 100%
81 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 datetime import date, time
3from django.test import TestCase
4from rest_framework.test import APIClient
5from rest_framework import status
6from django.urls import reverse
7from api.models import Epreuve, Discipline, Evenement, Lieu
8from api.serializers import EpreuveSerializer
9from users.models.base_user import User
11# ---------- MODELE ----------
12class EpreuveModelTest(TestCase):
13 def test_str_representation(self):
14 lieu = Lieu.objects.create(nom="Stade de France")
15 discipline = Discipline.objects.create(nom="Athlétisme")
16 evenement = Evenement.objects.create(description="JO 2024",
17 lieu=lieu,
18 date=date(2025, 8, 1),
19 horraire=time(14, 0)
20 )
21 epreuve = Epreuve.objects.create(libelle="100m", discipline=discipline, evenement=evenement)
22 self.assertEqual(str(epreuve), "100m")
24# ---------- SERIALIZER ----------
25class EpreuveSerializerTest(TestCase):
26 def test_serializer_content(self):
27 lieu = Lieu.objects.create(nom="Stade de France")
28 discipline = Discipline.objects.create(nom="Natation")
29 evenement = Evenement.objects.create(
30 description="JO 2024",
31 lieu=lieu,
32 date=date(2025, 8, 1),
33 horraire=time(14, 0)
34 )
35 epreuve = Epreuve.objects.create(
36 libelle="100m nage libre",
37 discipline=discipline,
38 evenement=evenement
39 )
40 serializer = EpreuveSerializer(instance=epreuve)
41 self.assertEqual(serializer.data['libelle'], "100m nage libre")
42 self.assertEqual(serializer.data['discipline']['id'], discipline.id)
43 self.assertEqual(serializer.data['evenement']['id'], evenement.id)
45# ---------- API ----------
46class EpreuveAPITest(TestCase):
47 def setUp(self):
48 self.client = APIClient()
49 self.lieu = Lieu.objects.create(nom="Bercy Arena")
50 self.discipline = Discipline.objects.create(nom="Boxe")
51 self.evenement = Evenement.objects.create(description="JO 2024",
52 lieu=self.lieu,
53 date=date(2025, 8, 1),
54 horraire=time(14, 0)
55 )
56 self.epreuve = Epreuve.objects.create(libelle="Poids lourd", discipline=self.discipline, evenement=self.evenement)
58 self.admin_user = User.objects.create_admin(
59 email="admin@example.com",
60 password="Adminp@ss123456789",
61 )
62 self.super_user = User.objects.create_superuser(
63 email="super@example.com",
64 password="Superp@ss123456789",
65 )
66 self.normal_user = User.objects.create_user(
67 email="user@example.com",
68 password="Userp@ss123456789",
69 )
71 def test_get_list_epreuves(self):
72 response = self.client.get(reverse('epreuve-list'))
73 self.assertEqual(response.status_code, status.HTTP_200_OK)
74 self.assertIn("Poids lourd", str(response.data))
76 def test_get_detail_epreuve(self):
77 response = self.client.get(reverse('epreuve-detail', kwargs={'pk': self.epreuve.id}))
78 self.assertEqual(response.status_code, status.HTTP_200_OK)
79 self.assertEqual(response.data['libelle'], self.epreuve.libelle)
81 def test_create_epreuve_unauthenticated_fail(self):
82 response = self.client.post(reverse('epreuve-create'), data={
83 'libelle': 'Nouvelle Epreuve',
84 'discipline': self.discipline.id,
85 'evenement': self.evenement.id
86 })
87 self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
89 def test_create_epreuve_user_fail(self):
90 self.client.force_authenticate(user=self.normal_user)
91 response = self.client.post(reverse('epreuve-create'), data={
92 'libelle': 'Interdit',
93 'discipline': self.discipline.id,
94 'evenement': self.evenement.id
95 })
96 self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
98 def test_create_epreuve_admin_succeed(self):
99 self.client.force_authenticate(user=self.admin_user)
100 response = self.client.post(reverse('epreuve-create'), data={
101 'libelle': 'Combat Final',
102 'discipline_id': self.discipline.id,
103 'evenement_id': self.evenement.id
104 })
105 self.assertEqual(response.status_code, status.HTTP_201_CREATED)
106 self.assertTrue(Epreuve.objects.filter(libelle='Combat Final').exists())
108 def test_update_epreuve_admin_succeed(self):
109 self.client.force_authenticate(user=self.admin_user)
110 url = reverse('epreuve-update', kwargs={'pk': self.epreuve.id})
111 response = self.client.put(url, data={
112 'libelle': 'Poids super lourd',
113 'discipline_id': self.discipline.id,
114 'evenement_id': self.evenement.id
115 })
116 self.assertEqual(response.status_code, status.HTTP_200_OK)
117 self.epreuve.refresh_from_db()
118 self.assertEqual(self.epreuve.libelle, 'Poids super lourd')
120 def test_update_epreuve_user_fail(self):
121 self.client.force_authenticate(user=self.normal_user)
122 url = reverse('epreuve-update', kwargs={'pk': self.epreuve.id})
123 response = self.client.put(url, data={
124 'libelle': 'Modification non autorisée',
125 'discipline_id': self.discipline.id,
126 'evenement_id': self.evenement.id
127 })
128 self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
129 self.epreuve.refresh_from_db()
130 self.assertEqual(self.epreuve.libelle, 'Poids lourd')
132 def test_delete_epreuve_admin_succeed(self):
133 self.client.force_authenticate(user=self.admin_user)
134 url = reverse('epreuve-delete', kwargs={'pk': self.epreuve.id})
135 response = self.client.delete(url)
136 self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
137 self.assertFalse(Epreuve.objects.filter(pk=self.epreuve.id).exists())
139 def test_delete_epreuve_user_fail(self):
140 self.client.force_authenticate(user=self.normal_user)
141 url = reverse('epreuve-delete', kwargs={'pk': self.epreuve.id})
142 response = self.client.delete(url)
143 self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
144 self.assertTrue(Epreuve.objects.filter(pk=self.epreuve.id).exists())