Coverage for src/mesh/views/forms/role_forms.py: 47%

17 statements  

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

1from typing import Any 

2 

3from django import forms 

4 

5from mesh.app_settings import app_settings 

6 

7 

8class RoleSelectForm(forms.Form): 

9 role_code = forms.ChoiceField( 

10 choices=[], widget=forms.Select(attrs={"class": "bootstrap-select"}) 

11 ) 

12 

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

14 role_choices = kwargs.pop("role_choices") 

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

16 self.fields["role_code"].choices = role_choices 

17 

18 

19class RoleSwitchForm(forms.Form): 

20 role_code = forms.CharField( 

21 max_length=64, strip=True, required=True, widget=forms.HiddenInput() 

22 ) 

23 

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

25 """ 

26 Chosen role is limited to the activated roles of the application. 

27 """ 

28 cleaned_data = super().clean() 

29 role_code = cleaned_data["role_code"] 

30 if role_code not in app_settings.ENABLED_ROLES: 

31 raise forms.ValidationError(f"Error: the selected role '{role_code}' is not enabled.") 

32 return cleaned_data