@@ -472,6 +472,160 @@ def test_active_temporary_vehicles_not_in_time_range(self):
472472 permit .temp_vehicles .add (vehicle )
473473 self .assertEqual (permit .active_temporary_vehicle , None )
474474
475+ @freeze_time (timezone .make_aware (datetime (2024 , 1 , 1 )))
476+ def test_temporary_vehicle_changed_inactive_when_ending_immediately (self ):
477+ start_time = timezone .make_aware (datetime (2024 , 2 , 1 ))
478+ end_time = get_end_time (start_time , 6 )
479+
480+ permit = ParkingPermitFactory (
481+ contract_type = ContractType .FIXED_PERIOD ,
482+ start_time = start_time ,
483+ end_time = end_time ,
484+ month_count = 6 ,
485+ )
486+
487+ vehicle = TemporaryVehicleFactory (
488+ start_time = start_time ,
489+ end_time = start_time + timedelta (weeks = 2 ),
490+ is_active = True ,
491+ )
492+ permit .temp_vehicles .add (vehicle )
493+
494+ permit .end_permit (ParkingPermitEndType .IMMEDIATELY )
495+
496+ self .assertFalse (permit .temp_vehicles .first ().is_active )
497+
498+ @freeze_time (timezone .make_aware (datetime (2024 , 1 , 1 )))
499+ def test_temporary_vehicle_changed_inactive_when_ending_previous_day_end (self ):
500+ start_time = timezone .make_aware (datetime (2024 , 2 , 1 ))
501+ end_time = get_end_time (start_time , 6 )
502+
503+ permit = ParkingPermitFactory (
504+ contract_type = ContractType .FIXED_PERIOD ,
505+ start_time = start_time ,
506+ end_time = end_time ,
507+ month_count = 6 ,
508+ )
509+
510+ vehicle = TemporaryVehicleFactory (
511+ start_time = start_time ,
512+ end_time = start_time + timedelta (weeks = 2 ),
513+ is_active = True ,
514+ )
515+ permit .temp_vehicles .add (vehicle )
516+
517+ permit .end_permit (ParkingPermitEndType .PREVIOUS_DAY_END )
518+
519+ self .assertFalse (permit .temp_vehicles .first ().is_active )
520+
521+ @freeze_time (timezone .make_aware (datetime (2024 , 1 , 1 )))
522+ def test_temporary_vehicle_not_inactivated_immediately_when_ending_after_current_period (
523+ self ,
524+ ):
525+ start_time = timezone .make_aware (datetime (2024 , 2 , 1 ))
526+ end_time = get_end_time (start_time , 6 )
527+
528+ permit = ParkingPermitFactory (
529+ contract_type = ContractType .FIXED_PERIOD ,
530+ start_time = start_time ,
531+ end_time = end_time ,
532+ month_count = 6 ,
533+ )
534+
535+ vehicle = TemporaryVehicleFactory (
536+ start_time = start_time ,
537+ end_time = start_time + timedelta (weeks = 2 ),
538+ is_active = True ,
539+ )
540+ permit .temp_vehicles .add (vehicle )
541+
542+ permit .end_permit (ParkingPermitEndType .AFTER_CURRENT_PERIOD )
543+
544+ self .assertTrue (permit .temp_vehicles .first ().is_active )
545+
546+ @freeze_time (timezone .make_aware (datetime (2024 , 2 , 2 )))
547+ def test_temporary_vehicle_end_time_stays_original (self ):
548+ start_time = timezone .make_aware (datetime (2024 , 2 , 1 ))
549+ end_time = get_end_time (start_time , 6 )
550+
551+ permit = ParkingPermitFactory (
552+ contract_type = ContractType .FIXED_PERIOD ,
553+ start_time = start_time ,
554+ end_time = end_time ,
555+ month_count = 6 ,
556+ )
557+
558+ vehicle = TemporaryVehicleFactory (
559+ start_time = start_time ,
560+ end_time = start_time + timedelta (weeks = 2 ),
561+ is_active = True ,
562+ )
563+ permit .temp_vehicles .add (vehicle )
564+
565+ permit .end_permit (ParkingPermitEndType .AFTER_CURRENT_PERIOD )
566+
567+ self .assertEqual (
568+ permit .temp_vehicles .first ().end_time , start_time + timedelta (weeks = 2 )
569+ )
570+
571+ @freeze_time (timezone .make_aware (datetime (2024 , 2 , 2 )))
572+ def test_temporary_vehicle_end_time_changed_to_permit_end_time_if_ended_previous_day_end (
573+ self ,
574+ ):
575+ start_time = timezone .make_aware (datetime (2024 , 2 , 1 ))
576+ end_time = get_end_time (start_time , 6 )
577+
578+ permit = ParkingPermitFactory (
579+ contract_type = ContractType .FIXED_PERIOD ,
580+ start_time = start_time ,
581+ end_time = end_time ,
582+ month_count = 6 ,
583+ )
584+
585+ vehicle = TemporaryVehicleFactory (
586+ start_time = start_time ,
587+ end_time = start_time + timedelta (weeks = 2 ),
588+ is_active = True ,
589+ )
590+ permit .temp_vehicles .add (vehicle )
591+
592+ permit .end_permit (ParkingPermitEndType .PREVIOUS_DAY_END )
593+
594+ previous_day = timezone .localtime () - timezone .timedelta (days = 1 )
595+ previous_day_end = previous_day .replace (
596+ hour = 23 ,
597+ minute = 59 ,
598+ second = 59 ,
599+ microsecond = 999999 ,
600+ )
601+
602+ self .assertEqual (permit .temp_vehicles .first ().end_time , previous_day_end )
603+
604+ @freeze_time (timezone .make_aware (datetime (2024 , 2 , 2 )))
605+ def test_temporary_vehicle_end_time_changed_to_permit_end_time_if_ended_immediately (
606+ self ,
607+ ):
608+ start_time = timezone .make_aware (datetime (2024 , 2 , 1 ))
609+ end_time = get_end_time (start_time , 6 )
610+
611+ permit = ParkingPermitFactory (
612+ contract_type = ContractType .FIXED_PERIOD ,
613+ start_time = start_time ,
614+ end_time = end_time ,
615+ month_count = 6 ,
616+ )
617+
618+ vehicle = TemporaryVehicleFactory (
619+ start_time = start_time ,
620+ end_time = start_time + timedelta (weeks = 2 ),
621+ is_active = True ,
622+ )
623+ permit .temp_vehicles .add (vehicle )
624+
625+ permit .end_permit (ParkingPermitEndType .IMMEDIATELY )
626+
627+ self .assertEqual (permit .temp_vehicles .first ().end_time , permit .end_time )
628+
475629 def test_get_products_with_quantities_should_return_products_with_quantities_for_fix_period_with_mid_month_start (
476630 self ,
477631 ):
0 commit comments