test_issue_details.py 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. from __future__ import absolute_import
  2. from datetime import datetime
  3. from django.utils import timezone
  4. from sentry.testutils import AcceptanceTestCase
  5. from sentry.utils.samples import create_sample_event
  6. class IssueDetailsTest(AcceptanceTestCase):
  7. def setUp(self):
  8. super(IssueDetailsTest, self).setUp()
  9. self.user = self.create_user('foo@example.com')
  10. self.org = self.create_organization(owner=self.user, name='Rowdy Tiger')
  11. self.team = self.create_team(organization=self.org, name='Mariachi Band')
  12. self.project = self.create_project(
  13. organization=self.org,
  14. teams=[self.team],
  15. name='Bengal',
  16. )
  17. self.login_as(self.user)
  18. def create_sample_event(self, platform, default=None, sample_name=None):
  19. event = create_sample_event(
  20. project=self.project,
  21. platform=platform,
  22. default=default,
  23. sample_name=sample_name,
  24. event_id='d964fdbd649a4cf8bfc35d18082b6b0e'
  25. )
  26. event.group.update(
  27. first_seen=datetime(2015, 8, 13, 3, 8, 25, tzinfo=timezone.utc),
  28. last_seen=datetime(2016, 1, 13, 3, 8, 25, tzinfo=timezone.utc),
  29. )
  30. return event
  31. def test_python_event(self):
  32. event = self.create_sample_event(
  33. platform='python',
  34. )
  35. self.browser.get(
  36. u'/{}/{}/issues/{}/'.format(self.org.slug, self.project.slug, event.group.id)
  37. )
  38. self.wait_until_loaded()
  39. self.browser.snapshot('issue details python')
  40. def test_cocoa_event(self):
  41. event = self.create_sample_event(
  42. platform='cocoa',
  43. )
  44. self.browser.get(
  45. u'/{}/{}/issues/{}/'.format(self.org.slug, self.project.slug, event.group.id)
  46. )
  47. self.wait_until_loaded()
  48. self.browser.snapshot('issue details cocoa')
  49. def test_unity_event(self):
  50. event = self.create_sample_event(
  51. default='unity',
  52. platform='csharp'
  53. )
  54. self.browser.get(
  55. u'/{}/{}/issues/{}/'.format(self.org.slug, self.project.slug, event.group.id)
  56. )
  57. self.wait_until_loaded()
  58. self.browser.snapshot('issue details unity')
  59. def test_aspnetcore_event(self):
  60. event = self.create_sample_event(
  61. default='aspnetcore',
  62. platform='csharp'
  63. )
  64. self.browser.get(
  65. u'/{}/{}/issues/{}/'.format(self.org.slug, self.project.slug, event.group.id)
  66. )
  67. self.wait_until_loaded()
  68. self.browser.snapshot('issue details aspnetcore')
  69. def test_javascript_specific_event(self):
  70. event = self.create_sample_event(
  71. platform='javascript'
  72. )
  73. self.browser.get(
  74. u'/{}/{}/issues/{}/events/{}/'.format(self.org.slug,
  75. self.project.slug, event.group.id, event.id)
  76. )
  77. self.wait_until_loaded()
  78. self.browser.snapshot('issue details javascript - event details')
  79. self.browser.find_element_by_xpath("//a//code[contains(text(), 'curl')]").click()
  80. self.browser.snapshot('issue details javascript - event details - curl command')
  81. def test_rust_event(self):
  82. # TODO: This should become its own "rust" platform type
  83. event = self.create_sample_event(
  84. platform='native',
  85. sample_name='Rust',
  86. )
  87. self.browser.get(
  88. u'/{}/{}/issues/{}/'.format(self.org.slug, self.project.slug, event.group.id)
  89. )
  90. self.wait_until_loaded()
  91. self.browser.snapshot('issue details rust')
  92. def test_cordova_event(self):
  93. event = self.create_sample_event(
  94. platform='cordova'
  95. )
  96. self.browser.get(
  97. u'/{}/{}/issues/{}/'.format(self.org.slug, self.project.slug, event.group.id)
  98. )
  99. self.wait_until_loaded()
  100. self.browser.snapshot('issue details cordova')
  101. def test_stripped_event(self):
  102. event = self.create_sample_event(
  103. platform='pii'
  104. )
  105. self.browser.get(
  106. u'/{}/{}/issues/{}/'.format(self.org.slug, self.project.slug, event.group.id)
  107. )
  108. self.wait_until_loaded()
  109. self.browser.snapshot('issue details pii stripped')
  110. def test_empty_exception(self):
  111. event = self.create_sample_event(
  112. platform='empty-exception'
  113. )
  114. self.browser.get(
  115. u'/{}/{}/issues/{}/'.format(self.org.slug, self.project.slug, event.group.id)
  116. )
  117. self.wait_until_loaded()
  118. self.browser.snapshot('issue details empty exception')
  119. def test_empty_stacktrace(self):
  120. event = self.create_sample_event(
  121. platform='empty-stacktrace'
  122. )
  123. self.browser.get(
  124. u'/{}/{}/issues/{}/'.format(self.org.slug, self.project.slug, event.group.id)
  125. )
  126. self.wait_until_loaded()
  127. self.browser.snapshot('issue details empty stacktrace')
  128. def test_invalid_interfaces(self):
  129. event = self.create_sample_event(
  130. platform='invalid-interfaces'
  131. )
  132. self.browser.get(
  133. u'/{}/{}/issues/{}/'.format(self.org.slug, self.project.slug, event.group.id)
  134. )
  135. self.wait_until_loaded()
  136. self.browser.click('.errors-toggle')
  137. self.browser.wait_until('.entries > .errors ul')
  138. self.browser.snapshot('issue details invalid interfaces')
  139. def test_activity_page(self):
  140. event = self.create_sample_event(
  141. platform='python',
  142. )
  143. self.browser.get(
  144. u'/{}/{}/issues/{}/activity/'.format(
  145. self.org.slug, self.project.slug, event.group.id)
  146. )
  147. self.browser.wait_until('.activity-item')
  148. self.browser.snapshot('issue activity python')
  149. def wait_until_loaded(self):
  150. self.browser.wait_until_not('.loading-indicator')
  151. self.browser.wait_until('.entries')
  152. self.browser.wait_until('[data-test-id="linked-issues"]')
  153. self.browser.wait_until('[data-test-id="loaded-device-name"]')