1414"""Scheduler function tests."""
1515
1616import unittest
17- from datetime import datetime
17+ from datetime import datetime , timezone
1818from unittest .mock import Mock
1919
2020from flask import Flask , Request
@@ -81,6 +81,30 @@ def test_on_schedule_call(self):
8181 )
8282 )
8383
84+ def test_on_schedule_call_with_z_suffix (self ):
85+ """
86+ Tests to ensure that timestamps with 'Z' suffix are parsed correctly as UTC.
87+ """
88+ with Flask (__name__ ).test_request_context ("/" ):
89+ environ = EnvironBuilder (
90+ headers = {
91+ "X-CloudScheduler-JobName" : "example-job" ,
92+ "X-CloudScheduler-ScheduleTime" : "2023-04-13T19:00:00Z" ,
93+ }
94+ ).get_environ ()
95+ mock_request = Request (environ )
96+ example_func = Mock (__name__ = "example_func" )
97+ decorated_func = scheduler_fn .on_schedule (schedule = "* * * * *" )(example_func )
98+ response = decorated_func (mock_request )
99+
100+ self .assertEqual (response .status_code , 200 )
101+ example_func .assert_called_once_with (
102+ scheduler_fn .ScheduledEvent (
103+ job_name = "example-job" ,
104+ schedule_time = datetime (2023 , 4 , 13 , 19 , 0 , 0 , tzinfo = timezone .utc ),
105+ )
106+ )
107+
84108 def test_on_schedule_call_with_no_headers (self ):
85109 """
86110 Tests to ensure that if the function is called manually
@@ -99,6 +123,7 @@ def test_on_schedule_call_with_no_headers(self):
99123 self .assertEqual (example_func .call_count , 1 )
100124 self .assertIsNone (example_func .call_args [0 ][0 ].job_name )
101125 self .assertIsNotNone (example_func .call_args [0 ][0 ].schedule_time )
126+ self .assertIsNotNone (example_func .call_args [0 ][0 ].schedule_time .tzinfo )
102127
103128 def test_on_schedule_call_with_exception (self ):
104129 """
0 commit comments