From 65abb69df8736a6ef30d27463d012d6f09d14c62 Mon Sep 17 00:00:00 2001 From: Colleen O'Rourke Date: Fri, 3 Oct 2025 16:16:20 -0700 Subject: [PATCH 1/2] tests(alerts): Increase test coverage in incident chart test --- src/sentry/testutils/factories.py | 4 +-- tests/sentry/incidents/test_charts.py | 52 +++++++++++++++++---------- 2 files changed, 35 insertions(+), 21 deletions(-) diff --git a/src/sentry/testutils/factories.py b/src/sentry/testutils/factories.py index 74f04df15ed648..de9752ca5d8ab8 100644 --- a/src/sentry/testutils/factories.py +++ b/src/sentry/testutils/factories.py @@ -1697,9 +1697,9 @@ def create_incident( @staticmethod @assume_test_silo_mode(SiloMode.REGION) - def create_incident_activity(incident, type, comment=None, user_id=None): + def create_incident_activity(incident, type, comment=None, user_id=None, **kwargs): return IncidentActivity.objects.create( - incident=incident, type=type, comment=comment, user_id=user_id + incident=incident, type=type, comment=comment, user_id=user_id, **kwargs ) @staticmethod diff --git a/tests/sentry/incidents/test_charts.py b/tests/sentry/incidents/test_charts.py index acf14c8a584b53..0931bd8ee418b1 100644 --- a/tests/sentry/incidents/test_charts.py +++ b/tests/sentry/incidents/test_charts.py @@ -1,5 +1,5 @@ import datetime -from unittest.mock import ANY, MagicMock, patch +from unittest.mock import MagicMock, patch from django.utils import timezone from django.utils.dateparse import parse_datetime @@ -19,7 +19,7 @@ DetailedIncidentSerializerResponse, ) from sentry.incidents.logic import CRITICAL_TRIGGER_LABEL -from sentry.incidents.models.incident import Incident +from sentry.incidents.models.incident import Incident, IncidentActivityType, IncidentStatus from sentry.incidents.typings.metric_detector import AlertContext, OpenPeriodContext from sentry.snuba.dataset import Dataset from sentry.testutils.cases import TestCase @@ -128,30 +128,44 @@ def test_eap_alert(self, mock_client_get: MagicMock, mock_generate_chart: MagicM class FetchOpenPeriodsTest(TestCase): @freeze_time(frozen_time) - @patch("sentry.incidents.charts.client.get") + @with_feature("organizations:incidents") @with_feature("organizations:workflow-engine-single-process-metric-issues") - def test_get_incidents_from_detector(self, mock_client_get: MagicMock) -> None: + def test_get_incidents_from_detector(self) -> None: self.create_detector() # dummy so detector ID != alert rule ID detector = self.create_detector(project=self.project) alert_rule = self.create_alert_rule(organization=self.organization, projects=[self.project]) self.create_alert_rule_detector(detector=detector, alert_rule_id=alert_rule.id) - incident = Incident( + incident = self.create_incident( date_started=must_parse_datetime("2022-05-16T18:55:00Z"), - date_closed=None, + status=IncidentStatus.CRITICAL.value, alert_rule=alert_rule, ) + # create incident activity the same way we do in logic.py create_incident + detected_activity = self.create_incident_activity( + incident, + IncidentActivityType.DETECTED.value, + date_added=incident.date_started, + ) + created_activity = self.create_incident_activity( + incident, + IncidentActivityType.CREATED.value, + ) + time_period = incident_date_range(60, incident.date_started, incident.date_closed) - fetch_metric_issue_open_periods(self.organization, detector.id, time_period) - mock_client_get.assert_called_with( - auth=ANY, - user=ANY, - path="/organizations/baz/incidents/", - params={ - "alertRule": alert_rule.id, - "expand": "activities", - "includeSnapshots": True, - "project": -1, - **time_period, - }, - ) + chart_data = fetch_metric_issue_open_periods(self.organization, detector.id, time_period) + assert chart_data[0]["alertRule"]["id"] == str(alert_rule.id) + assert chart_data[0]["projects"] == [self.project.slug] + assert chart_data[0]["dateStarted"] == incident.date_started + + assert len(chart_data[0]["activities"]) == 2 + detected_activity_resp = chart_data[0]["activities"][0] + created_activity_resp = chart_data[0]["activities"][1] + + assert detected_activity_resp["incidentIdentifier"] == str(incident.id) + assert detected_activity_resp["type"] == IncidentActivityType.DETECTED.value + assert detected_activity_resp["dateCreated"] == detected_activity.date_added + + assert created_activity_resp["incidentIdentifier"] == str(incident.id) + assert created_activity_resp["type"] == IncidentActivityType.CREATED.value + assert created_activity_resp["dateCreated"] == created_activity.date_added From f1f16e6e6e223712d1360b706171dd76684179cf Mon Sep 17 00:00:00 2001 From: Colleen O'Rourke Date: Mon, 6 Oct 2025 17:08:40 -0700 Subject: [PATCH 2/2] remoev that --- tests/sentry/incidents/test_charts.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/sentry/incidents/test_charts.py b/tests/sentry/incidents/test_charts.py index 0931bd8ee418b1..1057a9f4d47e5c 100644 --- a/tests/sentry/incidents/test_charts.py +++ b/tests/sentry/incidents/test_charts.py @@ -162,10 +162,10 @@ def test_get_incidents_from_detector(self) -> None: detected_activity_resp = chart_data[0]["activities"][0] created_activity_resp = chart_data[0]["activities"][1] - assert detected_activity_resp["incidentIdentifier"] == str(incident.id) + assert detected_activity_resp["incidentIdentifier"] == str(incident.identifier) assert detected_activity_resp["type"] == IncidentActivityType.DETECTED.value assert detected_activity_resp["dateCreated"] == detected_activity.date_added - assert created_activity_resp["incidentIdentifier"] == str(incident.id) + assert created_activity_resp["incidentIdentifier"] == str(incident.identifier) assert created_activity_resp["type"] == IncidentActivityType.CREATED.value assert created_activity_resp["dateCreated"] == created_activity.date_added