Просмотр исходного кода

Merge branch 'master' into 121-implement-stats_v2-api

James Kiger 3 лет назад
Родитель
Сommit
62f5c54203
3 измененных файлов с 61 добавлено и 6 удалено
  1. 55 0
      alerts/tests/test_views.py
  2. 2 2
      alerts/views.py
  3. 4 4
      issues/tests/tests.py

+ 55 - 0
alerts/tests/test_views.py

@@ -20,6 +20,21 @@ class AlertAPITestCase(GlitchTipTestCase):
         res = self.client.get(url)
         self.assertContains(res, alert.timespan_minutes)
 
+    def test_retrieve_with_second_team(self):
+        baker.make(
+            "alerts.ProjectAlert", project=self.project, timespan_minutes=60
+        )
+        url = reverse(
+            "project-alerts-list",
+            kwargs={"project_pk": f"{self.organization.slug}/{self.project.slug}",},
+        )
+
+        team2 = baker.make("teams.Team", organization=self.organization)
+        team2.members.add(self.org_user)
+        self.project.team_set.add(team2)
+        res = self.client.get(url)
+        self.assertEqual(len(res.json()), 1)
+
     def test_project_alerts_create(self):
         url = reverse(
             "project-alerts-list",
@@ -38,6 +53,28 @@ class AlertAPITestCase(GlitchTipTestCase):
         self.assertEqual(project_alert.timespan_minutes, data["timespan_minutes"])
         self.assertEqual(project_alert.project, self.project)
 
+    def test_create_with_second_team(self):
+        team2 = baker.make("teams.Team", organization=self.organization)
+        team2.members.add(self.org_user)
+        self.project.team_set.add(team2)
+
+        url = reverse(
+            "project-alerts-list",
+            kwargs={"project_pk": f"{self.organization.slug}/{self.project.slug}",},
+        )
+        data = {
+            "name": "foo",
+            "timespan_minutes": 60,
+            "quantity": 2,
+            "uptime": True,
+            "alertRecipients": [{"recipientType": "email", "url": "example.com"}],
+        }
+        res = self.client.post(url, data)
+        self.assertEqual(res.status_code, 201)
+        project_alert = ProjectAlert.objects.filter(name="foo", uptime=True).first()
+        self.assertEqual(project_alert.timespan_minutes, data["timespan_minutes"])
+        self.assertEqual(project_alert.project, self.project)
+
     def test_project_alerts_update(self):
         alert = baker.make(
             "alerts.ProjectAlert", project=self.project, timespan_minutes=60
@@ -99,3 +136,21 @@ class AlertAPITestCase(GlitchTipTestCase):
         res = self.client.delete(url)
         self.assertEqual(res.status_code, 204)
         self.assertEqual(ProjectAlert.objects.count(), 0)
+
+    def test_delete_with_second_team(self):
+        alert = baker.make(
+            "alerts.ProjectAlert", project=self.project, timespan_minutes=60
+        )
+        url = reverse(
+            "project-alerts-detail",
+            kwargs={
+                "project_pk": f"{self.organization.slug}/{self.project.slug}",
+                "pk": alert.pk,
+            },
+        )
+        team2 = baker.make("teams.Team", organization=self.organization)
+        team2.members.add(self.org_user)
+        self.project.team_set.add(team2)
+        res = self.client.delete(url)
+        self.assertEqual(res.status_code, 204)
+        self.assertEqual(ProjectAlert.objects.count(), 0)

+ 2 - 2
alerts/views.py

@@ -6,7 +6,7 @@ from .permissions import ProjectAlertPermission
 
 
 class ProjectAlertViewSet(viewsets.ModelViewSet):
-    queryset = ProjectAlert.objects.all()
+    queryset = ProjectAlert.objects.distinct()
     serializer_class = ProjectAlertSerializer
     permission_classes = [ProjectAlertPermission]
 
@@ -21,7 +21,7 @@ class ProjectAlertViewSet(viewsets.ModelViewSet):
 
     def perform_create(self, serializer):
         try:
-            project = Project.objects.get(
+            project = Project.objects.distinct().get(
                 slug=self.kwargs.get("project_slug"),
                 team__members__user=self.request.user,
                 organization__slug=self.kwargs.get("organization_slug"),

+ 4 - 4
issues/tests/tests.py

@@ -286,16 +286,16 @@ class IssuesAPITestCase(GlitchTipTestCase):
         update_search_index_all_issues()
 
         res = self.client.get(self.url)
-        self.assertEqual(res.data[0]["id"], issue1.id)
+        self.assertEqual(res.data[0]["id"], str(issue1.id))
 
         res = self.client.get(self.url + "?sort=-count")
-        self.assertEqual(res.data[0]["id"], issue2.id)
+        self.assertEqual(res.data[0]["id"], str(issue2.id))
 
         res = self.client.get(self.url + "?sort=priority")
-        self.assertEqual(res.data[0]["id"], issue3.id)
+        self.assertEqual(res.data[0]["id"], str(issue3.id))
 
         res = self.client.get(self.url + "?sort=-priority")
-        self.assertEqual(res.data[0]["id"], issue2.id)
+        self.assertEqual(res.data[0]["id"], str(issue2.id))
 
     def test_filter_is_status(self):
         """ Match sentry's usage of "is" for status filtering """