66from sentry import buffer
77from sentry .eventstream .base import GroupState
88from sentry .grouping .grouptype import ErrorGroupType
9+ from sentry .models .environment import Environment
910from sentry .models .rule import Rule
1011from sentry .testutils .factories import Factories
1112from sentry .testutils .helpers import with_feature
@@ -118,6 +119,19 @@ def test_error_event__logger(self, mock_logger):
118119 )
119120
120121 def test_same_environment_only (self ):
122+ env = self .create_environment (project = self .project )
123+ other_env = self .create_environment (project = self .project )
124+
125+ self .group , self .event , self .group_event = self .create_group_event (environment = env .name )
126+ self .job = WorkflowJob (
127+ {
128+ "event" : self .group_event ,
129+ "group_state" : GroupState (
130+ id = 1 , is_new = False , is_regression = True , is_new_group_environment = False
131+ ),
132+ }
133+ )
134+
121135 # only processes workflows with the same env or no env specified
122136 self .error_workflow .update (environment = None )
123137
@@ -133,13 +147,21 @@ def test_same_environment_only(self):
133147 dcg = self .create_data_condition_group ()
134148 matching_env_workflow = self .create_workflow (
135149 when_condition_group = dcg ,
136- environment = self . group_event . get_environment () ,
150+ environment = env ,
137151 )
138152 self .create_detector_workflow (
139153 detector = self .error_detector ,
140154 workflow = matching_env_workflow ,
141155 )
142156
157+ mismatched_env_workflow = self .create_workflow (
158+ when_condition_group = dcg , environment = other_env
159+ )
160+ self .create_detector_workflow (
161+ detector = self .error_detector ,
162+ workflow = mismatched_env_workflow ,
163+ )
164+
143165 triggered_workflows = process_workflows (self .job )
144166 assert triggered_workflows == {self .error_workflow , matching_env_workflow }
145167
@@ -183,6 +205,20 @@ def test_no_detector(self, mock_logger, mock_metrics):
183205 extra = {"event_id" : self .event .event_id },
184206 )
185207
208+ @patch ("sentry.workflow_engine.processors.workflow.metrics" )
209+ @patch ("sentry.workflow_engine.processors.workflow.logger" )
210+ def test_no_environment (self , mock_logger , mock_metrics ):
211+ Environment .objects .all ().delete ()
212+ triggered_workflows = process_workflows (self .job )
213+
214+ assert not triggered_workflows
215+
216+ mock_metrics .incr .assert_called_once_with ("workflow_engine.process_workflows.error" )
217+ mock_logger .exception .assert_called_once_with (
218+ "Missing environment for event" ,
219+ extra = {"event_id" : self .event .event_id },
220+ )
221+
186222 @patch ("sentry.utils.metrics.incr" )
187223 @patch ("sentry.workflow_engine.processors.workflow.logger" )
188224 def test_no_metrics_triggered (self , mock_logger , mock_incr ):
@@ -244,6 +280,13 @@ def test_workflow_trigger(self):
244280 triggered_workflows = evaluate_workflow_triggers ({self .workflow }, self .job )
245281 assert triggered_workflows == {self .workflow }
246282
283+ def test_workflow_trigger__no_conditions (self ):
284+ assert self .workflow .when_condition_group
285+ self .workflow .when_condition_group .conditions .all ().delete ()
286+
287+ triggered_workflows = evaluate_workflow_triggers ({self .workflow }, self .job )
288+ assert triggered_workflows == {self .workflow }
289+
247290 def test_no_workflow_trigger (self ):
248291 triggered_workflows = evaluate_workflow_triggers (set (), self .job )
249292 assert not triggered_workflows
0 commit comments