test_chunk_queryset.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. from django.test import TestCase
  2. from misago.core.models import CacheVersion
  3. from misago.core.pgutils import chunk_queryset
  4. class ChunkQuerysetTest(TestCase):
  5. def setUp(self):
  6. # clear table
  7. CacheVersion.objects.all().delete()
  8. # create 100 items
  9. items_ids = []
  10. for _ in range(100):
  11. obj = CacheVersion.objects.create(cache='nomatter')
  12. items_ids.append(obj.id)
  13. self.items_ids = list(reversed(items_ids))
  14. def test_chunk_queryset(self):
  15. """chunk_queryset utility chunks queryset but returns all items"""
  16. chunked_ids = []
  17. with self.assertNumQueries(21):
  18. queryset = CacheVersion.objects.all()
  19. for obj in chunk_queryset(queryset, chunk_size=5):
  20. chunked_ids.append(obj.id)
  21. self.assertEqual(chunked_ids, self.items_ids)
  22. def test_chunk_shrinking_queryset(self):
  23. """chunk_queryset utility chunks queryset in delete action"""
  24. with self.assertNumQueries(121):
  25. queryset = CacheVersion.objects.all()
  26. for obj in chunk_queryset(queryset, chunk_size=5):
  27. obj.delete()
  28. self.assertEqual(CacheVersion.objects.count(), 0)