@@ -635,3 +635,98 @@ def test_alert_group_unresolve(
635
635
alert_group .refresh_from_db ()
636
636
assert alert_group .resolved is False
637
637
assert alert_group .log_records .last ().action_source == ActionSource .API
638
+
639
+
640
+ @pytest .mark .parametrize (
641
+ "acknowledged,resolved,attached,status_code,data,response_msg" ,
642
+ [
643
+ (False , False , False , status .HTTP_200_OK , {"delay" : 60 }, None ),
644
+ (False , False , False , status .HTTP_400_BAD_REQUEST , {"delay" : - 2 }, "invalid delay value" ),
645
+ (False , False , False , status .HTTP_400_BAD_REQUEST , {"delay" : "fuzz" }, "invalid delay value" ),
646
+ (False , False , False , status .HTTP_400_BAD_REQUEST , {}, "delay is required" ),
647
+ (True , False , False , status .HTTP_400_BAD_REQUEST , {"delay" : 60 }, "Can't silence an acknowledged alert group" ),
648
+ (False , True , False , status .HTTP_400_BAD_REQUEST , {"delay" : 60 }, "Can't silence a resolved alert group" ),
649
+ (False , False , True , status .HTTP_400_BAD_REQUEST , {"delay" : 60 }, "Can't silence an attached alert group" ),
650
+ ],
651
+ )
652
+ @pytest .mark .django_db
653
+ def test_alert_group_silence (
654
+ make_organization_and_user_with_token ,
655
+ make_alert_receive_channel ,
656
+ make_alert_group ,
657
+ acknowledged ,
658
+ resolved ,
659
+ attached ,
660
+ status_code ,
661
+ data ,
662
+ response_msg ,
663
+ ):
664
+ organization , _ , token = make_organization_and_user_with_token ()
665
+ alert_receive_channel = make_alert_receive_channel (organization )
666
+ root_alert_group = make_alert_group (alert_receive_channel )
667
+ alert_group = make_alert_group (
668
+ alert_receive_channel ,
669
+ acknowledged = acknowledged ,
670
+ resolved = resolved ,
671
+ root_alert_group = root_alert_group if attached else None ,
672
+ )
673
+
674
+ client = APIClient ()
675
+ url = reverse ("api-public:alert_groups-silence" , kwargs = {"pk" : alert_group .public_primary_key })
676
+ response = client .post (url , data = data , HTTP_AUTHORIZATION = token )
677
+
678
+ if status_code == status .HTTP_200_OK :
679
+ alert_group .refresh_from_db ()
680
+ assert alert_group .silenced is True
681
+ assert alert_group .log_records .last ().action_source == ActionSource .API
682
+ else :
683
+ assert alert_group .silenced is False
684
+ assert response .status_code == status_code
685
+ assert response_msg == response .json ()["detail" ]
686
+
687
+
688
+ @pytest .mark .parametrize (
689
+ "silenced,resolved,acknowledged,attached,status_code,response_msg" ,
690
+ [
691
+ (True , False , False , False , status .HTTP_200_OK , None ),
692
+ (False , False , False , False , status .HTTP_400_BAD_REQUEST , "Can't unsilence an unsilenced alert group" ),
693
+ (True , True , False , False , status .HTTP_400_BAD_REQUEST , "Can't unsilence a resolved alert group" ),
694
+ (True , False , True , False , status .HTTP_400_BAD_REQUEST , "Can't unsilence an acknowledged alert group" ),
695
+ (True , False , False , True , status .HTTP_400_BAD_REQUEST , "Can't unsilence an attached alert group" ),
696
+ ],
697
+ )
698
+ @pytest .mark .django_db
699
+ def test_alert_group_unsilence (
700
+ make_organization_and_user_with_token ,
701
+ make_alert_receive_channel ,
702
+ make_alert_group ,
703
+ silenced ,
704
+ resolved ,
705
+ acknowledged ,
706
+ attached ,
707
+ status_code ,
708
+ response_msg ,
709
+ ):
710
+ organization , _ , token = make_organization_and_user_with_token ()
711
+ alert_receive_channel = make_alert_receive_channel (organization )
712
+ root_alert_group = make_alert_group (alert_receive_channel )
713
+ alert_group = make_alert_group (
714
+ alert_receive_channel ,
715
+ acknowledged = acknowledged ,
716
+ resolved = resolved ,
717
+ silenced = silenced ,
718
+ root_alert_group = root_alert_group if attached else None ,
719
+ )
720
+
721
+ client = APIClient ()
722
+ url = reverse ("api-public:alert_groups-unsilence" , kwargs = {"pk" : alert_group .public_primary_key })
723
+ response = client .post (url , HTTP_AUTHORIZATION = token )
724
+
725
+ if status_code == status .HTTP_200_OK :
726
+ alert_group .refresh_from_db ()
727
+ assert alert_group .silenced is False
728
+ assert alert_group .log_records .last ().action_source == ActionSource .API
729
+ else :
730
+ assert alert_group .silenced == silenced
731
+ assert response .status_code == status_code
732
+ assert response_msg == response .json ()["detail" ]
0 commit comments