Coverage for benefits/enrollment_init/views.py: 75%

28 statements  

« prev     ^ index     » next       coverage.py v7.16.2, created at 2026-10-08 19:50 +0000

1import logging 

2 

3from django.http import JsonResponse 

4from django.views.generic import FormView, TemplateView 

5 

6from benefits.core.mixins import AgencySessionRequiredMixin, EligibleSessionRequiredMixin 

7from benefits.enrollment import forms 

8from benefits.enrollment.views import FlowSessionRequiredMixin 

9 

10from .routes import routes 

11 

12logger = logging.getLogger(__name__) 

13 

14 

15class IndexView(AgencySessionRequiredMixin, EligibleSessionRequiredMixin, FlowSessionRequiredMixin, TemplateView): 

16 """View for the enrollment landing page.""" 

17 

18 template_name = "enrollment_init/index.html" 

19 

20 def get_context_data(self, **kwargs): 

21 context = super().get_context_data(**kwargs) 

22 

23 context.update( 

24 { 

25 "cta_button": routes.ENROLLMENT_INIT_REGISTER_CARD, 

26 "flow": self.flow, 

27 "transit_processor": { 

28 "name": "INIT", 

29 "website": "https://www.initse.com/enus/solutions/fare-collection-revenue-management/", 

30 }, 

31 } 

32 ) 

33 return context 

34 

35 

36class RegisterView(AgencySessionRequiredMixin, FlowSessionRequiredMixin, FormView): 

37 """View for the page that tokenizes the user card.""" 

38 

39 form_class = forms.CardTokenizeSuccessForm 

40 

41 route_system_error = routes.ENROLLMENT_SYSTEM_ERROR 

42 

43 route_tokenize_success = routes.ENROLLMENT_INIT_REGISTER_CARD 

44 template_name = "enrollment_init/register-card.html" 

45 

46 def get_context_data(self, **kwargs): 

47 context = super().get_context_data(**kwargs) 

48 

49 tokenize_system_error_form = forms.CardTokenizeFailForm( 

50 self.route_system_error, "form-card-tokenize-fail-system-error" 

51 ) 

52 tokenize_success_form = forms.CardTokenizeSuccessForm( 

53 action_url=self.route_tokenize_success, auto_id=True, label_suffix="" 

54 ) 

55 

56 context.update( 

57 { 

58 "collect_js_api_key": self.agency.transit_processor.tokenization_api_key, 

59 "forms": [tokenize_system_error_form, tokenize_success_form], 

60 "form_success": tokenize_success_form.id, 

61 "form_system_error": tokenize_system_error_form.id, 

62 "success_url": self.route_tokenize_success, 

63 } 

64 ) 

65 return context 

66 

67 def form_valid(self, form): 

68 card_token = form.cleaned_data.get("card_token") 

69 return JsonResponse({"status": "ok", "tokenized_card": card_token})