|
@@ -38,6 +38,7 @@ from sentry.models.integrations.organization_integration import OrganizationInte
|
|
|
from sentry.models.options.user_option import UserOption
|
|
|
from sentry.models.release import Release
|
|
|
from sentry.models.releaseprojectenvironment import ReleaseStages
|
|
|
+from sentry.models.savedsearch import SavedSearch, Visibility
|
|
|
from sentry.search.events.constants import (
|
|
|
RELEASE_STAGE_ALIAS,
|
|
|
SEMVER_ALIAS,
|
|
@@ -1932,6 +1933,82 @@ class GroupListTest(APITestCase, SnubaTestCase):
|
|
|
assert int(response.data[0]["id"]) == event.group.id
|
|
|
assert "isUnhandled" not in response.data[0]
|
|
|
|
|
|
+ def test_selected_saved_search(self):
|
|
|
+ saved_search = SavedSearch.objects.create(
|
|
|
+ name="Saved Search",
|
|
|
+ query="ZeroDivisionError",
|
|
|
+ organization=self.organization,
|
|
|
+ owner_id=self.user.id,
|
|
|
+ )
|
|
|
+ event = self.store_event(
|
|
|
+ data={
|
|
|
+ "timestamp": iso_format(before_now(seconds=500)),
|
|
|
+ "fingerprint": ["group-1"],
|
|
|
+ "message": "ZeroDivisionError",
|
|
|
+ },
|
|
|
+ project_id=self.project.id,
|
|
|
+ )
|
|
|
+
|
|
|
+ self.store_event(
|
|
|
+ data={
|
|
|
+ "timestamp": iso_format(before_now(seconds=500)),
|
|
|
+ "fingerprint": ["group-2"],
|
|
|
+ "message": "TypeError",
|
|
|
+ },
|
|
|
+ project_id=self.project.id,
|
|
|
+ )
|
|
|
+
|
|
|
+ self.login_as(user=self.user)
|
|
|
+ response = self.get_response(
|
|
|
+ sort_by="date",
|
|
|
+ limit=10,
|
|
|
+ query="is:unresolved",
|
|
|
+ collapse=["unhandled"],
|
|
|
+ savedSearch=0,
|
|
|
+ searchId=saved_search.id,
|
|
|
+ )
|
|
|
+ assert response.status_code == 200
|
|
|
+ assert len(response.data) == 1
|
|
|
+ assert int(response.data[0]["id"]) == event.group.id
|
|
|
+
|
|
|
+ def test_default_saved_search(self):
|
|
|
+ SavedSearch.objects.create(
|
|
|
+ name="Saved Search",
|
|
|
+ query="ZeroDivisionError",
|
|
|
+ organization=self.organization,
|
|
|
+ owner_id=self.user.id,
|
|
|
+ visibility=Visibility.OWNER_PINNED,
|
|
|
+ )
|
|
|
+ event = self.store_event(
|
|
|
+ data={
|
|
|
+ "timestamp": iso_format(before_now(seconds=500)),
|
|
|
+ "fingerprint": ["group-1"],
|
|
|
+ "message": "ZeroDivisionError",
|
|
|
+ },
|
|
|
+ project_id=self.project.id,
|
|
|
+ )
|
|
|
+
|
|
|
+ self.store_event(
|
|
|
+ data={
|
|
|
+ "timestamp": iso_format(before_now(seconds=500)),
|
|
|
+ "fingerprint": ["group-2"],
|
|
|
+ "message": "TypeError",
|
|
|
+ },
|
|
|
+ project_id=self.project.id,
|
|
|
+ )
|
|
|
+
|
|
|
+ self.login_as(user=self.user)
|
|
|
+ response = self.get_response(
|
|
|
+ sort_by="date",
|
|
|
+ limit=10,
|
|
|
+ query="is:unresolved",
|
|
|
+ collapse=["unhandled"],
|
|
|
+ savedSearch=0,
|
|
|
+ )
|
|
|
+ assert response.status_code == 200
|
|
|
+ assert len(response.data) == 1
|
|
|
+ assert int(response.data[0]["id"]) == event.group.id
|
|
|
+
|
|
|
def test_query_status_and_substatus_overlapping(self):
|
|
|
event = self.store_event(
|
|
|
data={"timestamp": iso_format(before_now(seconds=500)), "fingerprint": ["group-1"]},
|