|
1 | 1 | from unittest import mock
|
2 | 2 |
|
| 3 | +from django.db.models import Q |
3 | 4 | from rest_framework.exceptions import ErrorDetail
|
4 | 5 |
|
5 | 6 | from sentry.api.serializers import serialize
|
6 | 7 | from sentry.grouping.grouptype import ErrorGroupType
|
7 | 8 | from sentry.incidents.grouptype import MetricIssue
|
8 | 9 | from sentry.incidents.models.alert_rule import AlertRuleDetectionType
|
9 | 10 | from sentry.models.environment import Environment
|
| 11 | +from sentry.search.utils import _HACKY_INVALID_USER |
10 | 12 | from sentry.snuba.dataset import Dataset
|
11 | 13 | from sentry.snuba.models import (
|
12 | 14 | QuerySubscription,
|
|
19 | 21 | from sentry.testutils.silo import region_silo_test
|
20 | 22 | from sentry.uptime.grouptype import UptimeDomainCheckFailure
|
21 | 23 | from sentry.uptime.types import DATA_SOURCE_UPTIME_SUBSCRIPTION
|
| 24 | +from sentry.workflow_engine.endpoints.organization_detector_index import convert_assignee_values |
22 | 25 | from sentry.workflow_engine.models import DataCondition, DataConditionGroup, DataSource, Detector
|
23 | 26 | from sentry.workflow_engine.models.data_condition import Condition
|
24 | 27 | from sentry.workflow_engine.models.detector_workflow import DetectorWorkflow
|
@@ -592,21 +595,68 @@ def test_invalid_owner(self):
|
592 | 595 | )
|
593 | 596 | assert "owner" in response.data
|
594 | 597 |
|
595 |
| - def test_owner_not_in_organization(self): |
596 |
| - # Create a user in another organization |
597 |
| - other_org = self.create_organization() |
598 |
| - other_user = self.create_user() |
599 |
| - self.create_member(organization=other_org, user=other_user) |
600 | 598 |
|
601 |
| - # Test with owner not in current organization |
602 |
| - data_with_invalid_owner = { |
603 |
| - **self.valid_data, |
604 |
| - "owner": other_user.get_actor_identifier(), |
605 |
| - } |
| 599 | +@region_silo_test |
| 600 | +class ConvertAssigneeValuesTest(APITestCase): |
| 601 | + """Test the convert_assignee_values function""" |
606 | 602 |
|
607 |
| - response = self.get_error_response( |
608 |
| - self.organization.slug, |
609 |
| - **data_with_invalid_owner, |
610 |
| - status_code=400, |
611 |
| - ) |
612 |
| - assert "owner" in response.data |
| 603 | + def setUp(self): |
| 604 | + super().setUp() |
| 605 | + self.user = self.create_user() |
| 606 | + self.team = self.create_team(organization=self.organization) |
| 607 | + self.other_user = self.create_user() |
| 608 | + self.create_member(organization=self.organization, user=self.other_user) |
| 609 | + self.projects = [self.project] |
| 610 | + |
| 611 | + def test_convert_assignee_values_user_email(self): |
| 612 | + result = convert_assignee_values([self.user.email], self.projects, self.user) |
| 613 | + expected = Q(owner_user_id=self.user.id) |
| 614 | + self.assertEqual(str(result), str(expected)) |
| 615 | + |
| 616 | + def test_convert_assignee_values_user_username(self): |
| 617 | + result = convert_assignee_values([self.user.username], self.projects, self.user) |
| 618 | + expected = Q(owner_user_id=self.user.id) |
| 619 | + self.assertEqual(str(result), str(expected)) |
| 620 | + |
| 621 | + def test_convert_assignee_values_team_slug(self): |
| 622 | + result = convert_assignee_values([f"#{self.team.slug}"], self.projects, self.user) |
| 623 | + expected = Q(owner_team_id=self.team.id) |
| 624 | + self.assertEqual(str(result), str(expected)) |
| 625 | + |
| 626 | + def test_convert_assignee_values_me(self): |
| 627 | + result = convert_assignee_values(["me"], self.projects, self.user) |
| 628 | + expected = Q(owner_user_id=self.user.id) |
| 629 | + self.assertEqual(str(result), str(expected)) |
| 630 | + |
| 631 | + def test_convert_assignee_values_none(self): |
| 632 | + result = convert_assignee_values(["none"], self.projects, self.user) |
| 633 | + expected = Q(owner_team_id__isnull=True, owner_user_id__isnull=True) |
| 634 | + self.assertEqual(str(result), str(expected)) |
| 635 | + |
| 636 | + def test_convert_assignee_values_multiple(self): |
| 637 | + result = convert_assignee_values( |
| 638 | + [str(self.user.email), f"#{self.team.slug}"], self.projects, self.user |
| 639 | + ) |
| 640 | + expected = Q(owner_user_id=self.user.id) | Q(owner_team_id=self.team.id) |
| 641 | + self.assertEqual(str(result), str(expected)) |
| 642 | + |
| 643 | + def test_convert_assignee_values_mixed(self): |
| 644 | + result = convert_assignee_values( |
| 645 | + ["me", "none", f"#{self.team.slug}"], self.projects, self.user |
| 646 | + ) |
| 647 | + expected = ( |
| 648 | + Q(owner_user_id=self.user.id) |
| 649 | + | Q(owner_team_id__isnull=True, owner_user_id__isnull=True) |
| 650 | + | Q(owner_team_id=self.team.id) |
| 651 | + ) |
| 652 | + self.assertEqual(str(result), str(expected)) |
| 653 | + |
| 654 | + def test_convert_assignee_values_invalid(self): |
| 655 | + result = convert_assignee_values(["999999"], self.projects, self.user) |
| 656 | + expected = Q(owner_user_id=_HACKY_INVALID_USER.id) |
| 657 | + self.assertEqual(str(result), str(expected)) |
| 658 | + |
| 659 | + def test_convert_assignee_values_empty(self): |
| 660 | + result = convert_assignee_values([], self.projects, self.user) |
| 661 | + expected = Q() |
| 662 | + self.assertEqual(str(result), str(expected)) |
0 commit comments