1414
1515"""Test cases for the firebase_admin.functions module."""
1616
17- from datetime import datetime , timedelta
17+ from datetime import datetime , timedelta , timezone
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 )
3836
3937class TestTaskQueue :
4038 @classmethod
@@ -185,47 +183,65 @@ def _instrument_functions_service(self, app=None, status=200, payload=_DEFAULT_R
185183 testutils .MockAdapter (payload , status , recorder ))
186184 return functions_service , recorder
187185
188-
189- @pytest .mark .parametrize ('task_opts_params' , [
190- {
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 = {
191191 'schedule_delay_seconds' : 100 ,
192192 'schedule_time' : None ,
193193 'dispatch_deadline_seconds' : 200 ,
194194 'task_id' : 'test-task-id' ,
195195 'headers' : {'x-test-header' : 'test-header-value' },
196196 'uri' : 'https://google.com'
197- },
198- {
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 = {
199219 'schedule_delay_seconds' : None ,
200- 'schedule_time' : _SCHEDULE_TIME ,
220+ 'schedule_time' : expected_schedule_time ,
201221 'dispatch_deadline_seconds' : 200 ,
202222 'task_id' : 'test-task-id' ,
203223 'headers' : {'x-test-header' : 'test-header-value' },
204224 'uri' : 'http://google.com'
205- },
206- ])
207- def test_task_options (self , task_opts_params ):
208- _ , recorder = self ._instrument_functions_service ()
225+ }
209226 queue = functions .task_queue ('test-function-name' )
210227 task_opts = functions .TaskOptions (** task_opts_params )
211228 queue .enqueue (_DEFAULT_DATA , task_opts )
212229
213230 assert len (recorder ) == 1
214231 task = json .loads (recorder [0 ].body .decode ())['task' ]
215232
216- schedule_time = datetime .fromisoformat (task ['schedule_time' ][:- 1 ])
217- delta = abs (schedule_time - _SCHEDULE_TIME )
218- assert delta <= timedelta (seconds = 15 )
233+ task_schedule_time = datetime .fromisoformat (task ['schedule_time' ].replace ('Z' , '+00:00' ))
234+ assert task_schedule_time == expected_schedule_time
219235
220236 assert task ['dispatch_deadline' ] == '200s'
221237 assert task ['http_request' ]['headers' ]['x-test-header' ] == 'test-header-value'
222238 assert task ['http_request' ]['url' ] in ['http://google.com' , 'https://google.com' ]
223239 assert task ['name' ] == _DEFAULT_TASK_PATH
224240
225-
226241 def test_schedule_set_twice_error (self ):
227242 _ , recorder = self ._instrument_functions_service ()
228- opts = functions .TaskOptions (schedule_delay_seconds = 100 , schedule_time = datetime .utcnow ())
243+ opts = functions .TaskOptions (
244+ schedule_delay_seconds = 100 , schedule_time = datetime .now (timezone .utc ))
229245 queue = functions .task_queue ('test-function-name' )
230246 with pytest .raises (ValueError ) as excinfo :
231247 queue .enqueue (_DEFAULT_DATA , opts )
@@ -236,9 +252,9 @@ def test_schedule_set_twice_error(self):
236252
237253 @pytest .mark .parametrize ('schedule_time' , [
238254 time .time (),
239- str (datetime .utcnow ( )),
240- datetime .utcnow ( ).isoformat (),
241- datetime .utcnow ( ).isoformat () + 'Z' ,
255+ str (datetime .now ( timezone . utc )),
256+ datetime .now ( timezone . utc ).isoformat (),
257+ datetime .now ( timezone . utc ).isoformat () + 'Z' ,
242258 '' , ' '
243259 ])
244260 def test_invalid_schedule_time_error (self , schedule_time ):
0 commit comments