test_status_change.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. from __future__ import annotations
  2. from typing import Any
  3. from unittest.mock import patch
  4. from sentry.issues.status_change import handle_status_update
  5. from sentry.models.activity import Activity
  6. from sentry.models.group import GroupStatus
  7. from sentry.models.grouphistory import GroupHistory, GroupHistoryStatus
  8. from sentry.testutils.cases import TestCase
  9. from sentry.types.activity import ActivityType
  10. from sentry.types.group import GroupSubStatus
  11. class HandleStatusChangeTest(TestCase):
  12. def create_issue(self, status: int, substatus: int | None = None) -> None:
  13. self.group = self.create_group(status=status)
  14. self.group_list = [self.group]
  15. self.group_ids = [self.group]
  16. self.projects = [self.group.project]
  17. self.project_lookup = {self.project.id: self.project}
  18. @patch("sentry.signals.issue_unignored.send_robust")
  19. def test_unresolve_ignored_issue(self, issue_unignored: Any) -> None:
  20. self.create_issue(GroupStatus.IGNORED)
  21. handle_status_update(
  22. self.group_list,
  23. self.projects,
  24. self.project_lookup,
  25. acting_user=self.user,
  26. is_bulk=True,
  27. status_details={},
  28. new_status=GroupStatus.UNRESOLVED,
  29. new_substatus=GroupSubStatus.ONGOING,
  30. sender=self,
  31. activity_type=None,
  32. )
  33. assert issue_unignored.called
  34. activity = Activity.objects.filter(
  35. group=self.group, type=ActivityType.SET_UNRESOLVED.value
  36. ).first()
  37. assert activity.data == {}
  38. assert GroupHistory.objects.filter(
  39. group=self.group, status=GroupHistoryStatus.UNRESOLVED
  40. ).exists()
  41. @patch("sentry.signals.issue_unresolved.send_robust")
  42. def test_unresolve_resolved_issue(self, issue_unresolved: Any) -> None:
  43. self.create_issue(GroupStatus.RESOLVED)
  44. handle_status_update(
  45. self.group_list,
  46. self.projects,
  47. self.project_lookup,
  48. acting_user=self.user,
  49. new_status=GroupStatus.UNRESOLVED,
  50. new_substatus=GroupSubStatus.ONGOING,
  51. is_bulk=True,
  52. status_details={},
  53. sender=self,
  54. activity_type=None,
  55. )
  56. assert issue_unresolved.called
  57. activity = Activity.objects.filter(
  58. group=self.group, type=ActivityType.SET_UNRESOLVED.value
  59. ).first()
  60. assert activity.data == {}
  61. assert GroupHistory.objects.filter(
  62. group=self.group, status=GroupHistoryStatus.UNRESOLVED
  63. ).exists()
  64. @patch("sentry.signals.issue_ignored.send_robust")
  65. def test_ignore_new_issue(self, issue_ignored: Any) -> None:
  66. self.create_issue(GroupStatus.UNRESOLVED)
  67. handle_status_update(
  68. self.group_list,
  69. self.projects,
  70. self.project_lookup,
  71. acting_user=self.user,
  72. new_status=GroupStatus.IGNORED,
  73. new_substatus=None,
  74. is_bulk=True,
  75. status_details={"ignoreDuration": 30},
  76. sender=self,
  77. activity_type=None,
  78. )
  79. assert issue_ignored.called
  80. activity = Activity.objects.filter(
  81. group=self.group, type=ActivityType.SET_IGNORED.value
  82. ).first()
  83. assert activity.data.get("ignoreDuration") == 30
  84. assert GroupHistory.objects.filter(
  85. group=self.group, status=GroupHistoryStatus.IGNORED
  86. ).exists()
  87. @patch("sentry.signals.issue_ignored.send_robust")
  88. def test_ignore_until_escalating(self, issue_ignored: Any) -> None:
  89. self.create_issue(GroupStatus.UNRESOLVED)
  90. handle_status_update(
  91. self.group_list,
  92. self.projects,
  93. self.project_lookup,
  94. acting_user=self.user,
  95. new_status=GroupStatus.IGNORED,
  96. new_substatus=None,
  97. is_bulk=True,
  98. status_details={"ignoreUntilEscalating": True},
  99. sender=self,
  100. activity_type=None,
  101. )
  102. assert issue_ignored.called
  103. activity = Activity.objects.filter(
  104. group=self.group, type=ActivityType.SET_IGNORED.value
  105. ).first()
  106. assert activity.data.get("ignoreUntilEscalating")
  107. assert GroupHistory.objects.filter(
  108. group=self.group, status=GroupHistoryStatus.IGNORED
  109. ).exists()