Coverage for authentication\serializers\employee.py: 100%

33 statements  

« prev     ^ index     » next       coverage.py v7.10.7, created at 2025-10-13 15:18 +0200

1""" 

2Sérialiseurs pour l'inscription des employés. 

3 

4Ce module contient les sérialiseurs nécessaires pour gérer l'inscription 

5des employés avec validation des données et création automatique du profil. 

6 

7:module: users.serializers.employee_register 

8""" 

9 

10from rest_framework import serializers 

11from users.models.base_user import User 

12from users.models.employe import EmployeProfile 

13from django.contrib.auth.password_validation import validate_password 

14from django.core.exceptions import ValidationError as DjangoValidationError 

15 

16class EmployeeRegisterSerializer(serializers.ModelSerializer): 

17 """ 

18 Sérialiseur pour l'inscription des employés. 

19 

20 Gère l'inscription complète d'un employé avec création automatique 

21 du profil utilisateur et validation de tous les champs requis. 

22 

23 :ivar email: Adresse email unique 

24 :type email: str 

25 :ivar password: Mot de passe (avec validation Django) 

26 :type password: str 

27 :ivar nom: Nom de famille 

28 :type nom: str 

29 :ivar prenom: Prénom 

30 :type prenom: str 

31 :ivar matricule: Numéro de matricule employé (unique) 

32 :type matricule: str 

33 :ivar identifiant_telephone: Identifiant téléphonique professionnel 

34 :type identifiant_telephone: str 

35 """ 

36 email = serializers.EmailField(write_only=True) 

37 password = serializers.CharField(write_only=True) 

38 nom = serializers.CharField(write_only=True) 

39 prenom = serializers.CharField(write_only=True) 

40 identifiant_telephone = serializers.CharField(write_only=True) 

41 matricule = serializers.CharField(write_only=True) 

42 

43 class Meta: 

44 """ 

45 Configuration du sérialiseur. 

46 

47 :cvar model: Modèle Django associé au sérialiseur 

48 :type model: EmployeProfile 

49 :cvar fields: Champs inclus dans la sérialisation 

50 :type fields: list 

51 """ 

52 model = EmployeProfile 

53 fields = ['email', 'password', 'nom', 'prenom', 'matricule', 'identifiant_telephone'] 

54 

55 def validate_email(self, value): 

56 """ 

57 Valide l'unicité de l'adresse email. 

58 

59 :param value: L'adresse email à valider 

60 :type value: str 

61 :return: L'email validé 

62 :rtype: str 

63 :raises serializers.ValidationError: Si l'email est déjà utilisé 

64 """ 

65 if User.objects.filter(email=value).exists(): 

66 raise serializers.ValidationError("Un utilisateur avec cet email existe déjà.") 

67 return value 

68 

69 def create(self, validated_data): 

70 """ 

71 Crée un nouvel utilisateur employé avec son profil. 

72 

73 Valide le mot de passe selon les règles Django et crée l'utilisateur 

74 avec le rôle 'employe' ainsi que son profil associé. 

75 

76 :param validated_data: Les données validées 

77 :type validated_data: dict 

78 :return: Le profil employé créé 

79 :rtype: EmployeProfile 

80 :raises serializers.ValidationError: Si le mot de passe ne respecte pas les règles 

81 """ 

82 email = validated_data.pop('email') 

83 password = validated_data.pop('password') 

84 nom = validated_data.pop('nom') 

85 prenom = validated_data.pop('prenom') 

86 matricule = validated_data.pop('matricule') 

87 identifiant_telephone = validated_data.pop('identifiant_telephone') 

88 

89 try: 

90 validate_password(password, user=User(email=email)) 

91 except DjangoValidationError as e: 

92 raise serializers.ValidationError({'password': e.messages}) 

93 

94 # Création du User avec role 'employe' 

95 user = User.objects.create_user( 

96 email=email, 

97 password=password, 

98 role='employe' 

99 ) 

100 

101 employe_profile = EmployeProfile.objects.create( 

102 user=user, 

103 nom=nom, 

104 prenom=prenom, 

105 matricule=matricule, 

106 identifiant_telephone=identifiant_telephone 

107 ) 

108 return employe_profile