Coverage for src/mesh/views/forms/reviewer_forms.py: 68%

36 statements  

« prev     ^ index     » next       coverage.py v7.7.0, created at 2025-04-28 07:45 +0000

1from __future__ import annotations 

2 

3from typing import Any 

4 

5from allauth.account.models import EmailAddress 

6from django import forms 

7from django.contrib.auth import get_user_model 

8from django.core.exceptions import ValidationError 

9from django.utils.translation import gettext_lazy as _ 

10 

11from ...models.user_models import SuggestedReviewer, User 

12 

13UserModel = get_user_model() 

14 

15 

16class SuggestedReviewerForm(forms.ModelForm): 

17 """ 

18 Form used to create a new SuggestedReviewer 

19 """ 

20 

21 custom_display = "block" 

22 first_name = forms.CharField( 

23 label=_("First name"), 

24 max_length=150, 

25 required=False, 

26 ) 

27 last_name = forms.CharField( 

28 label=_("Last name"), 

29 max_length=150, 

30 required=False, 

31 ) 

32 email = forms.EmailField( 

33 label=_("E-mail address"), 

34 required=True, 

35 ) 

36 keywords = forms.CharField( 

37 label=_("Keywords"), 

38 required=False, 

39 ) 

40 

41 class Meta: 

42 model = SuggestedReviewer 

43 fields = [ 

44 "first_name", 

45 "last_name", 

46 "email", 

47 "keywords", 

48 ] 

49 

50 def __init__(self, *args, **kwargs): 

51 super().__init__(*args, **kwargs) 

52 

53 def clean_email(self) -> str: 

54 email = self.cleaned_data["email"] 

55 

56 if (not self.instance or self.instance.email != email) and ( 

57 EmailAddress.objects.filter(email=email).exists() 

58 or UserModel.objects.filter(email=email).exists() 

59 or SuggestedReviewer.objects.filter(email=email).exists() 

60 ): 

61 raise ValidationError(_("The given e-mail address is already used.")) 

62 return email 

63 

64 def clean(self) -> dict[str, Any]: 

65 cleaned_data = super().clean() 

66 if self.errors: 

67 return cleaned_data 

68 

69 return cleaned_data 

70 

71 

72class SimpleReviewerForm(forms.ModelForm): 

73 """ 

74 Form used to create a new SuggestedReviewer 

75 """ 

76 

77 custom_display = "block" 

78 keywords = forms.CharField( 

79 label=_("Keywords"), 

80 required=False, 

81 ) 

82 

83 class Meta: 

84 model = User 

85 fields = [ 

86 "keywords", 

87 ]