|
6 | 6 | import pytest
|
7 | 7 | from django.utils import timezone
|
8 | 8 |
|
| 9 | +from sentry.grouping.grouptype import ErrorGroupType |
9 | 10 | from sentry.incidents.grouptype import MetricIssue
|
10 |
| -from sentry.issues.grouptype import PerformanceNPlusOneAPICallsGroupType |
| 11 | +from sentry.issues.grouptype import FeedbackGroup, PerformanceNPlusOneAPICallsGroupType |
11 | 12 | from sentry.issues.issue_occurrence import IssueOccurrence
|
12 | 13 | from sentry.issues.producer import PayloadType
|
13 | 14 | from sentry.issues.status_change_message import StatusChangeMessage
|
|
23 | 24 | from sentry.workflow_engine.handlers.detector import DetectorStateData
|
24 | 25 | from sentry.workflow_engine.handlers.detector.stateful import get_redis_client
|
25 | 26 | from sentry.workflow_engine.models import DataPacket, Detector, DetectorState
|
| 27 | +from sentry.workflow_engine.models.detector_group import DetectorGroup |
26 | 28 | from sentry.workflow_engine.processors.detector import (
|
| 29 | + associate_new_group_with_detector, |
27 | 30 | get_detector_by_event,
|
28 | 31 | get_detectors_by_groupevents_bulk,
|
29 | 32 | process_detectors,
|
@@ -1017,3 +1020,40 @@ def test_mixed_occurrences_missing_detectors(self) -> None:
|
1017 | 1020 |
|
1018 | 1021 | assert result == {}
|
1019 | 1022 | mock_metrics.incr.assert_called_with("workflow_engine.detectors.error", amount=1)
|
| 1023 | + |
| 1024 | + |
| 1025 | +class TestAssociateNewGroupWithDetector(TestCase): |
| 1026 | + def setUp(self) -> None: |
| 1027 | + super().setUp() |
| 1028 | + self.metric_detector = self.create_detector(project=self.project, type="metric_issue") |
| 1029 | + self.error_detector = self.create_detector(project=self.project, type="error") |
| 1030 | + |
| 1031 | + def test_metrics_group_with_known_detector(self) -> None: |
| 1032 | + group = self.create_group(project=self.project, type=MetricIssue.type_id) |
| 1033 | + |
| 1034 | + # Should return True and create DetectorGroup |
| 1035 | + assert associate_new_group_with_detector(group, self.metric_detector.id) |
| 1036 | + assert DetectorGroup.objects.filter( |
| 1037 | + detector_id=self.metric_detector.id, group_id=group.id |
| 1038 | + ).exists() |
| 1039 | + |
| 1040 | + def test_error_group_with_feature_disabled(self) -> None: |
| 1041 | + group = self.create_group(project=self.project, type=ErrorGroupType.type_id) |
| 1042 | + |
| 1043 | + with self.options({"workflow_engine.associate_error_detectors": False}): |
| 1044 | + assert not associate_new_group_with_detector(group) |
| 1045 | + assert not DetectorGroup.objects.filter(group_id=group.id).exists() |
| 1046 | + |
| 1047 | + def test_error_group_with_feature_enabled(self) -> None: |
| 1048 | + group = self.create_group(project=self.project, type=ErrorGroupType.type_id) |
| 1049 | + |
| 1050 | + with self.options({"workflow_engine.associate_error_detectors": True}): |
| 1051 | + assert associate_new_group_with_detector(group) |
| 1052 | + assert DetectorGroup.objects.filter( |
| 1053 | + detector_id=self.error_detector.id, group_id=group.id |
| 1054 | + ).exists() |
| 1055 | + |
| 1056 | + def test_feedback_group_returns_false(self) -> None: |
| 1057 | + group = self.create_group(project=self.project, type=FeedbackGroup.type_id) |
| 1058 | + assert not associate_new_group_with_detector(group) |
| 1059 | + assert not DetectorGroup.objects.filter(group_id=group.id).exists() |
0 commit comments