From d6bcc16449699f25fd7be3d8e18743b86fde382e Mon Sep 17 00:00:00 2001 From: Evan Purkhiser Date: Tue, 16 Apr 2024 16:22:57 -0400 Subject: [PATCH] feat(crons): Blank owner_team_id when deleting teams --- src/sentry/deletions/defaults/team.py | 2 ++ tests/sentry/deletions/test_team.py | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/sentry/deletions/defaults/team.py b/src/sentry/deletions/defaults/team.py index 5b3847af48e71d..7f633e7f792508 100644 --- a/src/sentry/deletions/defaults/team.py +++ b/src/sentry/deletions/defaults/team.py @@ -19,7 +19,9 @@ def mark_deletion_in_progress(self, instance_list): def delete_instance(self, instance): from sentry.incidents.models.alert_rule import AlertRule from sentry.models.rule import Rule + from sentry.monitors.models import Monitor AlertRule.objects.filter(owner_id=instance.actor_id).update(owner=None) Rule.objects.filter(owner_id=instance.actor_id).update(owner=None) + Monitor.objects.filter(owner_team_id=instance.actor_id).update(owner_team_id=None) super().delete_instance(instance) diff --git a/tests/sentry/deletions/test_team.py b/tests/sentry/deletions/test_team.py index 58a9cef6ebd184..9f3a9e119fc7bd 100644 --- a/tests/sentry/deletions/test_team.py +++ b/tests/sentry/deletions/test_team.py @@ -2,6 +2,7 @@ from sentry.models.projectteam import ProjectTeam from sentry.models.rule import Rule from sentry.models.team import Team +from sentry.monitors.models import Monitor, MonitorType from sentry.tasks.deletion.scheduled import run_scheduled_deletions from sentry.testutils.cases import TestCase from sentry.testutils.hybrid_cloud import HybridCloudTestMixin @@ -44,3 +45,22 @@ def test_alert_blanking(self): rule.refresh_from_db() assert rule.owner_id is None, "Should be blank when team is deleted." assert alert_rule.owner_id is None, "Should be blank when team is deleted." + + def test_monitor_blanking(self): + team = self.create_team(name="test") + monitor = Monitor.objects.create( + organization_id=self.organization.id, + project_id=self.project.id, + type=MonitorType.CRON_JOB, + name="My Awesome Monitor", + owner_team_id=team.actor.id, + ) + self.ScheduledDeletion.schedule(team, days=0) + + with self.tasks(): + run_scheduled_deletions() + + assert not Team.objects.filter(id=team.id).exists() + + monitor.refresh_from_db() + assert monitor.owner_team_id is None, "Should be blank when team is deleted."