test_deletion.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. from datetime import timedelta
  2. from django.utils import timezone
  3. from sentry.db.deletion import BulkDeleteQuery
  4. from sentry.models import Group, Project
  5. from sentry.testutils import TestCase, TransactionTestCase
  6. class BulkDeleteQueryTest(TestCase):
  7. def test_project_restriction(self):
  8. project1 = self.create_project()
  9. group1_1 = self.create_group(project1)
  10. group1_2 = self.create_group(project1)
  11. project2 = self.create_project()
  12. group2_1 = self.create_group(project2)
  13. group2_2 = self.create_group(project2)
  14. BulkDeleteQuery(model=Group, project_id=project1.id).execute()
  15. assert Project.objects.filter(id=project1.id).exists()
  16. assert Project.objects.filter(id=project2.id).exists()
  17. assert Group.objects.filter(id=group2_1.id).exists()
  18. assert Group.objects.filter(id=group2_2.id).exists()
  19. assert not Group.objects.filter(id=group1_1.id).exists()
  20. assert not Group.objects.filter(id=group1_2.id).exists()
  21. def test_datetime_restriction(self):
  22. now = timezone.now()
  23. project1 = self.create_project()
  24. group1_1 = self.create_group(project1, last_seen=now - timedelta(days=1))
  25. group1_2 = self.create_group(project1, last_seen=now - timedelta(days=1))
  26. group1_3 = self.create_group(project1, last_seen=now)
  27. BulkDeleteQuery(model=Group, dtfield="last_seen", days=1).execute()
  28. assert not Group.objects.filter(id=group1_1.id).exists()
  29. assert not Group.objects.filter(id=group1_2.id).exists()
  30. assert Group.objects.filter(id=group1_3.id).exists()
  31. class BulkDeleteQueryIteratorTestCase(TransactionTestCase):
  32. def test_iteration(self):
  33. target_project = self.project
  34. expected_group_ids = {self.create_group().id for i in range(2)}
  35. other_project = self.create_project()
  36. self.create_group(other_project)
  37. self.create_group(other_project)
  38. iterator = BulkDeleteQuery(
  39. model=Group,
  40. project_id=target_project.id,
  41. dtfield="last_seen",
  42. order_by="last_seen",
  43. days=0,
  44. ).iterator(1)
  45. results = set()
  46. for chunk in iterator:
  47. results.update(chunk)
  48. assert results == expected_group_ids