test_organization_group_index.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. from __future__ import absolute_import
  2. import pytz
  3. from datetime import datetime
  4. from django.utils import timezone
  5. from sentry.testutils import AcceptanceTestCase, SnubaTestCase
  6. from sentry.testutils.helpers.datetime import iso_format, before_now
  7. from tests.acceptance.page_objects.issue_list import IssueListPage
  8. from sentry.utils.compat.mock import patch
  9. event_time = before_now(days=3).replace(tzinfo=pytz.utc)
  10. class OrganizationGroupIndexTest(AcceptanceTestCase, SnubaTestCase):
  11. def setUp(self):
  12. super(OrganizationGroupIndexTest, self).setUp()
  13. self.user = self.create_user("foo@example.com")
  14. self.org = self.create_organization(owner=self.user, name="Rowdy Tiger")
  15. self.team = self.create_team(
  16. organization=self.org, name="Mariachi Band", members=[self.user]
  17. )
  18. self.project = self.create_project(organization=self.org, teams=[self.team], name="Bengal")
  19. self.other_project = self.create_project(
  20. organization=self.org, teams=[self.team], name="Sumatra"
  21. )
  22. self.login_as(self.user)
  23. self.page = IssueListPage(self.browser, self.client)
  24. self.dismiss_assistant()
  25. def create_issues(self):
  26. self.store_event(
  27. data={
  28. "event_id": "a" * 32,
  29. "message": "oh no",
  30. "timestamp": iso_format(event_time),
  31. "fingerprint": ["group-1"],
  32. },
  33. project_id=self.project.id,
  34. )
  35. self.store_event(
  36. data={
  37. "event_id": "b" * 32,
  38. "message": "oh snap",
  39. "timestamp": iso_format(event_time),
  40. "fingerprint": ["group-2"],
  41. },
  42. project_id=self.project.id,
  43. )
  44. def test_with_onboarding(self):
  45. self.project.update(first_event=None)
  46. self.page.visit_issue_list(self.org.slug)
  47. self.browser.wait_until_test_id("awaiting-events")
  48. self.browser.snapshot("organization issues onboarding")
  49. def test_with_no_results(self):
  50. self.project.update(first_event=timezone.now())
  51. self.page.visit_issue_list(self.org.slug, query="?query=assigned%3Ame")
  52. self.browser.wait_until_test_id("empty-state")
  53. self.browser.snapshot("organization issues no results")
  54. @patch("django.utils.timezone.now")
  55. def test_with_results(self, mock_now):
  56. mock_now.return_value = datetime.utcnow().replace(tzinfo=pytz.utc)
  57. self.create_issues()
  58. self.page.visit_issue_list(self.org.slug)
  59. self.page.wait_for_stream()
  60. self.browser.snapshot("organization issues with issues")
  61. groups = self.browser.elements('[data-test-id="event-issue-header"]')
  62. assert len(groups) == 2
  63. assert "oh snap" in groups[0].text
  64. assert "oh no" in groups[1].text
  65. @patch("django.utils.timezone.now")
  66. def test_resolve_issues(self, mock_now):
  67. mock_now.return_value = datetime.utcnow().replace(tzinfo=pytz.utc)
  68. self.create_issues()
  69. self.page.visit_issue_list(self.org.slug)
  70. self.page.wait_for_stream()
  71. self.page.select_issue(1)
  72. self.page.select_issue(2)
  73. self.page.resolve_issues()
  74. self.page.wait_for_resolved_issue()
  75. resolved_groups = self.page.find_resolved_issues()
  76. assert len(resolved_groups) == 2
  77. @patch("django.utils.timezone.now")
  78. def test_resolve_issues_multi_projects(self, mock_now):
  79. mock_now.return_value = datetime.utcnow().replace(tzinfo=pytz.utc)
  80. self.create_issues()
  81. with self.feature("organizations:global-views"):
  82. self.page.visit_issue_list(self.org.slug)
  83. self.page.wait_for_stream()
  84. self.page.select_issue(1)
  85. self.page.select_issue(2)
  86. self.page.resolve_issues()
  87. self.page.wait_for_resolved_issue()
  88. resolved_groups = self.page.find_resolved_issues()
  89. assert len(resolved_groups) == 2