@@ -265,31 +265,59 @@ def test_different_tz(timezone):
265265
266266
267267@pytest .mark .parametrize (
268- "trigger_args, start_date, start_date_fold, correct_next_date" ,
268+ "trigger_args, start_date, start_date_fold, correct_next_date, correct_next_date_fold " ,
269269 [
270- ({"hour" : 8 }, datetime (2013 , 3 , 9 , 12 ), False , datetime (2013 , 3 , 10 , 8 )),
271- ({"hour" : 8 }, datetime (2013 , 11 , 2 , 12 ), True , datetime (2013 , 11 , 3 , 8 )),
270+ ({"hour" : 8 }, datetime (2013 , 3 , 9 , 12 ), 0 , datetime (2013 , 3 , 10 , 8 ), 0 ),
271+ ({"hour" : 8 }, datetime (2013 , 11 , 2 , 12 ), 1 , datetime (2013 , 11 , 3 , 8 ), 0 ),
272+ (
273+ {"hour" : 1 , "minute" : 30 },
274+ datetime (2013 , 11 , 3 , 0 , 30 ),
275+ 0 ,
276+ datetime (2013 , 11 , 3 , 1 , 30 ),
277+ 0 ,
278+ ),
279+ (
280+ {"hour" : 1 , "minute" : 30 },
281+ datetime (2013 , 11 , 3 , 1 , 30 , 5 ),
282+ 0 ,
283+ datetime (2013 , 11 , 3 , 1 , 30 ),
284+ 1 ,
285+ ),
286+ (
287+ {"hour" : 1 , "minute" : 30 },
288+ datetime (2013 , 11 , 3 , 1 , 30 , 5 ),
289+ 1 ,
290+ datetime (2013 , 11 , 4 , 1 , 30 ),
291+ 0 ,
292+ ),
272293 (
273294 {"minute" : "*/30" },
274295 datetime (2013 , 3 , 10 , 1 , 35 ),
275296 1 ,
276297 datetime (2013 , 3 , 10 , 3 ),
298+ 0 ,
277299 ),
278300 (
279301 {"minute" : "*/30" },
280302 datetime (2013 , 11 , 3 , 1 , 35 ),
281303 0 ,
282304 datetime (2013 , 11 , 3 , 1 ),
305+ 1 ,
283306 ),
284307 ],
285308 ids = [
286309 "absolute_spring" ,
287310 "absolute_autumn" ,
311+ "absolute_autumn_from_before_into_repeated_interval" ,
312+ "absolute_autumn_from_repeated_into_repeated_interval" ,
313+ "absolute_autumn_from_repeated_interval_to_after" ,
288314 "interval_spring" ,
289315 "interval_autumn" ,
290316 ],
291317)
292- def test_dst_change (trigger_args , start_date , start_date_fold , correct_next_date ):
318+ def test_dst_change (
319+ trigger_args , start_date , start_date_fold , correct_next_date , correct_next_date_fold
320+ ):
293321 """
294322 Making sure that CronTrigger works correctly when crossing the DST switch threshold.
295323 Note that you should explicitly compare datetimes as strings to avoid the internal datetime
@@ -299,8 +327,16 @@ def test_dst_change(trigger_args, start_date, start_date_fold, correct_next_date
299327 timezone = ZoneInfo ("US/Eastern" )
300328 trigger = CronTrigger (timezone = timezone , ** trigger_args )
301329 start_date = start_date .replace (tzinfo = timezone , fold = start_date_fold )
302- correct_next_date = correct_next_date .replace (tzinfo = timezone , fold = 1 )
330+ correct_next_date = correct_next_date .replace (
331+ tzinfo = timezone , fold = correct_next_date_fold
332+ )
303333 assert str (trigger .get_next_fire_time (None , start_date )) == str (correct_next_date )
334+ assert str (trigger .get_next_fire_time (start_date , start_date )) == str (
335+ correct_next_date
336+ )
337+ assert str (trigger .get_next_fire_time (start_date , correct_next_date )) == str (
338+ correct_next_date
339+ )
304340
305341
306342def test_dst_change_2 (timezone ):
@@ -310,7 +346,7 @@ def test_dst_change_2(timezone):
310346 """
311347 timezone = ZoneInfo ("Europe/Helsinki" )
312348 trigger = CronTrigger (minute = 30 , timezone = timezone )
313- start_date = datetime (2017 , 10 , 29 , 3 , 30 , tzinfo = timezone , fold = 1 )
349+ start_date = datetime (2017 , 10 , 29 , 3 , 30 , 0 , 5 , tzinfo = timezone , fold = 1 )
314350 correct_next_date = datetime (2017 , 10 , 29 , 4 , 30 , tzinfo = timezone , fold = 0 )
315351 assert str (trigger .get_next_fire_time (None , start_date )) == str (correct_next_date )
316352 assert str (trigger .get_next_fire_time (start_date , start_date )) == str (
0 commit comments