77from  flask  import  Flask , Request 
88from  werkzeug .test  import  EnvironBuilder 
99
10- from  firebase_functions  import  core , identity_fn 
11- 
1210token_verifier_mock  =  MagicMock ()
1311token_verifier_mock .verify_auth_blocking_token  =  Mock (
1412    return_value = {
2422        "user_agent" : "user_agent" ,
2523        "iat" : 0 
2624    })
25+ 
26+ firebase_admin_mock  =  MagicMock ()
27+ firebase_admin_mock .initialize_app  =  Mock ()
28+ firebase_admin_mock .get_app  =  Mock ()
29+ 
2730mocked_modules  =  {
2831    "firebase_functions.private.token_verifier" : token_verifier_mock ,
32+     "firebase_admin" : firebase_admin_mock 
2933}
3034
3135
@@ -37,12 +41,14 @@ class TestIdentity(unittest.TestCase):
3741    def  test_calls_init_function (self ):
3842        hello  =  None 
3943
40-         @core .init  
41-         def  init ():
42-             nonlocal  hello 
43-             hello  =  "world" 
44- 
4544        with  patch .dict ("sys.modules" , mocked_modules ):
45+             from  firebase_functions  import  core , identity_fn 
46+ 
47+             @core .init  
48+             def  init ():
49+                 nonlocal  hello 
50+                 hello  =  "world" 
51+ 
4652            app  =  Flask (__name__ )
4753
4854            func  =  Mock (__name__ = "example_func" ,
@@ -62,3 +68,84 @@ def init():
6268                decorated_func (request )
6369
6470        self .assertEqual ("world" , hello )
71+ 
72+     def  test_auth_blocking_event_from_token_data_email (self ):
73+         """Test parsing a beforeSendEmail event.""" 
74+         # Mock token data for email event 
75+         token_data  =  {
76+             "iss" : "https://securetoken.google.com/project_id" ,
77+             "aud" : "https://us-east1-project_id.cloudfunctions.net/function-1" ,
78+             "iat" : 1 ,  # Unix timestamp 
79+             "exp" : 60  *  60  +  1 ,
80+             "event_id" : "EVENT_ID" ,
81+             "event_type" : "beforeSendEmail" ,
82+             "user_agent" : "USER_AGENT" ,
83+             "ip_address" : "1.2.3.4" ,
84+             "locale" : "en" ,
85+             "recaptcha_score" : 0.9 ,
86+             "email_type" : "PASSWORD_RESET" ,
87+ 88+         }
89+ 
90+         with  patch .dict ("sys.modules" , mocked_modules ):
91+             from  firebase_functions .private ._identity_fn  import  _auth_blocking_event_from_token_data 
92+             from  firebase_functions .private ._identity_fn_event_types  import  event_type_before_email_sent 
93+             import  datetime 
94+ 
95+             event  =  _auth_blocking_event_from_token_data (
96+                 token_data , event_type_before_email_sent )
97+ 
98+         self .assertEqual (event .event_id , "EVENT_ID" )
99+         self .assertEqual (event .ip_address , "1.2.3.4" )
100+         self .assertEqual (event .user_agent , "USER_AGENT" )
101+         self .assertEqual (event .locale , "en" )
102+         self .assertEqual (event .email_type , "PASSWORD_RESET" )
103+         self .assertEqual (event .sms_type , None )
104+         self .assertEqual (event .data , None )  # No user record for email events 
105+         self .assertEqual (event .timestamp , datetime .datetime .fromtimestamp (1 ))
106+ 
107+         self .
assertEqual (
event .
additional_user_info .
email , 
"[email protected] " )
 108+         self .assertEqual (event .additional_user_info .recaptcha_score , 0.9 )
109+         self .assertEqual (event .additional_user_info .is_new_user , False )
110+         self .assertEqual (event .additional_user_info .phone_number , None )
111+ 
112+     def  test_auth_blocking_event_from_token_data_sms (self ):
113+         """Test parsing a beforeSendSms event.""" 
114+         import  datetime 
115+ 
116+         token_data  =  {
117+             "iss" : "https://securetoken.google.com/project_id" ,
118+             "aud" : "https://us-east1-project_id.cloudfunctions.net/function-1" ,
119+             "iat" : 1 ,  # Unix timestamp 
120+             "exp" : 60  *  60  +  1 ,
121+             "event_id" : "EVENT_ID" ,
122+             "event_type" : "beforeSendSms" ,
123+             "user_agent" : "USER_AGENT" ,
124+             "ip_address" : "1.2.3.4" ,
125+             "locale" : "en" ,
126+             "recaptcha_score" : 0.9 ,
127+             "sms_type" : "SIGN_IN_OR_SIGN_UP" ,
128+             "phone_number" : "+11234567890" 
129+         }
130+ 
131+         with  patch .dict ("sys.modules" , mocked_modules ):
132+             from  firebase_functions .private ._identity_fn  import  _auth_blocking_event_from_token_data 
133+             from  firebase_functions .private ._identity_fn_event_types  import  event_type_before_sms_sent 
134+ 
135+             event  =  _auth_blocking_event_from_token_data (
136+                 token_data , event_type_before_sms_sent )
137+ 
138+         self .assertEqual (event .event_id , "EVENT_ID" )
139+         self .assertEqual (event .ip_address , "1.2.3.4" )
140+         self .assertEqual (event .user_agent , "USER_AGENT" )
141+         self .assertEqual (event .locale , "en" )
142+         self .assertEqual (event .email_type , None )
143+         self .assertEqual (event .sms_type , "SIGN_IN_OR_SIGN_UP" )
144+         self .assertEqual (event .data , None )  # No user record for SMS events 
145+         self .assertEqual (event .timestamp , datetime .datetime .fromtimestamp (1 ))
146+ 
147+         self .assertEqual (event .additional_user_info .phone_number ,
148+                          "+11234567890" )
149+         self .assertEqual (event .additional_user_info .recaptcha_score , 0.9 )
150+         self .assertEqual (event .additional_user_info .is_new_user , False )
151+         self .assertEqual (event .additional_user_info .email , None )
0 commit comments