|
11 | 11 | from sentry.deletions.tasks.scheduled import run_scheduled_deletions |
12 | 12 | from sentry.grouping.grouptype import ErrorGroupType |
13 | 13 | from sentry.incidents.grouptype import MetricIssue |
14 | | -from sentry.incidents.models.alert_rule import AlertRuleDetectionType |
| 14 | +from sentry.incidents.models.alert_rule import AlertRule, AlertRuleDetectionType |
15 | 15 | from sentry.models.environment import Environment |
16 | 16 | from sentry.monitors.grouptype import MonitorIncidentType |
17 | 17 | from sentry.search.utils import _HACKY_INVALID_USER |
|
37 | 37 | ) |
38 | 38 | from sentry.workflow_engine.endpoints.organization_detector_index import convert_assignee_values |
39 | 39 | from sentry.workflow_engine.endpoints.validators.utils import get_unknown_detector_type_error |
40 | | -from sentry.workflow_engine.models import DataCondition, DataConditionGroup, DataSource, Detector |
| 40 | +from sentry.workflow_engine.migration_helpers.alert_rule import dual_write_alert_rule |
| 41 | +from sentry.workflow_engine.models import ( |
| 42 | + AlertRuleDetector, |
| 43 | + DataCondition, |
| 44 | + DataConditionGroup, |
| 45 | + DataSource, |
| 46 | + Detector, |
| 47 | +) |
41 | 48 | from sentry.workflow_engine.models.data_condition import Condition |
42 | 49 | from sentry.workflow_engine.models.detector_group import DetectorGroup |
43 | 50 | from sentry.workflow_engine.models.detector_workflow import DetectorWorkflow |
@@ -2007,3 +2014,30 @@ def test_delete_system_and_user_created_with_query_filters(self) -> None: |
2007 | 2014 | ) |
2008 | 2015 |
|
2009 | 2016 | self.assert_unaffected_detectors([self.detector, error_detector]) |
| 2017 | + |
| 2018 | + def test_delete_dual_written_detector_cleans_up_alert_rule(self) -> None: |
| 2019 | + alert_rule = self.create_alert_rule( |
| 2020 | + organization=self.organization, |
| 2021 | + projects=[self.project], |
| 2022 | + ) |
| 2023 | + self.create_alert_rule_trigger(alert_rule=alert_rule) |
| 2024 | + dual_write_alert_rule(alert_rule) |
| 2025 | + |
| 2026 | + detector = AlertRuleDetector.objects.get(alert_rule_id=alert_rule.id).detector |
| 2027 | + snuba_query = alert_rule.snuba_query |
| 2028 | + subscription = QuerySubscription.objects.get(snuba_query=snuba_query) |
| 2029 | + |
| 2030 | + with outbox_runner(): |
| 2031 | + self.get_success_response( |
| 2032 | + self.organization.slug, |
| 2033 | + qs_params={"id": str(detector.id)}, |
| 2034 | + status_code=204, |
| 2035 | + ) |
| 2036 | + |
| 2037 | + with self.tasks(): |
| 2038 | + run_scheduled_deletions() |
| 2039 | + |
| 2040 | + assert not Detector.objects.filter(id=detector.id).exists() |
| 2041 | + assert not AlertRule.objects.filter(id=alert_rule.id).exists() |
| 2042 | + assert not QuerySubscription.objects.filter(id=subscription.id).exists() |
| 2043 | + assert not SnubaQuery.objects.filter(id=snuba_query.id).exists() |
0 commit comments