1414
1515"""Test cases for the firebase_admin.functions module."""
1616
17- from datetime import datetime , timedelta , timezone
17+ from datetime import datetime , timedelta
1818import json
1919import time
2020import pytest
3333 _CLOUD_TASKS_URL + 'projects/test-project/locations/us-central1/queues/test-function-name/tasks'
3434_DEFAULT_TASK_URL = _CLOUD_TASKS_URL + _DEFAULT_TASK_PATH
3535_DEFAULT_RESPONSE = json .dumps ({'name' : _DEFAULT_TASK_PATH })
36+ _ENQUEUE_TIME = datetime .utcnow ()
37+ _SCHEDULE_TIME = _ENQUEUE_TIME + timedelta (seconds = 100 )
3638
3739class TestTaskQueue :
3840 @classmethod
@@ -183,55 +185,36 @@ def _instrument_functions_service(self, app=None, status=200, payload=_DEFAULT_R
183185 testutils .MockAdapter (payload , status , recorder ))
184186 return functions_service , recorder
185187
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+ {
191190 'schedule_delay_seconds' : 100 ,
192191 'schedule_time' : None ,
193192 'dispatch_deadline_seconds' : 200 ,
194193 'task_id' : 'test-task-id' ,
195194 'headers' : {'x-test-header' : 'test-header-value' },
196195 '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+ {
219198 'schedule_delay_seconds' : None ,
220- 'schedule_time' : expected_schedule_time ,
199+ 'schedule_time' : _SCHEDULE_TIME ,
221200 'dispatch_deadline_seconds' : 200 ,
222201 'task_id' : 'test-task-id' ,
223202 'headers' : {'x-test-header' : 'test-header-value' },
224203 'uri' : 'http://google.com'
225- }
204+ },
205+ ])
206+ def test_task_options (self , task_opts_params ):
207+ _ , recorder = self ._instrument_functions_service ()
226208 queue = functions .task_queue ('test-function-name' )
227209 task_opts = functions .TaskOptions (** task_opts_params )
228210 queue .enqueue (_DEFAULT_DATA , task_opts )
229211
230212 assert len (recorder ) == 1
231213 task = json .loads (recorder [0 ].body .decode ())['task' ]
232214
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 )
235218
236219 assert task ['dispatch_deadline' ] == '200s'
237220 assert task ['http_request' ]['headers' ]['x-test-header' ] == 'test-header-value'
@@ -240,8 +223,7 @@ def test_task_options_utc_time(self):
240223
241224 def test_schedule_set_twice_error (self ):
242225 _ , 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 ())
245227 queue = functions .task_queue ('test-function-name' )
246228 with pytest .raises (ValueError ) as excinfo :
247229 queue .enqueue (_DEFAULT_DATA , opts )
@@ -252,9 +234,9 @@ def test_schedule_set_twice_error(self):
252234
253235 @pytest .mark .parametrize ('schedule_time' , [
254236 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' ,
258240 '' , ' '
259241 ])
260242 def test_invalid_schedule_time_error (self , schedule_time ):
0 commit comments