7
7
from flask import Flask , Request
8
8
from werkzeug .test import EnvironBuilder
9
9
10
- from firebase_functions import core , identity_fn
11
-
12
10
token_verifier_mock = MagicMock ()
13
11
token_verifier_mock .verify_auth_blocking_token = Mock (
14
12
return_value = {
24
22
"user_agent" : "user_agent" ,
25
23
"iat" : 0
26
24
})
25
+
26
+ firebase_admin_mock = MagicMock ()
27
+ firebase_admin_mock .initialize_app = Mock ()
28
+ firebase_admin_mock .get_app = Mock ()
29
+
27
30
mocked_modules = {
28
31
"firebase_functions.private.token_verifier" : token_verifier_mock ,
32
+ "firebase_admin" : firebase_admin_mock
29
33
}
30
34
31
35
@@ -37,12 +41,14 @@ class TestIdentity(unittest.TestCase):
37
41
def test_calls_init_function (self ):
38
42
hello = None
39
43
40
- @core .init
41
- def init ():
42
- nonlocal hello
43
- hello = "world"
44
-
45
44
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
+
46
52
app = Flask (__name__ )
47
53
48
54
func = Mock (__name__ = "example_func" ,
@@ -62,3 +68,84 @@ def init():
62
68
decorated_func (request )
63
69
64
70
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