Просмотр исходного кода

fix(notifications): Fix project check for ActionHandlers (#58274)

Fixes SENTRY-16VZ

---------

Co-authored-by: getsantry[bot] <66042841+getsantry[bot]@users.noreply.github.com>
Snigdha Sharma 1 год назад
Родитель
Сommit
c521f6f759
2 измененных файлов с 43 добавлено и 22 удалено
  1. 2 2
      src/sentry/incidents/action_handlers.py
  2. 41 20
      tests/sentry/incidents/action_handlers/test_email.py

+ 2 - 2
src/sentry/incidents/action_handlers.py

@@ -135,13 +135,13 @@ class EmailActionHandler(ActionHandler):
             if should_use_notifications_v2(self.project.organization):
             if should_use_notifications_v2(self.project.organization):
                 controller = NotificationController(
                 controller = NotificationController(
                     recipients={RpcUser(id=member.user_id) for member in target.member_set},
                     recipients={RpcUser(id=member.user_id) for member in target.member_set},
-                    project_ids=[project.id for project in self.projects],
+                    project_ids=[self.project.id],
                     organization_id=self.project.organization_id,
                     organization_id=self.project.organization_id,
                 )
                 )
 
 
                 users = controller.get_notification_recipients(
                 users = controller.get_notification_recipients(
                     type=NotificationSettingEnum.ISSUE_ALERTS, actor_type=ActorType.USER
                     type=NotificationSettingEnum.ISSUE_ALERTS, actor_type=ActorType.USER
-                )
+                )[ExternalProviders.EMAIL]
             else:
             else:
                 users = NotificationSetting.objects.filter_to_accepting_recipients(
                 users = NotificationSetting.objects.filter_to_accepting_recipients(
                     self.project,
                     self.project,

+ 41 - 20
tests/sentry/incidents/action_handlers/test_email.py

@@ -31,7 +31,7 @@ from sentry.snuba.dataset import Dataset
 from sentry.snuba.models import SnubaQuery
 from sentry.snuba.models import SnubaQuery
 from sentry.testutils.cases import TestCase
 from sentry.testutils.cases import TestCase
 from sentry.testutils.helpers.datetime import freeze_time
 from sentry.testutils.helpers.datetime import freeze_time
-from sentry.testutils.helpers.features import with_feature
+from sentry.testutils.helpers.features import Feature, with_feature
 from sentry.types.integrations import ExternalProviders
 from sentry.types.integrations import ExternalProviders
 
 
 from . import FireTest
 from . import FireTest
@@ -88,16 +88,21 @@ class EmailActionHandlerGetTargetsTest(TestCase):
             target_identifier=str(self.user.id),
             target_identifier=str(self.user.id),
         )
         )
         handler = EmailActionHandler(action, self.incident, self.project)
         handler = EmailActionHandler(action, self.incident, self.project)
-        assert handler.get_targets() == [(self.user.id, self.user.email)]
+        for flag in (True, False):
+            with Feature({"organizations:notification-settings-v2", flag}):
+                assert handler.get_targets() == [(self.user.id, self.user.email)]
 
 
     def test_rule_snoozed_by_user(self):
     def test_rule_snoozed_by_user(self):
         action = self.create_alert_rule_trigger_action(
         action = self.create_alert_rule_trigger_action(
             target_type=AlertRuleTriggerAction.TargetType.USER,
             target_type=AlertRuleTriggerAction.TargetType.USER,
             target_identifier=str(self.user.id),
             target_identifier=str(self.user.id),
         )
         )
+
         handler = EmailActionHandler(action, self.incident, self.project)
         handler = EmailActionHandler(action, self.incident, self.project)
         self.snooze_rule(user_id=self.user.id, alert_rule=self.incident.alert_rule)
         self.snooze_rule(user_id=self.user.id, alert_rule=self.incident.alert_rule)
-        assert handler.get_targets() == []
+        for flag in (True, False):
+            with Feature({"organizations:notification-settings-v2", flag}):
+                assert handler.get_targets() == []
 
 
     def test_user_rule_snoozed(self):
     def test_user_rule_snoozed(self):
         action = self.create_alert_rule_trigger_action(
         action = self.create_alert_rule_trigger_action(
@@ -106,7 +111,9 @@ class EmailActionHandlerGetTargetsTest(TestCase):
         )
         )
         handler = EmailActionHandler(action, self.incident, self.project)
         handler = EmailActionHandler(action, self.incident, self.project)
         self.snooze_rule(alert_rule=self.incident.alert_rule)
         self.snooze_rule(alert_rule=self.incident.alert_rule)
-        assert handler.get_targets() == []
+        for flag in (True, False):
+            with Feature({"organizations:notification-settings-v2", flag}):
+                assert handler.get_targets() == []
 
 
     def test_user_alerts_disabled(self):
     def test_user_alerts_disabled(self):
         NotificationSetting.objects.update_settings(
         NotificationSetting.objects.update_settings(
@@ -121,7 +128,9 @@ class EmailActionHandlerGetTargetsTest(TestCase):
             target_identifier=str(self.user.id),
             target_identifier=str(self.user.id),
         )
         )
         handler = EmailActionHandler(action, self.incident, self.project)
         handler = EmailActionHandler(action, self.incident, self.project)
-        assert handler.get_targets() == [(self.user.id, self.user.email)]
+        for flag in (True, False):
+            with Feature({"organizations:notification-settings-v2", flag}):
+                assert handler.get_targets() == [(self.user.id, self.user.email)]
 
 
     def test_team(self):
     def test_team(self):
         new_user = self.create_user()
         new_user = self.create_user()
@@ -130,11 +139,13 @@ class EmailActionHandlerGetTargetsTest(TestCase):
             target_type=AlertRuleTriggerAction.TargetType.TEAM,
             target_type=AlertRuleTriggerAction.TargetType.TEAM,
             target_identifier=str(self.team.id),
             target_identifier=str(self.team.id),
         )
         )
-        handler = EmailActionHandler(action, self.incident, self.project)
-        assert set(handler.get_targets()) == {
-            (self.user.id, self.user.email),
-            (new_user.id, new_user.email),
-        }
+        for flag in (True, False):
+            with Feature({"organizations:notification-settings-v2", flag}):
+                handler = EmailActionHandler(action, self.incident, self.project)
+                assert set(handler.get_targets()) == {
+                    (self.user.id, self.user.email),
+                    (new_user.id, new_user.email),
+                }
 
 
     def test_rule_snoozed_by_one_user_in_team(self):
     def test_rule_snoozed_by_one_user_in_team(self):
         new_user = self.create_user()
         new_user = self.create_user()
@@ -145,9 +156,11 @@ class EmailActionHandlerGetTargetsTest(TestCase):
         )
         )
         handler = EmailActionHandler(action, self.incident, self.project)
         handler = EmailActionHandler(action, self.incident, self.project)
         self.snooze_rule(user_id=new_user.id, alert_rule=self.incident.alert_rule)
         self.snooze_rule(user_id=new_user.id, alert_rule=self.incident.alert_rule)
-        assert set(handler.get_targets()) == {
-            (self.user.id, self.user.email),
-        }
+        for flag in (True, False):
+            with Feature({"organizations:notification-settings-v2", flag}):
+                assert set(handler.get_targets()) == {
+                    (self.user.id, self.user.email),
+                }
 
 
     def test_team_rule_snoozed(self):
     def test_team_rule_snoozed(self):
         new_user = self.create_user()
         new_user = self.create_user()
@@ -158,7 +171,9 @@ class EmailActionHandlerGetTargetsTest(TestCase):
         )
         )
         handler = EmailActionHandler(action, self.incident, self.project)
         handler = EmailActionHandler(action, self.incident, self.project)
         self.snooze_rule(alert_rule=self.incident.alert_rule)
         self.snooze_rule(alert_rule=self.incident.alert_rule)
-        assert handler.get_targets() == []
+        for flag in (True, False):
+            with Feature({"organizations:notification-settings-v2", flag}):
+                assert handler.get_targets() == []
 
 
     def test_team_alert_disabled(self):
     def test_team_alert_disabled(self):
         NotificationSetting.objects.update_settings(
         NotificationSetting.objects.update_settings(
@@ -183,7 +198,9 @@ class EmailActionHandlerGetTargetsTest(TestCase):
             target_identifier=str(self.team.id),
             target_identifier=str(self.team.id),
         )
         )
         handler = EmailActionHandler(action, self.incident, self.project)
         handler = EmailActionHandler(action, self.incident, self.project)
-        assert set(handler.get_targets()) == {(new_user.id, new_user.email)}
+        for flag in (True, False):
+            with Feature({"organizations:notification-settings-v2", flag}):
+                assert set(handler.get_targets()) == {(new_user.id, new_user.email)}
 
 
     def test_user_email_routing(self):
     def test_user_email_routing(self):
         new_email = "marcos@sentry.io"
         new_email = "marcos@sentry.io"
@@ -201,7 +218,9 @@ class EmailActionHandlerGetTargetsTest(TestCase):
         )
         )
         handler = EmailActionHandler(action, self.incident, self.project)
         handler = EmailActionHandler(action, self.incident, self.project)
 
 
-        assert handler.get_targets() == [(self.user.id, new_email)]
+        for flag in (True, False):
+            with Feature({"organizations:notification-settings-v2", flag}):
+                assert handler.get_targets() == [(self.user.id, new_email)]
 
 
     def test_team_email_routing(self):
     def test_team_email_routing(self):
         new_email = "marcos@sentry.io"
         new_email = "marcos@sentry.io"
@@ -225,10 +244,12 @@ class EmailActionHandlerGetTargetsTest(TestCase):
             target_identifier=str(self.team.id),
             target_identifier=str(self.team.id),
         )
         )
         handler = EmailActionHandler(action, self.incident, self.project)
         handler = EmailActionHandler(action, self.incident, self.project)
-        assert set(handler.get_targets()) == {
-            (self.user.id, new_email),
-            (new_user.id, new_email),
-        }
+        for flag in (True, False):
+            with Feature({"organizations:notification-settings-v2", flag}):
+                assert set(handler.get_targets()) == {
+                    (self.user.id, new_email),
+                    (new_user.id, new_email),
+                }
 
 
 
 
 @freeze_time()
 @freeze_time()