@@ -326,3 +326,97 @@ def test_get_overlapping_events(
326326 )
327327
328328 assert len (overlap_result ) == len (expected_result )
329+
330+
331+ @pytest .mark .parametrize (
332+ ("initial" , "updates" , "expected_values" , "error_at" ),
333+ [
334+ pytest .param (
335+ [
336+ ("begin" , Timestamp ("2024-01-01 00:00:00" )),
337+ ("end" , Timestamp ("2024-01-02 00:00:00" )),
338+ ],
339+ [
340+ ("begin" , Timestamp ("2024-01-01 12:00:00" )),
341+ ("end" , Timestamp ("2024-01-02 12:00:00" )),
342+ ],
343+ (Timestamp ("2024-01-01 12:00:00" ), Timestamp ("2024-01-02 12:00:00" )),
344+ None ,
345+ id = "valid sequential updates" ,
346+ ),
347+ pytest .param (
348+ [
349+ ("begin" , Timestamp ("2024-01-01 00:00:00" )),
350+ ("end" , Timestamp ("2024-01-02 00:00:00" )),
351+ ],
352+ [("begin" , Timestamp ("2024-01-03 00:00:00" ))],
353+ (Timestamp ("2024-01-01 00:00:00" ), Timestamp ("2024-01-02 00:00:00" )),
354+ 0 ,
355+ id = "invalid begin > end" ,
356+ ),
357+ pytest .param (
358+ [
359+ ("begin" , Timestamp ("2024-01-01 00:00:00" )),
360+ ("end" , Timestamp ("2024-01-02 00:00:00" )),
361+ ],
362+ [("end" , Timestamp ("2023-12-31 23:59:59" ))],
363+ (Timestamp ("2024-01-01 00:00:00" ), Timestamp ("2024-01-02 00:00:00" )),
364+ 0 ,
365+ id = "invalid end < begin" ,
366+ ),
367+ pytest .param (
368+ [
369+ ("begin" , Timestamp ("2024-01-01 00:00:00" )),
370+ ("end" , Timestamp ("2024-01-02 00:00:00" )),
371+ ],
372+ [
373+ ("begin" , Timestamp ("2024-01-01 12:00:00" )),
374+ ("end" , Timestamp ("2024-01-01 06:00:00" )),
375+ ("end" , Timestamp ("2024-01-02 12:00:00" )),
376+ ],
377+ (Timestamp ("2024-01-01 12:00:00" ), Timestamp ("2024-01-02 12:00:00" )),
378+ 1 ,
379+ id = "mixed valid and invalid updates" ,
380+ ),
381+ pytest .param (
382+ [
383+ ("begin" , Timestamp ("2024-01-01 00:00:00" )),
384+ ("end" , Timestamp ("2024-01-01 01:00:00" )),
385+ ],
386+ [("begin" , Timestamp ("2024-01-01 01:00:00" ))],
387+ (Timestamp ("2024-01-01 01:00:00" ), Timestamp ("2024-01-01 01:00:00" )),
388+ None ,
389+ id = "begin equals end edge" ,
390+ ),
391+ pytest .param (
392+ [
393+ ("begin" , Timestamp ("2024-01-01 00:00:00" )),
394+ ("end" , Timestamp ("2024-01-01 01:00:00" )),
395+ ],
396+ [("end" , Timestamp ("2024-01-01 00:00:00" ))],
397+ (Timestamp ("2024-01-01 00:00:00" ), Timestamp ("2024-01-01 00:00:00" )),
398+ None ,
399+ id = "end equals begin edge" ,
400+ ),
401+ ],
402+ )
403+
404+ def test_event_begin_end_updates (
405+ initial : list [tuple [str , Timestamp ]],
406+ updates : list [tuple [str , Timestamp ]],
407+ expected_values : tuple [Timestamp , Timestamp ],
408+ error_at : int | None ,
409+ ) -> None :
410+ initial_dict = dict (initial )
411+ cool_event = Event (begin = initial_dict ["begin" ], end = initial_dict ["end" ])
412+
413+ for i , (attr , value ) in enumerate (updates ):
414+ if error_at is not None and i == error_at :
415+ with pytest .raises (ValueError , match = "`end`.*must be greater than `begin`.*" ):
416+ setattr (cool_event , attr , value )
417+ else :
418+ setattr (cool_event , attr , value )
419+
420+ assert cool_event .begin == expected_values [0 ]
421+ assert cool_event .end == expected_values [1 ]
422+
0 commit comments