|
| 1 | +from sentry.testutils.cases import TestMigrations |
| 2 | + |
| 3 | + |
| 4 | +class BackfillMonitorEnvironmentIsMutedTest(TestMigrations): |
| 5 | + migrate_from = "0010_delete_orphaned_detectors" |
| 6 | + migrate_to = "0011_backfill_monitor_environment_is_muted" |
| 7 | + app = "monitors" |
| 8 | + |
| 9 | + def setup_initial_state(self) -> None: |
| 10 | + # Create muted monitor with environments |
| 11 | + self.muted_monitor = self.create_monitor(name="Muted Monitor", is_muted=True) |
| 12 | + self.muted_env1 = self.create_monitor_environment( |
| 13 | + monitor=self.muted_monitor, |
| 14 | + environment_id=self.environment.id, |
| 15 | + is_muted=False, # Initially not muted |
| 16 | + ) |
| 17 | + env2 = self.create_environment(name="production", project=self.project) |
| 18 | + self.muted_env2 = self.create_monitor_environment( |
| 19 | + monitor=self.muted_monitor, |
| 20 | + environment_id=env2.id, |
| 21 | + is_muted=False, # Initially not muted |
| 22 | + ) |
| 23 | + |
| 24 | + # Create unmuted monitor with environments |
| 25 | + self.unmuted_monitor = self.create_monitor(name="Unmuted Monitor", is_muted=False) |
| 26 | + self.unmuted_env1 = self.create_monitor_environment( |
| 27 | + monitor=self.unmuted_monitor, |
| 28 | + environment_id=self.environment.id, |
| 29 | + is_muted=False, |
| 30 | + ) |
| 31 | + env3 = self.create_environment(name="staging", project=self.project) |
| 32 | + self.unmuted_env2 = self.create_monitor_environment( |
| 33 | + monitor=self.unmuted_monitor, |
| 34 | + environment_id=env3.id, |
| 35 | + is_muted=False, |
| 36 | + ) |
| 37 | + |
| 38 | + # Create muted monitor without environments |
| 39 | + self.muted_monitor_no_envs = self.create_monitor( |
| 40 | + name="Muted Monitor No Envs", is_muted=True |
| 41 | + ) |
| 42 | + |
| 43 | + # Verify initial state |
| 44 | + assert self.muted_monitor.is_muted is True |
| 45 | + assert self.muted_env1.is_muted is False |
| 46 | + assert self.muted_env2.is_muted is False |
| 47 | + assert self.unmuted_monitor.is_muted is False |
| 48 | + assert self.unmuted_env1.is_muted is False |
| 49 | + assert self.unmuted_env2.is_muted is False |
| 50 | + |
| 51 | + def test(self) -> None: |
| 52 | + # Refresh from DB to get updated state after migration |
| 53 | + self.muted_monitor.refresh_from_db() |
| 54 | + self.muted_env1.refresh_from_db() |
| 55 | + self.muted_env2.refresh_from_db() |
| 56 | + self.unmuted_monitor.refresh_from_db() |
| 57 | + self.unmuted_env1.refresh_from_db() |
| 58 | + self.unmuted_env2.refresh_from_db() |
| 59 | + self.muted_monitor_no_envs.refresh_from_db() |
| 60 | + |
| 61 | + # Verify muted monitor has all environments muted |
| 62 | + assert self.muted_monitor.is_muted is True |
| 63 | + assert self.muted_env1.is_muted is True |
| 64 | + assert self.muted_env2.is_muted is True |
| 65 | + |
| 66 | + # Verify unmuted monitor environments remain unchanged |
| 67 | + assert self.unmuted_monitor.is_muted is False |
| 68 | + assert self.unmuted_env1.is_muted is False |
| 69 | + assert self.unmuted_env2.is_muted is False |
| 70 | + |
| 71 | + # Verify muted monitor without environments still muted |
| 72 | + assert self.muted_monitor_no_envs.is_muted is True |
0 commit comments