tests.py 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. from django.core.management import call_command
  2. from django.utils import timezone, unittest
  3. from django.test.client import RequestFactory
  4. from misago.settings.models import Setting
  5. from misago.forums.models import Forum
  6. from misago.sessions.sessions import SessionMock
  7. from misago.threads.models import Thread, Post, Change, Checkpoint
  8. from misago.threads.testutils import create_thread, create_post
  9. from misago.users.models import User
  10. class DeleteThreadTestCase(unittest.TestCase):
  11. def setUp(self):
  12. call_command('loaddata', quiet=True)
  13. self.factory = RequestFactory()
  14. Post.objects.all().delete()
  15. Thread.objects.all().delete()
  16. User.objects.all().delete()
  17. self.user = User.objects.create_user('Neddart', 'ned@test.com', 'pass')
  18. self.user_alt = User.objects.create_user('Robert', 'rob@test.com', 'pass')
  19. self.forum = Forum.objects.get(id=1)
  20. self.thread = create_thread(self.forum)
  21. self.post = create_post(self.thread, self.user)
  22. def make_request(self, user=None):
  23. request = self.factory.get('/customer/details')
  24. request.session = SessionMock()
  25. request.user = user
  26. request.META['HTTP_USER_AGENT'] = 'TestAgent'
  27. return request
  28. def test_deletion_owned(self):
  29. """Check if user content delete results in correct deletion of thread"""
  30. # Assert that test has been correctly initialised
  31. self.assertEqual(Thread.objects.count(), 1)
  32. self.assertEqual(Post.objects.count(), 1)
  33. # Run test
  34. self.user.delete_content()
  35. self.assertEqual(Thread.objects.count(), 0)
  36. self.assertEqual(Post.objects.count(), 0)
  37. def test_deletion_other(self):
  38. """Check if user content delete results in correct deletion of post"""
  39. # Create second post
  40. self.post = create_post(self.thread, self.user_alt)
  41. # Assert that test has been correctly initialised
  42. self.assertEqual(Thread.objects.count(), 1)
  43. self.assertEqual(Post.objects.count(), 2)
  44. # Run test
  45. self.user_alt.delete_content()
  46. self.assertEqual(Thread.objects.count(), 1)
  47. self.assertEqual(Post.objects.count(), 1)
  48. def test_deletion_owned_other(self):
  49. """Check if user content delete results in correct deletion of thread and posts"""
  50. # Create second post
  51. self.post = create_post(self.thread, self.user_alt)
  52. # Assert that test has been correctly initialised
  53. self.assertEqual(Thread.objects.count(), 1)
  54. self.assertEqual(Post.objects.count(), 2)
  55. # Run test
  56. self.user.delete_content()
  57. self.assertEqual(Thread.objects.count(), 0)
  58. self.assertEqual(Post.objects.count(), 0)
  59. def test_deletion_checkpoints(self):
  60. """Check if user content delete results in correct update of thread checkpoints"""
  61. # Create an instance of a GET request.
  62. request = self.make_request(self.user_alt)
  63. # Create second and third post
  64. self.post = create_post(self.thread, self.user)
  65. self.post_sec = create_post(self.thread, self.user_alt)
  66. self.post_sec.set_checkpoint(request, 'locked')
  67. self.post_sec.save(force_update=True)
  68. # Assert that test has been correctly initialised
  69. self.assertEqual(Thread.objects.count(), 1)
  70. self.assertEqual(Post.objects.count(), 3)
  71. # Run test
  72. self.user_alt.delete_content()
  73. self.assertEqual(Thread.objects.count(), 1)
  74. self.assertEqual(Post.objects.count(), 2)
  75. self.assertEqual(Checkpoint.objects.count(), 1)
  76. self.assertEqual(Post.objects.filter(checkpoints=True).count(), 1)
  77. self.assertEqual(Post.objects.get(id=self.post.pk).checkpoints, True)
  78. self.assertEqual(Post.objects.get(id=self.post.pk).checkpoint_set.count(), 1)
  79. def test_threads_merge(self):
  80. """Check if threads are correctly merged"""
  81. # Create second thread
  82. self.thread_b = create_thread(self.forum)
  83. self.post_b = create_post(self.thread_b, self.user)
  84. # Merge threads
  85. self.thread_b.merge_with(self.thread, 1)
  86. self.thread_b.delete()
  87. self.thread.merges += 1
  88. self.thread.save(force_update=True)
  89. # See if merger was correct
  90. self.assertEqual(Thread.objects.count(), 1)
  91. self.assertEqual(Post.objects.count(), 2)
  92. last_post = Post.objects.order_by('-id')[:1][0]
  93. self.assertEqual(last_post.thread_id, self.thread.pk)
  94. self.assertEqual(last_post.merge, 1)
  95. # Create third thread
  96. self.thread_c = create_thread(self.forum)
  97. self.post_c = create_post(self.thread_c, self.user)
  98. # Merge first thread into third one
  99. self.thread.merge_with(self.thread_c, 1)
  100. self.thread.delete()
  101. # See if merger was correct
  102. self.assertEqual(Thread.objects.count(), 1)
  103. self.assertEqual(Post.objects.count(), 3)
  104. last_post = Post.objects.get(id=last_post.pk)
  105. self.assertEqual(last_post.thread_id, self.thread_c.pk)
  106. self.assertEqual(last_post.merge, 2)
  107. def test_threads_move_checkpoints(self):
  108. """Check if post_move correctly handles checkpoints"""
  109. # Create thread with two posts
  110. self.thread_b = create_thread(self.forum)
  111. self.post_b = create_post(self.thread_b, self.user)
  112. self.post_c = create_post(self.thread_b, self.user)
  113. # Create an instance of a GET request.
  114. request = self.make_request(self.user)
  115. # Add checkpoint to post c
  116. self.post_c.set_checkpoint(request, 'locked')
  117. self.post_c.save(force_update=True)
  118. # Move post and sync threads
  119. self.post_c.move_to(self.thread)
  120. self.post_c.save(force_update=True)
  121. self.thread.sync()
  122. self.thread.save(force_update=True)
  123. self.thread_b.sync()
  124. self.thread_b.save(force_update=True)
  125. # See threads and post counters
  126. self.assertEqual(Thread.objects.count(), 2)
  127. self.assertEqual(Post.objects.count(), 3)
  128. # Refresh post b
  129. self.post_b = Post.objects.get(id=self.post_b.pk)
  130. # Check if post b has post's c checkpoints
  131. self.assertEqual(self.post_b.checkpoints, True)
  132. self.assertEqual(self.post_b.checkpoint_set.count(), 1)