Coverage for benefits / admin.py: 93%

37 statements  

« prev     ^ index     » next       coverage.py v7.13.4, created at 2026-02-13 19:35 +0000

1from django.conf import settings 

2from django.contrib.admin import AdminSite 

3from django.contrib.admin.forms import AdminAuthenticationForm 

4from django.contrib.auth.models import Group 

5from django.template.response import TemplateResponse 

6from django.utils.decorators import decorator_from_middleware, method_decorator 

7 

8from benefits.core import session 

9from benefits.core.middleware import RecaptchaEnabled 

10from benefits.core.mixins import ValidateRecaptchaMixin 

11from benefits.core.models import TransitAgency 

12 

13 

14class BenefitsAdminLoginForm(ValidateRecaptchaMixin, AdminAuthenticationForm): 

15 pass 

16 

17 

18class BenefitsAdminSite(AdminSite): 

19 

20 site_title = "Cal-ITP Benefits Administrator" 

21 site_header = "Administrator" 

22 index_title = "Dashboard" 

23 login_form = BenefitsAdminLoginForm 

24 enable_nav_sidebar = False 

25 

26 @method_decorator(decorator_from_middleware(RecaptchaEnabled)) 

27 def login(self, request, extra_context=None): 

28 return super().login(request, extra_context) 

29 

30 def index(self, request, extra_context=None): 

31 """ 

32 Display the main admin index page if the user is a superuser or a "staff_group" user. 

33 Display the agency dashboard index page if the user is an agency user. 

34 get_app_list returns a sorted list of all the installed apps that have been 

35 registered in this site. 

36 """ 

37 app_list = self.get_app_list(request) 

38 

39 context = { 

40 **self.each_context(request), 

41 "title": self.index_title, 

42 "subtitle": None, 

43 "app_list": app_list, 

44 **(extra_context or {}), 

45 } 

46 

47 request.current_app = self.name 

48 

49 staff_group = Group.objects.get(name=settings.STAFF_GROUP_NAME) 

50 if request.user.is_superuser or request.user.groups.filter(name=staff_group).exists(): 

51 return TemplateResponse(request, "admin/index.html", context) 

52 else: 

53 agency = TransitAgency.for_user(request.user) 

54 session.update(request, agency=agency) 

55 

56 if agency is not None: 56 ↛ 72line 56 didn't jump to line 72 because the condition on line 56 was always true

57 has_permission_for_in_person = agency.customer_service_group in request.user.groups.all() 

58 

59 if hasattr(agency, "transitprocessorconfig"): 59 ↛ 60line 59 didn't jump to line 60 because the condition on line 59 was never true

60 transit_processor_portal_url = agency.transitprocessorconfig.portal_url 

61 else: 

62 transit_processor_portal_url = "" 

63 

64 context.update( 

65 { 

66 "has_permission_for_in_person": has_permission_for_in_person, 

67 "transit_processor_portal_url": transit_processor_portal_url, 

68 "title": f"{agency.long_name} | {self.index_title} | {self.site_title}", 

69 } 

70 ) 

71 

72 return TemplateResponse(request, "admin/agency-dashboard-index.html", context)