|
31 | 31 | ProjectOwnership, |
32 | 32 | Repository, |
33 | 33 | Rule, |
| 34 | + RuleSnooze, |
34 | 35 | User, |
35 | 36 | UserEmail, |
36 | 37 | UserOption, |
|
48 | 49 | from sentry.plugins.base import Notification |
49 | 50 | from sentry.services.hybrid_cloud.actor import RpcActor |
50 | 51 | from sentry.testutils import TestCase |
51 | | -from sentry.testutils.helpers import override_options |
| 52 | +from sentry.testutils.helpers import override_options, with_feature |
52 | 53 | from sentry.testutils.helpers.datetime import before_now, iso_format |
53 | 54 | from sentry.testutils.silo import region_silo_test |
54 | 55 | from sentry.types.activity import ActivityType |
@@ -183,6 +184,82 @@ def test_simple_notification(self): |
183 | 184 | assert msg.subject == "[Sentry] BAR-1 - Hello world" |
184 | 185 | assert "my rule" in msg.alternatives[0][0] |
185 | 186 |
|
| 187 | + @with_feature("organizations:mute-alerts") |
| 188 | + def test_simple_snooze(self): |
| 189 | + """Test that notification for alert snoozed by user is not send to that user.""" |
| 190 | + event = self.store_event( |
| 191 | + data={"message": "Hello world", "level": "error"}, project_id=self.project.id |
| 192 | + ) |
| 193 | + |
| 194 | + rule = self.create_project_rule(project=self.project) |
| 195 | + RuleSnooze.objects.create(user_id=self.user.id, owner_id=self.user.id, rule=rule) |
| 196 | + ProjectOwnership.objects.create(project_id=self.project.id, fallthrough=True) |
| 197 | + |
| 198 | + notification = Notification(event=event, rule=rule) |
| 199 | + |
| 200 | + with self.options({"system.url-prefix": "http://example.com"}), self.tasks(): |
| 201 | + self.adapter.notify(notification, ActionTargetType.ISSUE_OWNERS) |
| 202 | + |
| 203 | + assert len(mail.outbox) == 0 |
| 204 | + |
| 205 | + @with_feature("organizations:mute-alerts") |
| 206 | + def test_snooze_for_all(self): |
| 207 | + """Test that notification for alert snoozed for everyone is not send to user.""" |
| 208 | + event = self.store_event( |
| 209 | + data={"message": "Hello world", "level": "error"}, project_id=self.project.id |
| 210 | + ) |
| 211 | + |
| 212 | + rule = self.create_project_rule(project=self.project) |
| 213 | + RuleSnooze.objects.create(owner_id=self.user.id, rule=rule) |
| 214 | + ProjectOwnership.objects.create(project_id=self.project.id, fallthrough=True) |
| 215 | + |
| 216 | + notification = Notification(event=event, rule=rule) |
| 217 | + |
| 218 | + with self.options({"system.url-prefix": "http://example.com"}), self.tasks(): |
| 219 | + self.adapter.notify(notification, ActionTargetType.ISSUE_OWNERS) |
| 220 | + |
| 221 | + assert len(mail.outbox) == 0 |
| 222 | + |
| 223 | + @with_feature("organizations:mute-alerts") |
| 224 | + def test_someone_else_snoozes_themself(self): |
| 225 | + """Test that notification for alert snoozed by user2 for themself is sent to user""" |
| 226 | + event = self.store_event( |
| 227 | + data={"message": "Hello world", "level": "error"}, project_id=self.project.id |
| 228 | + ) |
| 229 | + |
| 230 | + rule = self.create_project_rule(project=self.project) |
| 231 | + user2 = self. create_user( email="[email protected]") |
| 232 | + RuleSnooze.objects.create(user_id=user2.id, owner_id=user2.id, rule=rule) |
| 233 | + ProjectOwnership.objects.create(project_id=self.project.id, fallthrough=True) |
| 234 | + |
| 235 | + notification = Notification(event=event, rule=rule) |
| 236 | + |
| 237 | + with self.options({"system.url-prefix": "http://example.com"}), self.tasks(): |
| 238 | + self.adapter.notify(notification, ActionTargetType.ISSUE_OWNERS) |
| 239 | + |
| 240 | + assert len(mail.outbox) == 1 |
| 241 | + msg = mail.outbox[0] |
| 242 | + assert msg.subject == "[Sentry] BAR-1 - Hello world" |
| 243 | + |
| 244 | + @with_feature("organizations:mute-alerts") |
| 245 | + def test_someone_else_snoozes_everyone(self): |
| 246 | + """Test that notification for alert snoozed by user2 for everyone is not sent to user""" |
| 247 | + event = self.store_event( |
| 248 | + data={"message": "Hello world", "level": "error"}, project_id=self.project.id |
| 249 | + ) |
| 250 | + |
| 251 | + rule = self.create_project_rule(project=self.project) |
| 252 | + user2 = self. create_user( email="[email protected]") |
| 253 | + RuleSnooze.objects.create(owner_id=user2.id, rule=rule) |
| 254 | + ProjectOwnership.objects.create(project_id=self.project.id, fallthrough=True) |
| 255 | + |
| 256 | + notification = Notification(event=event, rule=rule) |
| 257 | + |
| 258 | + with self.options({"system.url-prefix": "http://example.com"}), self.tasks(): |
| 259 | + self.adapter.notify(notification, ActionTargetType.ISSUE_OWNERS) |
| 260 | + |
| 261 | + assert len(mail.outbox) == 0 |
| 262 | + |
186 | 263 | def test_simple_notification_generic(self): |
187 | 264 | """Test that an issue that is neither error nor performance type renders a generic email template""" |
188 | 265 | event = self.store_event( |
|
0 commit comments