Coverage for benefits/core/forms.py: 100%

24 statements  

« prev     ^ index     » next       coverage.py v7.11.0, created at 2025-10-31 18:44 +0000

1from django import forms 

2from django.utils.translation import gettext_lazy as _ 

3 

4from benefits.core import models 

5 

6 

7def get_active_agency_choices(placeholder="placeholder"): 

8 agency_names = [(None, placeholder)] 

9 for a in models.TransitAgency.all_active(): 

10 agency_names.append((a.slug, a.long_name)) 

11 

12 return agency_names 

13 

14 

15class ChooseAgencyForm(forms.Form): 

16 """Form to select the agency to request transit benefits for.""" 

17 

18 id = "form-agency-selection" 

19 method = "POST" 

20 

21 select_transit_agency = forms.ChoiceField() 

22 

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

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

25 

26 placeholder = _("Choose your transit provider") 

27 self.classes = "pt-lg-5 pt-8" 

28 self.fields["select_transit_agency"] = forms.ChoiceField( 

29 choices=get_active_agency_choices(placeholder), 

30 label=_("Enroll today"), 

31 label_suffix="", 

32 required=True, 

33 widget=forms.Select( 

34 attrs={ 

35 "class": "form-select", 

36 "aria-label": placeholder, 

37 "data-custom-validity": _("Please choose a transit provider."), 

38 } 

39 ), 

40 ) 

41 self.use_custom_validity = True 

42 

43 def clean(self): 

44 cleaned_data = super().clean() 

45 agency_slug = cleaned_data.get("select_transit_agency") 

46 if agency_slug: 

47 self.selected_transit_agency = models.TransitAgency.by_slug(agency_slug) 

48 

49 return cleaned_data