|
| 1 | +from enum import IntEnum |
1 | 2 | from unittest import mock
|
2 | 3 |
|
3 | 4 | import pytest
|
4 | 5 |
|
5 | 6 | from sentry.testutils.cases import TestCase
|
6 | 7 | from sentry.workflow_engine.models.data_condition import Condition, DataConditionEvaluationException
|
7 | 8 | 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 |
9 | 15 |
|
10 | 16 |
|
11 | 17 | class GetConditionResultTest(TestCase):
|
@@ -38,14 +44,34 @@ def test_boolean(self):
|
38 | 44 | assert dc.get_condition_result() is True
|
39 | 45 |
|
40 | 46 |
|
41 |
| -class EvaluateValueTest(DataConditionHandlerMixin, TestCase): |
| 47 | +class EvaluateValueTest(DataConditionHandlerMixin, BaseWorkflowTest): |
42 | 48 | def test(self):
|
43 | 49 | dc = self.create_data_condition(
|
44 | 50 | type=Condition.GREATER, comparison=1.0, condition_result=DetectorPriorityLevel.HIGH
|
45 | 51 | )
|
46 | 52 | assert dc.evaluate_value(2) == DetectorPriorityLevel.HIGH
|
47 | 53 | assert dc.evaluate_value(1) is None
|
48 | 54 |
|
| 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 | + |
49 | 75 | def test_bad_condition(self):
|
50 | 76 | with pytest.raises(ValueError):
|
51 | 77 | # Raises ValueError because the condition is invalid
|
|
0 commit comments