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