Coverage for users\serializers\base_user.py: 45%

22 statements  

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

1""" 

2Sérialiseur pour le modèle utilisateur personnalisé. 

3 

4Ce module définit la sérialisation/désérialisation des objets User 

5pour l'API REST, avec gestion sécurisée des mots de passe. 

6""" 

7 

8from rest_framework import serializers 

9from users.models.base_user import User 

10 

11 

12class UserSerializer(serializers.ModelSerializer): 

13 """ 

14 Sérialiseur pour le modèle User. 

15 

16 :ivar id: Identifiant unique de l'utilisateur (lecture seule) 

17 :vartype id: int 

18 :ivar email: Adresse email unique 

19 :vartype email: str 

20 :ivar password: Mot de passe en clair pour création/mise à jour (écriture seule) 

21 :vartype password: str 

22 :ivar role: Rôle de l'utilisateur (client, employe, admin) 

23 :vartype role: str 

24 """ 

25 password = serializers.CharField(write_only=True, required=True, min_length=8) 

26 

27 class Meta: 

28 model = User 

29 fields = ['id', 'email', 'password', 'role', 'is_active', 'date_joined'] 

30 read_only_fields = ['id'] 

31 

32 def create(self, validated_data): 

33 """ 

34 Crée un nouvel utilisateur avec mot de passe sécurisé. 

35 

36 :param validated_data: Données validées du serializer 

37 :type validated_data: dict 

38 :return: Instance User créée 

39 :rtype: User 

40 """ 

41 password = validated_data.pop('password') 

42 user = User.objects.create_user(**validated_data) 

43 user.set_password(password) 

44 user.save() 

45 return user 

46 

47 def update(self, instance, validated_data): 

48 """ 

49 Met à jour un utilisateur existant et modifie le mot de passe si fourni. 

50 

51 :param instance: Instance User à mettre à jour 

52 :type instance: User 

53 :param validated_data: Données validées du serializer 

54 :type validated_data: dict 

55 :return: Instance User mise à jour 

56 :rtype: User 

57 """ 

58 password = validated_data.pop('password', None) 

59 for attr, value in validated_data.items(): 

60 setattr(instance, attr, value) 

61 if password: 

62 instance.set_password(password) 

63 instance.save() 

64 return instance