Browse Source

feat(issues): Allow expanding owners on issue details (#38974)

Scott Cooper 2 years ago
parent
commit
079a5f7771

+ 6 - 0
src/sentry/api/endpoints/group_details.py

@@ -23,6 +23,7 @@ from sentry.api.serializers import GroupSerializer, GroupSerializerSnuba, serial
 from sentry.api.serializers.models.plugin import PluginSerializer, is_plugin_deprecated
 from sentry.models import Activity, Group, GroupSeen, GroupSubscriptionManager, UserReport
 from sentry.models.groupinbox import get_inbox_details
+from sentry.models.groupowner import get_owner_details
 from sentry.plugins.base import plugins
 from sentry.plugins.bases import IssueTrackingPlugin2
 from sentry.types.issues import GroupCategory
@@ -203,6 +204,11 @@ class GroupDetailsEndpoint(GroupEndpoint, EnvironmentMixin):
                 inbox_reason = inbox_map.get(group.id)
                 data.update({"inbox": inbox_reason})
 
+            if "owners" in expand:
+                owner_details = get_owner_details([group], request.user)
+                owners = owner_details.get(group.id)
+                data.update({"owners": owners})
+
             action_list = self._get_actions(request, group)
             data.update(
                 {

+ 38 - 1
tests/snuba/api/endpoints/test_group_details.py

@@ -2,7 +2,14 @@ from unittest import mock
 
 from rest_framework.exceptions import ErrorDetail
 
-from sentry.models import Environment, GroupInboxReason, Release
+from sentry.models import (
+    GROUP_OWNER_TYPE,
+    Environment,
+    GroupInboxReason,
+    GroupOwner,
+    GroupOwnerType,
+    Release,
+)
 from sentry.models.groupinbox import add_group_to_inbox, remove_group_from_inbox
 from sentry.testutils import APITestCase, SnubaTestCase
 from sentry.testutils.helpers.datetime import before_now, iso_format
@@ -155,6 +162,36 @@ class GroupDetailsTest(APITestCase, SnubaTestCase):
         assert response.status_code == 200, response.content
         assert response.data["inbox"] is None
 
+    def test_group_expand_owners(self):
+        self.login_as(user=self.user)
+        event = self.store_event(
+            data={"timestamp": iso_format(before_now(seconds=500)), "fingerprint": ["group-1"]},
+            project_id=self.project.id,
+        )
+        group = event.group
+        url = f"/api/0/issues/{group.id}/?expand=owners"
+
+        self.login_as(user=self.user)
+        # Test with no owner
+        response = self.client.get(url, format="json")
+        assert response.status_code == 200
+        assert response.data["owners"] is None
+
+        # Test with owners
+        GroupOwner.objects.create(
+            group=event.group,
+            project=event.project,
+            organization=event.project.organization,
+            type=GroupOwnerType.SUSPECT_COMMIT.value,
+            user=self.user,
+        )
+        response = self.client.get(url, format="json")
+        assert response.status_code == 200, response.content
+        assert response.data["owners"] is not None
+        assert len(response.data["owners"]) == 1
+        assert response.data["owners"][0]["owner"] == f"user:{self.user.id}"
+        assert response.data["owners"][0]["type"] == GROUP_OWNER_TYPE[GroupOwnerType.SUSPECT_COMMIT]
+
     def test_assigned_to_unknown(self):
         self.login_as(user=self.user)
         event = self.store_event(