|
3 | 3 | from django.utils import timezone
|
4 | 4 |
|
5 | 5 | from sentry.api.serializers import serialize
|
6 |
| -from sentry.api.serializers.models.rule import WorkflowEngineRuleSerializer |
| 6 | +from sentry.api.serializers.models.rule import RuleSerializer, WorkflowEngineRuleSerializer |
7 | 7 | from sentry.models.rulefirehistory import RuleFireHistory
|
8 | 8 | from sentry.rules.conditions.event_frequency import EventUniqueUserFrequencyConditionWithConditions
|
9 | 9 | from sentry.rules.conditions.reappeared_event import ReappearedEventCondition
|
|
14 | 14 | from sentry.rules.filters.tagged_event import TaggedEventFilter
|
15 | 15 | from sentry.testutils.cases import TestCase
|
16 | 16 | from sentry.testutils.helpers.datetime import before_now, freeze_time
|
| 17 | +from sentry.testutils.helpers.features import with_feature |
17 | 18 | from sentry.users.services.user.serial import serialize_rpc_user
|
18 | 19 | from sentry.workflow_engine.migration_helpers.issue_alert_migration import IssueAlertMigrator
|
19 | 20 | from sentry.workflow_engine.models import WorkflowDataConditionGroup, WorkflowFireHistory
|
20 | 21 | from sentry.workflow_engine.models.data_condition import Condition
|
21 | 22 |
|
22 | 23 |
|
| 24 | +@freeze_time() |
| 25 | +class RuleSerializerTest(TestCase): |
| 26 | + def test_last_triggered_rule_only(self): |
| 27 | + rule = self.create_project_rule() |
| 28 | + |
| 29 | + # Initially no fire history |
| 30 | + result = serialize(rule, self.user, RuleSerializer(expand=["lastTriggered"])) |
| 31 | + assert result["lastTriggered"] is None |
| 32 | + |
| 33 | + # Create a RuleFireHistory |
| 34 | + RuleFireHistory.objects.create(project=self.project, rule=rule, group=self.group) |
| 35 | + |
| 36 | + result = serialize(rule, self.user, RuleSerializer(expand=["lastTriggered"])) |
| 37 | + assert result["lastTriggered"] == timezone.now() |
| 38 | + |
| 39 | + @with_feature("organizations:workflow-engine-single-process-workflows") |
| 40 | + def test_last_triggered_with_workflow(self): |
| 41 | + rule = self.create_project_rule() |
| 42 | + |
| 43 | + # Create a workflow for the rule |
| 44 | + workflow = IssueAlertMigrator(rule).run() |
| 45 | + |
| 46 | + # Create an older RuleFireHistory |
| 47 | + rfh = RuleFireHistory.objects.create(project=self.project, rule=rule, group=self.group) |
| 48 | + rfh.update(date_added=before_now(hours=2)) |
| 49 | + |
| 50 | + # Create a newer WorkflowFireHistory |
| 51 | + WorkflowFireHistory.objects.create( |
| 52 | + workflow=workflow, group=self.group, event_id="test-event-id", is_single_written=True |
| 53 | + ) |
| 54 | + |
| 55 | + result = serialize(rule, self.user, RuleSerializer(expand=["lastTriggered"])) |
| 56 | + assert result["lastTriggered"] == timezone.now() |
| 57 | + |
| 58 | + def test_last_triggered_workflow_ignore_single_written_false(self): |
| 59 | + """Test that WorkflowFireHistory with is_single_written=False is ignored.""" |
| 60 | + rule = self.create_project_rule() |
| 61 | + |
| 62 | + # Create a workflow for the rule |
| 63 | + workflow = IssueAlertMigrator(rule).run() |
| 64 | + |
| 65 | + # Create a WorkflowFireHistory with is_single_written=False |
| 66 | + WorkflowFireHistory.objects.create( |
| 67 | + workflow=workflow, group=self.group, event_id="test-event-id", is_single_written=False |
| 68 | + ) |
| 69 | + |
| 70 | + result = serialize(rule, self.user, RuleSerializer(expand=["lastTriggered"])) |
| 71 | + assert result["lastTriggered"] is None |
| 72 | + |
| 73 | + |
23 | 74 | @freeze_time()
|
24 | 75 | class WorkflowRuleSerializerTest(TestCase):
|
25 | 76 | def setUp(self):
|
|
0 commit comments