Coverage for benefits/oauth/hooks.py: 100%

56 statements  

« prev     ^ index     » next       coverage.py v7.10.7, created at 2025-10-10 16:52 +0000

1from cdt_identity.hooks import DefaultHooks 

2from django.shortcuts import redirect 

3from django.utils.decorators import method_decorator, decorator_from_middleware 

4import sentry_sdk 

5 

6from benefits.routes import routes 

7from benefits.core import session 

8from benefits.core.middleware import AgencySessionRequired, FlowSessionRequired 

9from benefits.eligibility.views import analytics as eligibility_analytics 

10from . import analytics 

11 

12 

13class OAuthHooks(DefaultHooks): 

14 @classmethod 

15 def pre_login(cls, request): 

16 super().pre_login(request) 

17 analytics.started_sign_in(request) 

18 

19 @classmethod 

20 def cancel_login(cls, request): 

21 super().cancel_login(request) 

22 analytics.canceled_sign_in(request) 

23 return redirect(routes.ELIGIBILITY_UNVERIFIED) 

24 

25 @classmethod 

26 def pre_logout(cls, request): 

27 super().pre_logout(request) 

28 analytics.started_sign_out(request) 

29 

30 # the user is signed out of the app 

31 session.logout(request) 

32 

33 @classmethod 

34 def post_logout(cls, request): 

35 super().post_logout(request) 

36 analytics.finished_sign_out(request) 

37 

38 origin = session.origin(request) 

39 return redirect(origin) 

40 

41 @classmethod 

42 @method_decorator( 

43 [ 

44 decorator_from_middleware(AgencySessionRequired), 

45 decorator_from_middleware(FlowSessionRequired), 

46 ] 

47 ) 

48 def claims_verified_eligible(cls, request, claims_request, claims_result): 

49 super().claims_verified_eligible(request, claims_request, claims_result) 

50 session.update(request, logged_in=True) 

51 analytics.finished_sign_in(request) 

52 

53 flow = session.flow(request) 

54 eligibility_analytics.started_eligibility(request, flow) 

55 

56 session.update(request, eligible=True) 

57 eligibility_analytics.returned_success(request, flow) 

58 

59 return redirect(routes.ENROLLMENT_INDEX) 

60 

61 @classmethod 

62 @method_decorator( 

63 [ 

64 decorator_from_middleware(AgencySessionRequired), 

65 decorator_from_middleware(FlowSessionRequired), 

66 ] 

67 ) 

68 def claims_verified_not_eligible(cls, request, claims_request, claims_result): 

69 super().claims_verified_not_eligible(request, claims_request, claims_result) 

70 session.update(request, logged_in=True) 

71 analytics.finished_sign_in(request, error=claims_result.errors) 

72 

73 flow = session.flow(request) 

74 eligibility_analytics.started_eligibility(request, flow) 

75 

76 return redirect(routes.ELIGIBILITY_UNVERIFIED) 

77 

78 @classmethod 

79 def system_error(cls, request, exception, operation): 

80 super().system_error(request, exception, operation) 

81 analytics.error(request, message=str(exception), operation=str(operation)) 

82 sentry_sdk.capture_exception(exception) 

83 return redirect(routes.OAUTH_SYSTEM_ERROR)