|
9 | 9 | from sentry.deletions.tasks.scheduled import run_scheduled_deletions |
10 | 10 | from sentry.grouping.grouptype import ErrorGroupType |
11 | 11 | from sentry.incidents.grouptype import MetricIssue |
| 12 | +from sentry.incidents.models.alert_rule import AlertRule |
12 | 13 | from sentry.models.environment import Environment |
13 | 14 | from sentry.monitors.grouptype import MonitorIncidentType |
14 | 15 | from sentry.search.utils import _HACKY_INVALID_USER |
| 16 | +from sentry.snuba.models import QuerySubscription, SnubaQuery |
15 | 17 | from sentry.testutils.asserts import assert_org_audit_log_exists |
16 | 18 | from sentry.testutils.cases import APITestCase |
17 | 19 | from sentry.testutils.helpers.datetime import before_now |
|
23 | 25 | DATA_SOURCE_UPTIME_SUBSCRIPTION, |
24 | 26 | ) |
25 | 27 | from sentry.workflow_engine.endpoints.organization_detector_index import convert_assignee_values |
26 | | -from sentry.workflow_engine.models import DataConditionGroup, Detector |
| 28 | +from sentry.workflow_engine.migration_helpers.alert_rule import dual_write_alert_rule |
| 29 | +from sentry.workflow_engine.models import ( |
| 30 | + AlertRuleDetector, |
| 31 | + DataConditionGroup, |
| 32 | + Detector, |
| 33 | +) |
27 | 34 | from sentry.workflow_engine.models.detector_group import DetectorGroup |
28 | 35 | from sentry.workflow_engine.typings.grouptype import IssueStreamGroupType |
29 | 36 |
|
@@ -1369,3 +1376,30 @@ def test_delete_system_and_user_created_with_query_filters(self) -> None: |
1369 | 1376 | ) |
1370 | 1377 |
|
1371 | 1378 | self.assert_unaffected_detectors([self.detector, error_detector]) |
| 1379 | + |
| 1380 | + def test_delete_dual_written_detector_cleans_up_alert_rule(self) -> None: |
| 1381 | + alert_rule = self.create_alert_rule( |
| 1382 | + organization=self.organization, |
| 1383 | + projects=[self.project], |
| 1384 | + ) |
| 1385 | + self.create_alert_rule_trigger(alert_rule=alert_rule) |
| 1386 | + dual_write_alert_rule(alert_rule) |
| 1387 | + |
| 1388 | + detector = AlertRuleDetector.objects.get(alert_rule_id=alert_rule.id).detector |
| 1389 | + snuba_query = alert_rule.snuba_query |
| 1390 | + subscription = QuerySubscription.objects.get(snuba_query=snuba_query) |
| 1391 | + |
| 1392 | + with outbox_runner(): |
| 1393 | + self.get_success_response( |
| 1394 | + self.organization.slug, |
| 1395 | + qs_params={"id": str(detector.id)}, |
| 1396 | + status_code=204, |
| 1397 | + ) |
| 1398 | + |
| 1399 | + with self.tasks(): |
| 1400 | + run_scheduled_deletions() |
| 1401 | + |
| 1402 | + assert not Detector.objects.filter(id=detector.id).exists() |
| 1403 | + assert not AlertRule.objects.filter(id=alert_rule.id).exists() |
| 1404 | + assert not QuerySubscription.objects.filter(id=subscription.id).exists() |
| 1405 | + assert not SnubaQuery.objects.filter(id=snuba_query.id).exists() |
0 commit comments