Coverage for benefits / admin.py: 93%

37 statements  

« prev     ^ index     » next       coverage.py v7.13.0, created at 2025-12-22 19:08 +0000

1from django.conf import settings 

2from django.contrib.admin import AdminSite 

3 

4from django.contrib.admin.forms import AdminAuthenticationForm 

5from django.contrib.auth.models import Group 

6from django.template.response import TemplateResponse 

7from django.utils.decorators import method_decorator, decorator_from_middleware 

8 

9from benefits.core.middleware import RecaptchaEnabled 

10from benefits.core.models import TransitAgency 

11from benefits.core import session 

12from benefits.core.mixins import ValidateRecaptchaMixin 

13 

14 

15class BenefitsAdminLoginForm(ValidateRecaptchaMixin, AdminAuthenticationForm): 

16 pass 

17 

18 

19class BenefitsAdminSite(AdminSite): 

20 

21 site_title = "Cal-ITP Benefits Administrator" 

22 site_header = "Administrator" 

23 index_title = "Dashboard" 

24 login_form = BenefitsAdminLoginForm 

25 enable_nav_sidebar = False 

26 

27 @method_decorator(decorator_from_middleware(RecaptchaEnabled)) 

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

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

30 

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

32 """ 

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

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

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

36 registered in this site. 

37 """ 

38 app_list = self.get_app_list(request) 

39 

40 context = { 

41 **self.each_context(request), 

42 "title": self.index_title, 

43 "subtitle": None, 

44 "app_list": app_list, 

45 **(extra_context or {}), 

46 } 

47 

48 request.current_app = self.name 

49 

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

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

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

53 else: 

54 agency = TransitAgency.for_user(request.user) 

55 session.update(request, agency=agency) 

56 

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

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

59 

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

61 transit_processor_portal_url = agency.transitprocessorconfig.portal_url 

62 else: 

63 transit_processor_portal_url = "" 

64 

65 context.update( 

66 { 

67 "has_permission_for_in_person": has_permission_for_in_person, 

68 "transit_processor_portal_url": transit_processor_portal_url, 

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

70 } 

71 ) 

72 

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