@@ -578,6 +578,73 @@ def _create_env(self):
578578 )
579579 return dm , ping , load , process_count
580580
581+ def test_disabling_critical_check (self ):
582+ Check = load_model ('check' , 'Check' )
583+ dm , ping , load , process_count = self ._create_env ()
584+ ping_check_instance = Check .objects .create (
585+ name = 'Ping Check' ,
586+ check_type = 'ping' ,
587+ content_object = dm .device ,
588+ params = {},
589+ )
590+ dm .update_status ('ok' )
591+ with catch_signal (health_status_changed ) as handler :
592+ ping_check_instance .is_active = False
593+ ping_check_instance .save ()
594+ self .assertEqual (handler .call_count , 1 )
595+ call_args = handler .call_args [1 ]
596+ self .assertEqual (call_args ['instance' ], dm )
597+ self .assertEqual (call_args ['status' ], 'unknown' )
598+ dm .refresh_from_db ()
599+ self .assertEqual (dm .status , 'unknown' )
600+ with self .subTest (
601+ 'Ensure status does not change on saving active critical check'
602+ ):
603+ ping_check_instance .is_active = True
604+ ping_check_instance .save ()
605+ dm .refresh_from_db ()
606+ self .assertEqual (dm .status , 'unknown' )
607+
608+ def test_saving_non_critical_check (self ):
609+ Check = load_model ('check' , 'Check' )
610+ dm , ping , load , process_count = self ._create_env ()
611+ # Ensure initial status is 'ok'
612+ dm .update_status ('ok' )
613+ # Created a non-critical check
614+ non_critical_check = Check .objects .create (
615+ name = 'Configuration Applied' ,
616+ check_type = 'non_critical' ,
617+ content_object = dm .device ,
618+ params = {},
619+ )
620+ with catch_signal (health_status_changed ) as handler :
621+ non_critical_check .is_active = False
622+ non_critical_check .save ()
623+ self .assertEqual (
624+ handler .call_count , 0 , 'Signal should not be fired for non-critical check'
625+ )
626+ dm .refresh_from_db ()
627+ self .assertEqual (dm .status , 'ok' )
628+
629+ def test_deleting_critical_check (self ):
630+ Check = load_model ('check' , 'Check' )
631+ dm , ping , load , process_m = self ._create_env ()
632+ ping_check_instance = Check .objects .create (
633+ name = 'Ping Check' ,
634+ check_type = 'ping' ,
635+ content_object = dm .device ,
636+ params = {},
637+ )
638+ dm .update_status ('ok' )
639+ with catch_signal (health_status_changed ) as handler :
640+ ping_check_instance .delete ()
641+ self .assertEqual (handler .call_count , 1 )
642+ call_args = handler .call_args [1 ]
643+ self .assertEqual (call_args ['instance' ], dm )
644+ self .assertEqual (call_args ['status' ], 'unknown' )
645+ dm .refresh_from_db ()
646+ self .assertEqual (dm .status , 'unknown' )
647+
581648 def test_status_changed (self ):
582649 dm , ping , load , process_count = self ._create_env ()
583650 # check signal
0 commit comments