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

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 

8 

9 

10# ---------- MODELE ---------- 

11class DisciplineModelTest(TestCase): 

12 def test_str_representation(self): 

13 discipline = Discipline.objects.create(nom="Boxe") 

14 self.assertEqual(str(discipline), "Boxe") 

15 

16# ---------- SERIALIZER ---------- 

17 

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"}) 

23 

24# ---------- API ---------- 

25class DisciplineAPITest(TestCase): 

26 def setUp(self): 

27 self.client = APIClient() 

28 self.discipline = Discipline.objects.create(nom="Boxe") 

29 

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 ) 

42 

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)) 

47 

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) 

52 

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) 

56 

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) 

62 

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()) 

68 

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') 

75 

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') 

84 

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é') 

92 

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()) 

98 

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()) 

106 

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()) 

113 

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) 

119 

120 def test_serializer_invalid(self): 

121 serializer = DisciplineSerializer(data={}) 

122 self.assertFalse(serializer.is_valid()) 

123 self.assertIn('nom', serializer.errors)