Skip to content

Commit da7e1d0

Browse files
authored
ref(ACI): Update evaluate_value return (#92439)
An offshoot of #88647 to update `evaluate_value` to handle when the handler returns a result that isn't a boolean as we will for anomaly detection.
1 parent 72261fb commit da7e1d0

File tree

2 files changed

+32
-3
lines changed

2 files changed

+32
-3
lines changed

src/sentry/workflow_engine/models/data_condition.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,10 @@ def evaluate_value(self, value: T) -> DataConditionResult:
209209
)
210210
return None
211211

212-
return self.get_condition_result() if result else None
212+
if isinstance(result, bool):
213+
return self.get_condition_result() if result else None
214+
215+
return result
213216

214217

215218
def is_slow_condition(condition: DataCondition) -> bool:

tests/sentry/workflow_engine/models/test_data_condition.py

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
1+
from enum import IntEnum
12
from unittest import mock
23

34
import pytest
45

56
from sentry.testutils.cases import TestCase
67
from sentry.workflow_engine.models.data_condition import Condition, DataConditionEvaluationException
78
from sentry.workflow_engine.types import DetectorPriorityLevel
8-
from tests.sentry.workflow_engine.test_base import DataConditionHandlerMixin
9+
from tests.sentry.workflow_engine.test_base import BaseWorkflowTest, DataConditionHandlerMixin
10+
11+
12+
class MockDataConditionEnum(IntEnum):
13+
FOO = 1
14+
BAR = 2
915

1016

1117
class GetConditionResultTest(TestCase):
@@ -38,14 +44,34 @@ def test_boolean(self):
3844
assert dc.get_condition_result() is True
3945

4046

41-
class EvaluateValueTest(DataConditionHandlerMixin, TestCase):
47+
class EvaluateValueTest(DataConditionHandlerMixin, BaseWorkflowTest):
4248
def test(self):
4349
dc = self.create_data_condition(
4450
type=Condition.GREATER, comparison=1.0, condition_result=DetectorPriorityLevel.HIGH
4551
)
4652
assert dc.evaluate_value(2) == DetectorPriorityLevel.HIGH
4753
assert dc.evaluate_value(1) is None
4854

55+
def test_dict_comparison_result(self):
56+
def evaluate_value(
57+
value: int, comparison: dict[str, DetectorPriorityLevel]
58+
) -> DetectorPriorityLevel:
59+
return (
60+
DetectorPriorityLevel.HIGH
61+
if comparison["baz"].value > 1
62+
else DetectorPriorityLevel.OK
63+
)
64+
65+
dc = self.setup_condition_mocks(
66+
evaluate_value, ["sentry.workflow_engine.models.data_condition"]
67+
)
68+
dc.update(comparison={"baz": MockDataConditionEnum.BAR})
69+
assert dc.evaluate_value(2) == DetectorPriorityLevel.HIGH
70+
71+
dc.update(comparison={"baz": MockDataConditionEnum.FOO})
72+
assert dc.evaluate_value(0) == DetectorPriorityLevel.OK
73+
self.teardown_condition_mocks()
74+
4975
def test_bad_condition(self):
5076
with pytest.raises(ValueError):
5177
# Raises ValueError because the condition is invalid

0 commit comments

Comments
 (0)