test_organization_replay_events_meta.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. from datetime import datetime
  2. import pytest
  3. from django.urls import reverse
  4. from sentry.issues.grouptype import ReplayRageClickType
  5. from sentry.testutils.cases import APITestCase, SnubaTestCase
  6. from sentry.testutils.helpers.datetime import before_now
  7. from tests.sentry.issues.test_utils import OccurrenceTestMixin
  8. pytestmark = pytest.mark.sentry_metrics
  9. class OrganizationEventsMetaTest(APITestCase, SnubaTestCase, OccurrenceTestMixin):
  10. def setUp(self):
  11. super().setUp()
  12. self.min_ago = before_now(minutes=1).replace(microsecond=0)
  13. self.login_as(user=self.user)
  14. self.project_1 = self.create_project()
  15. self.project_2 = self.create_project()
  16. self.url = reverse(
  17. "sentry-api-0-organization-replay-events-meta",
  18. kwargs={"organization_id_or_slug": self.project.organization.slug},
  19. )
  20. self.features = {"organizations:session-replay": True}
  21. def test_simple(self):
  22. event_id_a = "a" * 32
  23. event_id_b = "b" * 32
  24. event_a = self.store_event(
  25. data={"event_id": event_id_a, "timestamp": self.min_ago.isoformat()},
  26. project_id=self.project_1.id,
  27. )
  28. event_b = self.store_event(
  29. data={"event_id": event_id_b, "timestamp": self.min_ago.isoformat()},
  30. project_id=self.project_2.id,
  31. )
  32. self.store_event(data={"timestamp": self.min_ago.isoformat()}, project_id=self.project_1.id)
  33. self.store_event(data={"timestamp": self.min_ago.isoformat()}, project_id=self.project_1.id)
  34. query = {"query": f"id:[{event_id_a}, {event_id_b}]"}
  35. with self.feature(self.features):
  36. response = self.client.get(self.url, query, format="json")
  37. expected = [
  38. {
  39. "error.type": [],
  40. "error.value": [],
  41. "id": event_id_a,
  42. "issue.id": event_a.group.id,
  43. "issue": event_a.group.qualified_short_id,
  44. "project.name": self.project_1.slug,
  45. "timestamp": self.min_ago.isoformat(),
  46. "title": "<unlabeled event>",
  47. },
  48. {
  49. "error.type": [],
  50. "error.value": [],
  51. "id": event_id_b,
  52. "issue.id": event_b.group.id,
  53. "issue": event_b.group.qualified_short_id,
  54. "project.name": self.project_2.slug,
  55. "timestamp": self.min_ago.isoformat(),
  56. "title": "<unlabeled event>",
  57. },
  58. ]
  59. assert response.status_code == 200, response.content
  60. assert sorted(response.data["data"], key=lambda v: v["id"]) == expected
  61. def test_rage_clicks(self):
  62. event_id_a = "a" * 32
  63. _, group_info = self.process_occurrence(
  64. **{
  65. "project_id": self.project.id,
  66. "event_id": event_id_a,
  67. "fingerprint": ["c" * 32],
  68. "issue_title": "Rage Click",
  69. "type": ReplayRageClickType.type_id,
  70. "detection_time": datetime.now().timestamp(),
  71. "level": "info",
  72. },
  73. event_data={
  74. "platform": "javascript",
  75. "timestamp": self.min_ago.isoformat(),
  76. "received": self.min_ago.isoformat(),
  77. },
  78. )
  79. query = {"query": f"id:[{event_id_a}]", "dataset": "issuePlatform"}
  80. with self.feature(self.features):
  81. response = self.client.get(self.url, query, format="json")
  82. assert group_info is not None
  83. expected = [
  84. {
  85. "error.type": "",
  86. "error.value": "",
  87. "id": event_id_a,
  88. "issue.id": group_info.group.id,
  89. "issue": group_info.group.qualified_short_id,
  90. "project.name": self.project.slug,
  91. "timestamp": self.min_ago.isoformat(),
  92. "title": "Rage Click",
  93. }
  94. ]
  95. assert response.status_code == 200, response.content
  96. assert sorted(response.data["data"], key=lambda v: v["id"]) == expected