test_organization_discover_saved_query_detail.py 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. from __future__ import absolute_import
  2. import six
  3. from sentry.testutils import APITestCase
  4. from django.core.urlresolvers import reverse
  5. from sentry.testutils import SnubaTestCase
  6. from sentry.models import DiscoverSavedQuery, DiscoverSavedQueryProject
  7. class OrganizationDiscoverSavedQueryDetailTest(APITestCase, SnubaTestCase):
  8. def setUp(self):
  9. super(OrganizationDiscoverSavedQueryDetailTest, self).setUp()
  10. self.login_as(user=self.user)
  11. self.org = self.create_organization(owner=self.user)
  12. self.org_without_access = self.create_organization()
  13. self.project_ids = [
  14. self.create_project(organization=self.org).id,
  15. self.create_project(organization=self.org).id
  16. ]
  17. query = {
  18. 'fields': ['test'],
  19. 'conditions': [],
  20. 'limit': 10
  21. }
  22. model = DiscoverSavedQuery.objects.create(
  23. organization=self.org, created_by=self.user, name="Test query", query=query)
  24. model.set_projects(self.project_ids)
  25. self.query_id = model.id
  26. invalid = DiscoverSavedQuery.objects.create(
  27. organization=self.org_without_access, name="Query without access", query=query
  28. )
  29. invalid.set_projects(self.project_ids)
  30. self.query_id_without_access = invalid.id
  31. def test_get(self):
  32. with self.feature('organizations:discover'):
  33. url = reverse(
  34. 'sentry-api-0-organization-discover-saved-query-detail',
  35. args=[
  36. self.org.slug,
  37. self.query_id])
  38. response = self.client.get(url)
  39. assert response.status_code == 200, response.content
  40. assert response.data['id'] == six.text_type(self.query_id)
  41. assert response.data['projects'] == self.project_ids
  42. assert response.data['fields'] == ['test']
  43. assert response.data['conditions'] == []
  44. assert response.data['limit'] == 10
  45. def test_get_org_without_access(self):
  46. with self.feature('organizations:discover'):
  47. url = reverse(
  48. 'sentry-api-0-organization-discover-saved-query-detail',
  49. args=[
  50. self.org_without_access.slug,
  51. self.query_id])
  52. response = self.client.get(url)
  53. assert response.status_code == 403, response.content
  54. def test_put(self):
  55. with self.feature('organizations:discover'):
  56. url = reverse(
  57. 'sentry-api-0-organization-discover-saved-query-detail',
  58. args=[
  59. self.org.slug,
  60. self.query_id])
  61. response = self.client.put(url, {
  62. 'name': 'New query',
  63. 'projects': self.project_ids,
  64. 'fields': [],
  65. 'range': '24h',
  66. 'limit': 20,
  67. 'conditions': [],
  68. 'aggregations': [],
  69. 'orderby': '-time',
  70. })
  71. assert response.status_code == 200, response.content
  72. assert response.data['id'] == six.text_type(self.query_id)
  73. assert response.data['projects'] == self.project_ids
  74. assert response.data['fields'] == []
  75. assert response.data['conditions'] == []
  76. assert response.data['limit'] == 20
  77. def test_put_query_without_access(self):
  78. with self.feature('organizations:discover'):
  79. url = reverse(
  80. 'sentry-api-0-organization-discover-saved-query-detail',
  81. args=[
  82. self.org.slug,
  83. self.query_id_without_access])
  84. response = self.client.put(url, {
  85. 'name': 'New query',
  86. 'projects': self.project_ids,
  87. 'range': '24h',
  88. })
  89. assert response.status_code == 404
  90. def test_put_org_without_access(self):
  91. with self.feature('organizations:discover'):
  92. url = reverse(
  93. 'sentry-api-0-organization-discover-saved-query-detail',
  94. args=[
  95. self.org_without_access.slug,
  96. self.query_id])
  97. response = self.client.put(url, {
  98. 'name': 'New query',
  99. 'projects': self.project_ids,
  100. 'range': '24h',
  101. })
  102. assert response.status_code == 403, response.content
  103. def test_delete(self):
  104. with self.feature('organizations:discover'):
  105. url = reverse(
  106. 'sentry-api-0-organization-discover-saved-query-detail',
  107. args=[
  108. self.org.slug,
  109. self.query_id])
  110. response = self.client.delete(url)
  111. assert response.status_code == 204
  112. assert self.client.get(url).status_code == 404
  113. def test_delete_removes_projects(self):
  114. with self.feature('organizations:discover'):
  115. url = reverse(
  116. 'sentry-api-0-organization-discover-saved-query-detail',
  117. args=[
  118. self.org.slug,
  119. self.query_id])
  120. self.client.delete(url)
  121. projects = list(
  122. DiscoverSavedQueryProject.objects.filter(
  123. discover_saved_query=self.query_id))
  124. assert projects == []
  125. def test_delete_query_without_access(self):
  126. with self.feature('organizations:discover'):
  127. url = reverse(
  128. 'sentry-api-0-organization-discover-saved-query-detail',
  129. args=[
  130. self.org.slug,
  131. self.query_id_without_access])
  132. response = self.client.delete(url)
  133. assert response.status_code == 404
  134. def test_delete_org_without_access(self):
  135. with self.feature('organizations:discover'):
  136. url = reverse(
  137. 'sentry-api-0-organization-discover-saved-query-detail',
  138. args=[
  139. self.org_without_access.slug,
  140. self.query_id])
  141. response = self.client.delete(url)
  142. assert response.status_code == 403, response.content