PageRenderTime 34ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 1ms

/src/djapian/tests/commiter.py

http://djapian.googlecode.com/
Python | 98 lines | 79 code | 18 blank | 1 comment | 6 complexity | ec9d47465c8389b9cf68a751f0ee303e MD5 | raw file
  1. from django.core.paginator import Paginator
  2. from djapian.tests.utils import BaseTestCase, Entry, Person
  3. from djapian.utils.commiter import Commiter
  4. class CommiterTest(BaseTestCase):
  5. num_entries = 30
  6. per_page = 10
  7. num_pages = num_entries / per_page
  8. def test_concrete_commiter_page(self):
  9. def _begin():
  10. return 'begin'
  11. def _commit():
  12. return 'commit'
  13. def _rollback():
  14. return 'rollback'
  15. commiter = Commiter.create(False)(
  16. _begin,
  17. _commit,
  18. _rollback
  19. )
  20. self.assertEqual(commiter.begin_object(), None)
  21. self.assertEqual(commiter.commit_object(), None)
  22. self.assertEqual(commiter.cancel_object(), None)
  23. self.assertEqual(commiter.begin_page(), 'begin')
  24. self.assertEqual(commiter.commit_page(), 'commit')
  25. self.assertEqual(commiter.cancel_page(), 'rollback')
  26. def test_concrete_commiter_object(self):
  27. def _begin():
  28. return 'begin'
  29. def _commit():
  30. return 'commit'
  31. def _rollback():
  32. return 'rollback'
  33. commiter = Commiter.create(True)(
  34. _begin,
  35. _commit,
  36. _rollback
  37. )
  38. self.assertEqual(commiter.begin_page(), None)
  39. self.assertEqual(commiter.commit_page(), None)
  40. self.assertEqual(commiter.cancel_page(), None)
  41. self.assertEqual(commiter.begin_object(), 'begin')
  42. self.assertEqual(commiter.commit_object(), 'commit')
  43. self.assertEqual(commiter.cancel_object(), 'rollback')
  44. def test_bulk_delete(self):
  45. p = Person.objects.create(name="Alex")
  46. for i in range(self.num_entries):
  47. Entry.objects.create(
  48. author=p,
  49. title="Entry with number %s" % i,
  50. text="foobar " * i
  51. )
  52. Entry.indexer.update()
  53. result = Entry.indexer.search("title:number")
  54. database = Entry.indexer._db.open(write=True)
  55. commiter = Commiter.create(False)(
  56. database.begin_transaction,
  57. database.commit_transaction,
  58. database.cancel_transaction
  59. )
  60. result_count = result.count()
  61. paginator = Paginator(result, self.per_page)
  62. self.assertEqual(paginator.num_pages, self.num_pages)
  63. page = paginator.page(2)
  64. commiter.begin_page()
  65. try:
  66. for obj in page.object_list:
  67. commiter.begin_object()
  68. try:
  69. Entry.indexer.delete(obj.pk, database=database)
  70. commiter.commit_object()
  71. except Exception:
  72. commiter.cancel_object()
  73. raise
  74. commiter.commit_page()
  75. except Exception:
  76. commiter.cancel_page()
  77. raise
  78. # database.commit() if hasattr(database, 'commit') else database.flush()
  79. self.assertEqual(Entry.indexer.search("title:number").count(),
  80. result_count - self.per_page)