Coverage for api\tests\test_lieu.py: 100%

84 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 Lieu 

5from users.models.base_user import User 

6from django.urls import reverse 

7 

8# ---------- MODELE ---------- 

9class LieuModelTest(TestCase): 

10 def test_str_representation(self): 

11 lieu = Lieu.objects.create(nom="Stade de France") 

12 self.assertEqual(str(lieu), "Stade de France") 

13 

14# ---------- SERIALIZER ---------- 

15from api.serializers import LieuSerializer 

16 

17class LieuSerializerTest(TestCase): 

18 def test_serializer_content(self): 

19 lieu = Lieu.objects.create(nom="Roland-Garros") 

20 serializer = LieuSerializer(instance=lieu) 

21 self.assertEqual(serializer.data, {'id': lieu.id, 'nom': "Roland-Garros"}) 

22 

23# ---------- API ---------- 

24class LieuAPITest(TestCase): 

25 def setUp(self): 

26 self.client = APIClient() 

27 self.lieu = Lieu.objects.create(nom="Accor Arena") 

28 

29 self.admin_user = User.objects.create_admin( 

30 email="admin@example.com", 

31 password="Adminp@ss123456789", 

32 ) 

33 self.super_user = User.objects.create_superuser( 

34 email="super@example.com", 

35 password="Superp@ss123456789", 

36 ) 

37 self.normal_user = User.objects.create_user( 

38 email="user@example.com", 

39 password="Userp@ss123456789", 

40 ) 

41 

42 def test_get_list_lieux(self): 

43 response = self.client.get(reverse('lieu-list')) 

44 self.assertEqual(response.status_code, status.HTTP_200_OK) 

45 self.assertIn("Accor Arena", str(response.data)) 

46 

47 def test_get_detail_lieu(self): 

48 response = self.client.get(reverse('lieu-detail', kwargs={'pk': self.lieu.id})) 

49 self.assertEqual(response.status_code, status.HTTP_200_OK) 

50 self.assertEqual(response.data['nom'], self.lieu.nom) 

51 

52 def test_create_lieu_unauthenticated_fail(self): 

53 response = self.client.post(reverse('lieu-create'), data={'nom': 'Nouveau Lieu'}) 

54 self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED) 

55 

56 def test_create_lieu_user_fail(self): 

57 self.client.login(email="user@example.com", password="Userp@ss123456789") 

58 self.client.force_authenticate(user=self.normal_user) 

59 response = self.client.post(reverse('lieu-create'), data={'nom': 'Lieu Interdit'}) 

60 self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) 

61 

62 def test_create_lieu_admin_succed(self): 

63 self.client.force_authenticate(user=self.admin_user) 

64 response = self.client.post(reverse('lieu-create'), data={'nom': 'Lieu Admin'}) 

65 self.assertEqual(response.status_code, status.HTTP_201_CREATED) 

66 self.assertTrue(Lieu.objects.filter(nom='Lieu Admin').exists()) 

67 

68 def test_update_lieu_unauthenticated_fail(self): 

69 url = reverse('lieu-update', kwargs={'pk': self.lieu.id}) 

70 response = self.client.put(url, data={'nom': 'Lieu Modifié'}) 

71 self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED) 

72 self.lieu.refresh_from_db() 

73 self.assertEqual(self.lieu.nom, 'Accor Arena') 

74 

75 def test_update_lieu_user_fail(self): 

76 self.client.login(email="user@example.com", password="Userp@ss123456789") 

77 self.client.force_authenticate(user=self.normal_user) 

78 url = reverse('lieu-update', kwargs={'pk': self.lieu.id}) 

79 response = self.client.put(url, data={'nom': 'Lieu Modifié'}) 

80 self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) 

81 self.lieu.refresh_from_db() 

82 self.assertEqual(self.lieu.nom, 'Accor Arena') 

83 

84 def test_update_lieu_admin_succed(self): 

85 self.client.force_authenticate(user=self.admin_user) 

86 url = reverse('lieu-update', kwargs={'pk': self.lieu.id}) 

87 response = self.client.put(url, data={'nom': 'Lieu Modifié'}) 

88 self.assertEqual(response.status_code, status.HTTP_200_OK) 

89 self.lieu.refresh_from_db() 

90 self.assertEqual(self.lieu.nom, 'Lieu Modifié') 

91 

92 def test_delete_lieu_unauthenticated_fail(self): 

93 url = reverse('lieu-delete', kwargs={'pk': self.lieu.id}) 

94 response = self.client.put(url, data={'nom': 'Lieu Modifié'}) 

95 self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED) 

96 response = self.client.delete(url) 

97 self.assertTrue(Lieu.objects.filter(pk=self.lieu.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('lieu-delete', kwargs={'pk': self.lieu.id}) 

103 response = self.client.delete(url) 

104 self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) 

105 self.assertTrue(Lieu.objects.filter(pk=self.lieu.id).exists()) 

106 

107 def test_delete_lieu_admin_succed(self): 

108 self.client.force_authenticate(user=self.admin_user) 

109 url = reverse('lieu-delete', kwargs={'pk': self.lieu.id}) 

110 response = self.client.delete(url) 

111 self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) 

112 self.assertFalse(Lieu.objects.filter(pk=self.lieu.id).exists())