14
14
15
15
"""Test cases for the firebase_admin.functions module."""
16
16
17
- from datetime import datetime , timedelta , timezone
17
+ from datetime import datetime , timedelta
18
18
import json
19
19
import time
20
20
import pytest
33
33
_CLOUD_TASKS_URL + 'projects/test-project/locations/us-central1/queues/test-function-name/tasks'
34
34
_DEFAULT_TASK_URL = _CLOUD_TASKS_URL + _DEFAULT_TASK_PATH
35
35
_DEFAULT_RESPONSE = json .dumps ({'name' : _DEFAULT_TASK_PATH })
36
+ _ENQUEUE_TIME = datetime .utcnow ()
37
+ _SCHEDULE_TIME = _ENQUEUE_TIME + timedelta (seconds = 100 )
36
38
37
39
class TestTaskQueue :
38
40
@classmethod
@@ -183,55 +185,36 @@ def _instrument_functions_service(self, app=None, status=200, payload=_DEFAULT_R
183
185
testutils .MockAdapter (payload , status , recorder ))
184
186
return functions_service , recorder
185
187
186
- def test_task_options_delay_seconds (self ):
187
- _ , recorder = self ._instrument_functions_service ()
188
- enqueue_time = datetime .now (timezone .utc )
189
- expected_schedule_time = enqueue_time + timedelta (seconds = 100 )
190
- task_opts_params = {
188
+ @pytest .mark .parametrize ('task_opts_params' , [
189
+ {
191
190
'schedule_delay_seconds' : 100 ,
192
191
'schedule_time' : None ,
193
192
'dispatch_deadline_seconds' : 200 ,
194
193
'task_id' : 'test-task-id' ,
195
194
'headers' : {'x-test-header' : 'test-header-value' },
196
195
'uri' : 'https://google.com'
197
- }
198
- queue = functions .task_queue ('test-function-name' )
199
- task_opts = functions .TaskOptions (** task_opts_params )
200
- queue .enqueue (_DEFAULT_DATA , task_opts )
201
-
202
- assert len (recorder ) == 1
203
- task = json .loads (recorder [0 ].body .decode ())['task' ]
204
-
205
- task_schedule_time = datetime .fromisoformat (task ['schedule_time' ].replace ('Z' , '+00:00' ))
206
- delta = abs (task_schedule_time - expected_schedule_time )
207
- assert delta <= timedelta (seconds = 1 )
208
-
209
- assert task ['dispatch_deadline' ] == '200s'
210
- assert task ['http_request' ]['headers' ]['x-test-header' ] == 'test-header-value'
211
- assert task ['http_request' ]['url' ] in ['http://google.com' , 'https://google.com' ]
212
- assert task ['name' ] == _DEFAULT_TASK_PATH
213
-
214
- def test_task_options_utc_time (self ):
215
- _ , recorder = self ._instrument_functions_service ()
216
- enqueue_time = datetime .now (timezone .utc )
217
- expected_schedule_time = enqueue_time + timedelta (seconds = 100 )
218
- task_opts_params = {
196
+ },
197
+ {
219
198
'schedule_delay_seconds' : None ,
220
- 'schedule_time' : expected_schedule_time ,
199
+ 'schedule_time' : _SCHEDULE_TIME ,
221
200
'dispatch_deadline_seconds' : 200 ,
222
201
'task_id' : 'test-task-id' ,
223
202
'headers' : {'x-test-header' : 'test-header-value' },
224
203
'uri' : 'http://google.com'
225
- }
204
+ },
205
+ ])
206
+ def test_task_options (self , task_opts_params ):
207
+ _ , recorder = self ._instrument_functions_service ()
226
208
queue = functions .task_queue ('test-function-name' )
227
209
task_opts = functions .TaskOptions (** task_opts_params )
228
210
queue .enqueue (_DEFAULT_DATA , task_opts )
229
211
230
212
assert len (recorder ) == 1
231
213
task = json .loads (recorder [0 ].body .decode ())['task' ]
232
214
233
- task_schedule_time = datetime .fromisoformat (task ['schedule_time' ].replace ('Z' , '+00:00' ))
234
- assert task_schedule_time == expected_schedule_time
215
+ schedule_time = datetime .fromisoformat (task ['schedule_time' ][:- 1 ])
216
+ delta = abs (schedule_time - _SCHEDULE_TIME )
217
+ assert delta <= timedelta (seconds = 15 )
235
218
236
219
assert task ['dispatch_deadline' ] == '200s'
237
220
assert task ['http_request' ]['headers' ]['x-test-header' ] == 'test-header-value'
@@ -240,8 +223,7 @@ def test_task_options_utc_time(self):
240
223
241
224
def test_schedule_set_twice_error (self ):
242
225
_ , recorder = self ._instrument_functions_service ()
243
- opts = functions .TaskOptions (
244
- schedule_delay_seconds = 100 , schedule_time = datetime .now (timezone .utc ))
226
+ opts = functions .TaskOptions (schedule_delay_seconds = 100 , schedule_time = datetime .utcnow ())
245
227
queue = functions .task_queue ('test-function-name' )
246
228
with pytest .raises (ValueError ) as excinfo :
247
229
queue .enqueue (_DEFAULT_DATA , opts )
@@ -252,9 +234,9 @@ def test_schedule_set_twice_error(self):
252
234
253
235
@pytest .mark .parametrize ('schedule_time' , [
254
236
time .time (),
255
- str (datetime .now ( timezone . utc )),
256
- datetime .now ( timezone . utc ).isoformat (),
257
- datetime .now ( timezone . utc ).isoformat () + 'Z' ,
237
+ str (datetime .utcnow ( )),
238
+ datetime .utcnow ( ).isoformat (),
239
+ datetime .utcnow ( ).isoformat () + 'Z' ,
258
240
'' , ' '
259
241
])
260
242
def test_invalid_schedule_time_error (self , schedule_time ):
0 commit comments