Files
sentinel/tests/snuba/api/endpoints/test_discover_homepage_query.py
2024-02-15 17:01:50 +00:00

161 lines
5.8 KiB
Python

from django.urls import reverse
from sentry.api.serializers import serialize
from sentry.discover.models import DiscoverSavedQuery
from tests.snuba.api.endpoints.test_discover_saved_queries import DiscoverSavedQueryBase
FEATURES = ("organizations:discover-query",)
class DiscoverHomepageQueryTest(DiscoverSavedQueryBase):
def setUp(self):
super().setUp()
self.url = reverse("sentry-api-0-discover-homepage-query", args=[self.org.slug])
self.query = {"fields": ["test"], "conditions": [], "limit": 10}
self.project_ids = [
self.create_project(organization=self.org).id,
self.create_project(organization=self.org).id,
]
def test_returns_no_response_if_no_homepage_query_for_user(self):
with self.feature(FEATURES):
response = self.client.get(self.url)
assert response.status_code == 204, response.content
assert response.data is None
def test_returns_serialized_saved_query_if_homepage_is_set(self):
saved_query = DiscoverSavedQuery.objects.create(
organization=self.org,
created_by_id=self.user.id,
name="Test query",
query=self.query,
is_homepage=True,
)
with self.feature(FEATURES):
response = self.client.get(self.url)
assert response.status_code == 200, response.content
assert response.data == serialize(saved_query)
def test_put_updates_existing_homepage_query_to_reflect_new_data(self):
saved_query = DiscoverSavedQuery.objects.create(
organization=self.org,
created_by_id=self.user.id,
name="Test query",
query=self.query,
is_homepage=True,
)
with self.feature(FEATURES):
response = self.client.put(
self.url,
{
"name": "A new homepage query update",
"projects": self.project_ids,
"fields": ["field1", "field2"],
},
)
assert response.status_code == 200, response.content
saved_query.refresh_from_db()
assert response.data == serialize(saved_query)
assert saved_query.query["fields"] == ["field1", "field2"]
assert set(saved_query.projects.values_list("id", flat=True)) == set(self.project_ids)
def test_put_creates_new_discover_saved_query_if_none_exists(self):
homepage_query_payload = {
"version": 2,
"name": "New Homepage Query",
"projects": self.project_ids,
"environment": ["alpha"],
"fields": ["environment", "platform.name"],
"orderby": "-timestamp",
"range": None,
}
with self.feature(FEATURES):
response = self.client.put(self.url, data=homepage_query_payload)
assert response.status_code == 201, response.content
new_query = DiscoverSavedQuery.objects.get(
created_by_id=self.user.id, organization=self.org, is_homepage=True
)
assert response.data == serialize(new_query)
assert new_query.query["fields"] == homepage_query_payload["fields"]
assert new_query.query["environment"] == homepage_query_payload["environment"]
assert set(new_query.projects.values_list("id", flat=True)) == set(self.project_ids)
def test_put_responds_with_saved_empty_name_field(self):
homepage_query_payload = {
"version": 2,
"name": "New Homepage Query",
"projects": self.project_ids,
"environment": ["alpha"],
"fields": ["environment", "platform.name"],
"orderby": "-timestamp",
"range": None,
}
with self.feature(FEATURES):
response = self.client.put(self.url, data=homepage_query_payload)
assert response.status_code == 201, response.content
new_query = DiscoverSavedQuery.objects.get(
created_by_id=self.user.id, organization=self.org, is_homepage=True
)
assert new_query.name == ""
assert response.data["name"] == ""
def test_put_with_no_name(self):
homepage_query_payload = {
"version": 2,
"name": "",
"projects": self.project_ids,
"environment": ["alpha"],
"fields": ["environment", "platform.name"],
"orderby": "-timestamp",
"range": None,
}
with self.feature(FEATURES):
response = self.client.put(self.url, data=homepage_query_payload)
assert response.status_code == 201, response.content
new_query = DiscoverSavedQuery.objects.get(
created_by_id=self.user.id, organization=self.org, is_homepage=True
)
assert new_query.name == ""
assert response.data["name"] == ""
def test_post_not_allowed(self):
homepage_query_payload = {
"version": 2,
"name": "New Homepage Query",
"projects": ["-1"],
"environment": ["alpha"],
"fields": ["environment", "platform.name"],
"orderby": "-timestamp",
"range": None,
}
with self.feature(FEATURES):
response = self.client.post(self.url, data=homepage_query_payload)
assert response.status_code == 405, response.content
def test_delete_resets_saved_query(self):
DiscoverSavedQuery.objects.create(
organization=self.org,
created_by_id=self.user.id,
name="Test query",
query=self.query,
is_homepage=True,
)
with self.feature(FEATURES):
response = self.client.delete(self.url)
assert response.status_code == 204
assert not DiscoverSavedQuery.objects.filter(
created_by_id=self.user.id, organization=self.org, is_homepage=True
).exists()