test_merge.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. from typing import Any
  2. from unittest.mock import patch
  3. import pytest
  4. import rest_framework
  5. from sentry.issues.grouptype import PerformanceNPlusOneGroupType
  6. from sentry.issues.merge import handle_merge
  7. from sentry.models.activity import Activity
  8. from sentry.models.group import Group, GroupStatus
  9. from sentry.models.groupinbox import GroupInboxReason, add_group_to_inbox
  10. from sentry.testutils.cases import TestCase
  11. from sentry.testutils.skips import requires_snuba
  12. from sentry.types.activity import ActivityType
  13. pytestmark = [requires_snuba]
  14. class HandleIssueMergeTest(TestCase):
  15. def setUp(self) -> None:
  16. self.groups = []
  17. self.project_lookup = {self.project.id: self.project}
  18. for _ in range(5):
  19. group = self.create_group()
  20. add_group_to_inbox(group, GroupInboxReason.NEW)
  21. self.groups.append(group)
  22. @patch("sentry.tasks.merge.merge_groups.delay")
  23. def test_handle_merge(self, merge_groups: Any) -> None:
  24. Activity.objects.all().delete()
  25. merge = handle_merge(self.groups, self.project_lookup, self.user)
  26. statuses = Group.objects.filter(id__in=[g.id for g in self.groups]).values_list("status")
  27. statuses = [status[0] for status in statuses]
  28. assert statuses.count(GroupStatus.PENDING_MERGE) == 4
  29. assert merge_groups.called
  30. primary_group = self.groups[-1]
  31. assert Activity.objects.filter(type=ActivityType.MERGE.value, group=primary_group)
  32. assert merge["parent"] == str(primary_group.id)
  33. assert len(merge["children"]) == 4
  34. def test_handle_merge_performance_issues(self) -> None:
  35. group = Group.objects.create(
  36. project=self.project, type=PerformanceNPlusOneGroupType.type_id
  37. )
  38. add_group_to_inbox(group, GroupInboxReason.NEW)
  39. self.groups.append(group)
  40. with pytest.raises(rest_framework.exceptions.ValidationError) as e:
  41. handle_merge(self.groups, self.project_lookup, self.user)
  42. assert e.match("Only error issues can be merged.")