Browse Source

feat(api): Update OrganizationIssuesResolvedInReleaseEndpoint to use GroupSerializerSnuba

Fixes APP-956
Dan Fuller 6 years ago
parent
commit
9638c2843d

+ 5 - 7
src/sentry/api/bases/organization.py

@@ -180,14 +180,12 @@ class OrganizationEndpoint(Endpoint):
         if not requested_environments:
             return []
 
-        environments = set(
-            Environment.objects.filter(
-                organization_id=organization.id,
-                name__in=requested_environments,
-            ).values_list('name', flat=True),
+        environments = Environment.objects.filter(
+            organization_id=organization.id,
+            name__in=requested_environments,
         )
 
-        if requested_environments != environments:
+        if set(requested_environments) != set([e.name for e in environments]):
             raise ResourceDoesNotExist
 
         return list(environments)
@@ -226,7 +224,7 @@ class OrganizationEndpoint(Endpoint):
         if not project_ids:
             raise NoProjects
 
-        environments = self.get_environments(request, organization)
+        environments = [e.name for e in self.get_environments(request, organization)]
         params = {
             'start': start,
             'end': end,

+ 3 - 3
src/sentry/api/endpoints/organization_issues_resolved_in_release.py

@@ -9,7 +9,7 @@ from sentry.api.bases.organization import (
 )
 from sentry.api.helpers.releases import get_group_ids_resolved_in_release
 from sentry.api.serializers import serialize
-from sentry.api.serializers.models.group import GroupSerializer
+from sentry.api.serializers.models.group import GroupSerializerSnuba
 from sentry.models import Group
 
 
@@ -37,8 +37,8 @@ class OrganizationIssuesResolvedInReleaseEndpoint(OrganizationEndpoint, Environm
         context = serialize(
             list(groups),
             request.user,
-            GroupSerializer(
-                environment_func=self._get_environment_func(request, organization.id)
+            GroupSerializerSnuba(
+                environment_ids=[e.id for e in self.get_environments(request, organization)],
             )
         )
         return Response(context)

+ 1 - 1
tests/sentry/api/bases/test_organization.py

@@ -240,7 +240,7 @@ class GetEnvironmentsTest(BaseOrganizationEndpointTest):
             self.build_request(**request_args),
             self.org,
         )
-        assert set([e.name for e in expected_envs]) == set(result)
+        assert set([e.name for e in expected_envs]) == set([e.name for e in result])
 
     def test_no_params(self):
         self.run_test([])

+ 23 - 3
tests/sentry/api/endpoints/test_organization_issues_resolved_in_release.py → tests/snuba/api/endpoints/test_organization_issues_resolved_in_release.py

@@ -12,10 +12,13 @@ from sentry.models import (
     Repository,
 )
 
-from sentry.testutils import APITestCase
+from sentry.testutils import (
+    APITestCase,
+    SnubaTestCase,
+)
 
 
-class OrganizationIssuesResolvedInReleaseEndpointTest(APITestCase):
+class OrganizationIssuesResolvedInReleaseEndpointTest(APITestCase, SnubaTestCase):
     endpoint = 'sentry-api-0-organization-release-resolved'
     method = 'get'
 
@@ -28,6 +31,9 @@ class OrganizationIssuesResolvedInReleaseEndpointTest(APITestCase):
         self.project = self.create_project(teams=[self.team])
         self.project_2 = self.create_project(teams=[self.team])
         self.release = self.create_release(project=self.project)
+        self.environment = self.create_environment(project=self.project)
+        self.environment.add_project(self.project_2)
+        self.environment_2 = self.create_environment(project=self.project)
         self.group = self.create_group(project=self.project)
         self.group_2 = self.create_group(project=self.project_2)
         self.login_as(self.user)
@@ -75,10 +81,12 @@ class OrganizationIssuesResolvedInReleaseEndpointTest(APITestCase):
             type=GroupResolution.Type.in_release,
         )
 
-    def run_test(self, expected_groups, project_ids=None):
+    def run_test(self, expected_groups, project_ids=None, environment_names=None):
         params = {}
         if project_ids:
             params['project'] = project_ids
+        if environment_names:
+            params['environment'] = environment_names
 
         response = self.get_valid_response(
             self.org.slug,
@@ -139,3 +147,15 @@ class OrganizationIssuesResolvedInReleaseEndpointTest(APITestCase):
             [self.group, self.group_2],
             project_ids=[self.group.project_id, self.group_2.project_id],
         )
+
+    def test_multiple_envs_projects(self):
+        """
+        Test that the endpoint will work correctly if multiple envs are passed
+        """
+        self.build_grouplink()
+        self.build_grouplink(self.group_2)
+        self.run_test(
+            [self.group],
+            project_ids=[self.group.project_id],
+            environment_names=[self.environment.name, self.environment_2.name],
+        )