test_group_events_oldest.py 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. from unittest import mock
  2. from sentry.event_manager import _pull_out_data
  3. from sentry.models import Group
  4. from sentry.testutils import APITestCase, SnubaTestCase
  5. from sentry.testutils.helpers.datetime import before_now, iso_format
  6. from sentry.testutils.silo import region_silo_test
  7. from sentry.types.issues import GroupType
  8. from sentry.utils.samples import load_data
  9. @region_silo_test
  10. class GroupEventsOldestTest(APITestCase, SnubaTestCase):
  11. def setUp(self):
  12. super().setUp()
  13. self.login_as(user=self.user)
  14. project = self.create_project()
  15. min_ago = iso_format(before_now(minutes=1))
  16. two_min_ago = iso_format(before_now(minutes=2))
  17. self.event1 = self.store_event(
  18. data={
  19. "event_id": "a" * 32,
  20. "environment": "staging",
  21. "fingerprint": ["group_1"],
  22. "timestamp": two_min_ago,
  23. },
  24. project_id=project.id,
  25. )
  26. self.event2 = self.store_event(
  27. data={
  28. "event_id": "b" * 32,
  29. "environment": "production",
  30. "fingerprint": ["group_1"],
  31. "timestamp": min_ago,
  32. },
  33. project_id=project.id,
  34. )
  35. self.group = Group.objects.first()
  36. def test_snuba_no_environment(self):
  37. url = f"/api/0/issues/{self.group.id}/events/oldest/"
  38. response = self.client.get(url, format="json")
  39. assert response.status_code == 200
  40. assert response.data["id"] == str(self.event1.event_id)
  41. def test_snuba_environment(self):
  42. url = f"/api/0/issues/{self.group.id}/events/oldest/"
  43. response = self.client.get(url, format="json", data={"environment": ["production"]})
  44. assert response.status_code == 200
  45. assert response.data["id"] == str(self.event2.event_id)
  46. def test_simple(self):
  47. url = f"/api/0/issues/{self.group.id}/events/oldest/"
  48. response = self.client.get(url, format="json")
  49. assert response.status_code == 200
  50. assert response.data["id"] == str(self.event1.event_id)
  51. def test_perf_issue(self):
  52. perf_group = self.create_group(type=GroupType.PERFORMANCE_N_PLUS_ONE_DB_QUERIES.value)
  53. def hack_pull_out_data(jobs, projects):
  54. _pull_out_data(jobs, projects)
  55. for job in jobs:
  56. job["event"].groups = [perf_group]
  57. return jobs, projects
  58. event_data = load_data("transaction")
  59. with mock.patch("sentry.event_manager._pull_out_data", hack_pull_out_data):
  60. event = self.store_event(data=event_data, project_id=self.project.id)
  61. url = f"/api/0/issues/{perf_group.id}/events/latest/"
  62. with self.feature("organizations:performance-issues"):
  63. response = self.client.get(url, format="json")
  64. assert response.status_code == 200
  65. assert response.data["eventID"] == event.event_id