Coverage for authentication\test\test_EmployeRegistration.py: 100%
45 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.urls import reverse
2from rest_framework import status
3from rest_framework.test import APITestCase
4from users.models.base_user import User
5from rest_framework.response import Response
6from typing import cast
7from rest_framework.test import APIClient
9class EmployeeRegistrationTests(APITestCase):
11 def setUp(self):
12 self.client: APIClient
13 self.url = reverse('register-employe')
14 self.valid_data = {
15 'email': 'employe@example.com',
16 'password': 'Password123!',
17 'nom': 'Smith',
18 'prenom': 'John',
19 'matricule': 'EMP001',
20 'identifiant_telephone': '1234567890'
21 }
23 self.admin_user = User.objects.create_user(
24 email='admin@example.com',
25 password='AdminPassword123!',
26 role='admin',
27 is_staff=True
28 )
29 self.client.force_authenticate(user=self.admin_user)
31 def test_register_employee_success(self):
32 response = self.client.post(self.url, self.valid_data, format='json')
33 self.assertEqual(response.status_code, status.HTTP_201_CREATED)
34 self.assertTrue(User.objects.filter(email='employe@example.com').exists())
35 user = User.objects.get(email='employe@example.com')
36 self.assertEqual(user.role, 'employe')
37 self.assertTrue(hasattr(user, 'employe_profile'))
38 self.assertEqual(user.employe_profile.matricule, 'EMP001')
40 def test_register_employee_missing_fields(self):
41 incomplete_data = self.valid_data.copy()
42 incomplete_data.pop('matricule')
43 response = cast(Response, self.client.post(self.url, incomplete_data, format='json'))
44 self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
45 self.assertIn('matricule', response.data)
47 def test_register_employee_duplicate_email(self):
48 User.objects.create_user(email='employe@example.com', password='dummy', role='employe')
49 response = cast(Response, self.client.post(self.url, self.valid_data, format='json'))
50 self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
51 self.assertIn('email', response.data)
53 def test_register_employee_invalid_email(self):
54 invalid_data = self.valid_data.copy()
55 invalid_data['email'] = 'not-an-email'
56 response = cast(Response, self.client.post(self.url, invalid_data, format='json'))
57 self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
58 self.assertIn('email', response.data)
60 def test_register_employee_short_password(self):
61 invalid_data = self.valid_data.copy()
62 invalid_data['password'] = '123'
63 response = cast(Response, self.client.post(self.url, invalid_data, format='json'))
64 self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
65 self.assertIn('password', response.data)