123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- from django.core.management import call_command
- from django.utils import timezone, unittest
- from django.test.client import RequestFactory
- from misago.settings.models import Setting
- from misago.forums.models import Forum
- from misago.sessions.sessions import SessionMock
- from misago.threads.models import Thread, Post, Change, Checkpoint
- from misago.threads.testutils import create_thread, create_post
- from misago.users.models import User
- class DeleteThreadTestCase(unittest.TestCase):
- def setUp(self):
- call_command('loaddata', quiet=True)
- self.factory = RequestFactory()
-
- Post.objects.all().delete()
- Thread.objects.all().delete()
- User.objects.all().delete()
- self.user = User.objects.create_user('Neddart', 'ned@test.com', 'pass')
- self.user_alt = User.objects.create_user('Robert', 'rob@test.com', 'pass')
- self.forum = Forum.objects.get(id=1)
-
- self.thread = create_thread(self.forum)
- self.post = create_post(self.thread, self.user)
-
- def make_request(self, user=None):
- request = self.factory.get('/customer/details')
- request.session = SessionMock()
- request.user = user
- request.META['HTTP_USER_AGENT'] = 'TestAgent'
- return request
-
- def test_deletion_owned(self):
- """Check if user content delete results in correct deletion of thread"""
- # Assert that test has been correctly initialised
- self.assertEqual(Thread.objects.count(), 1)
- self.assertEqual(Post.objects.count(), 1)
-
- # Run test
- self.user.delete_content()
- self.assertEqual(Thread.objects.count(), 0)
- self.assertEqual(Post.objects.count(), 0)
-
- def test_deletion_other(self):
- """Check if user content delete results in correct deletion of post"""
- # Create second post
- self.post = create_post(self.thread, self.user_alt)
-
- # Assert that test has been correctly initialised
- self.assertEqual(Thread.objects.count(), 1)
- self.assertEqual(Post.objects.count(), 2)
-
- # Run test
- self.user_alt.delete_content()
- self.assertEqual(Thread.objects.count(), 1)
- self.assertEqual(Post.objects.count(), 1)
-
- def test_deletion_owned_other(self):
- """Check if user content delete results in correct deletion of thread and posts"""
- # Create second post
- self.post = create_post(self.thread, self.user_alt)
-
- # Assert that test has been correctly initialised
- self.assertEqual(Thread.objects.count(), 1)
- self.assertEqual(Post.objects.count(), 2)
-
- # Run test
- self.user.delete_content()
- self.assertEqual(Thread.objects.count(), 0)
- self.assertEqual(Post.objects.count(), 0)
-
- def test_deletion_checkpoints(self):
- """Check if user content delete results in correct update of thread checkpoints"""
- # Create an instance of a GET request.
- request = self.make_request(self.user_alt)
-
- # Create second and third post
- self.post = create_post(self.thread, self.user)
- self.post_sec = create_post(self.thread, self.user_alt)
- self.post_sec.set_checkpoint(request, 'locked')
- self.post_sec.save(force_update=True)
-
- # Assert that test has been correctly initialised
- self.assertEqual(Thread.objects.count(), 1)
- self.assertEqual(Post.objects.count(), 3)
-
- # Run test
- self.user_alt.delete_content()
- self.assertEqual(Thread.objects.count(), 1)
- self.assertEqual(Post.objects.count(), 2)
- self.assertEqual(Checkpoint.objects.count(), 1)
- self.assertEqual(Post.objects.filter(checkpoints=True).count(), 1)
- self.assertEqual(Post.objects.get(id=self.post.pk).checkpoints, True)
- self.assertEqual(Post.objects.get(id=self.post.pk).checkpoint_set.count(), 1)
-
- def test_threads_merge(self):
- """Check if threads are correctly merged"""
- # Create second thread
- self.thread_b = create_thread(self.forum)
- self.post_b = create_post(self.thread_b, self.user)
-
- # Merge threads
- self.thread_b.merge_with(self.thread, 1)
- self.thread_b.delete()
- self.thread.merges += 1
- self.thread.save(force_update=True)
-
- # See if merger was correct
- self.assertEqual(Thread.objects.count(), 1)
- self.assertEqual(Post.objects.count(), 2)
- last_post = Post.objects.order_by('-id')[:1][0]
- self.assertEqual(last_post.thread_id, self.thread.pk)
- self.assertEqual(last_post.merge, 1)
-
- # Create third thread
- self.thread_c = create_thread(self.forum)
- self.post_c = create_post(self.thread_c, self.user)
-
- # Merge first thread into third one
- self.thread.merge_with(self.thread_c, 1)
- self.thread.delete()
- # See if merger was correct
- self.assertEqual(Thread.objects.count(), 1)
- self.assertEqual(Post.objects.count(), 3)
- last_post = Post.objects.get(id=last_post.pk)
- self.assertEqual(last_post.thread_id, self.thread_c.pk)
- self.assertEqual(last_post.merge, 2)
-
- def test_threads_move_checkpoints(self):
- """Check if post_move correctly handles checkpoints"""
- # Create thread with two posts
- self.thread_b = create_thread(self.forum)
- self.post_b = create_post(self.thread_b, self.user)
- self.post_c = create_post(self.thread_b, self.user)
-
- # Create an instance of a GET request.
- request = self.make_request(self.user)
-
- # Add checkpoint to post c
- self.post_c.set_checkpoint(request, 'locked')
- self.post_c.save(force_update=True)
-
- # Move post and sync threads
- self.post_c.move_to(self.thread)
- self.post_c.save(force_update=True)
- self.thread.sync()
- self.thread.save(force_update=True)
- self.thread_b.sync()
- self.thread_b.save(force_update=True)
-
- # See threads and post counters
- self.assertEqual(Thread.objects.count(), 2)
- self.assertEqual(Post.objects.count(), 3)
-
- # Refresh post b
- self.post_b = Post.objects.get(id=self.post_b.pk)
-
- # Check if post b has post's c checkpoints
- self.assertEqual(self.post_b.checkpoints, True)
- self.assertEqual(self.post_b.checkpoint_set.count(), 1)
|