|
@@ -0,0 +1,100 @@
|
|
|
|
+from misago.forums.models import Forum
|
|
|
|
+from misago.users.testutils import AuthenticatedUserTestCase
|
|
|
|
+
|
|
|
|
+from misago.threads import moderation, testutils
|
|
|
|
+from misago.threads.models import Thread, Post
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+class PostsModerationTests(AuthenticatedUserTestCase):
|
|
|
|
+ def setUp(self):
|
|
|
|
+ super(PostsModerationTests, self).setUp()
|
|
|
|
+
|
|
|
|
+ self.forum = Forum.objects.all_forums().filter(role="forum")[:1][0]
|
|
|
|
+ self.thread = testutils.post_thread(self.forum)
|
|
|
|
+ self.post = testutils.reply_thread(self.thread)
|
|
|
|
+
|
|
|
|
+ def reload_thread(self):
|
|
|
|
+ self.thread = Thread.objects.get(pk=self.thread.pk)
|
|
|
|
+
|
|
|
|
+ def reload_post(self):
|
|
|
|
+ self.post = Post.objects.get(pk=self.post.pk)
|
|
|
|
+
|
|
|
|
+ def test_hide_original_post(self):
|
|
|
|
+ """hide_post fails for first post in thread"""
|
|
|
|
+ with self.assertRaises(moderation.ModerationError):
|
|
|
|
+ moderation.hide_post(self.user, self.thread.first_post)
|
|
|
|
+
|
|
|
|
+ def test_protect_post(self):
|
|
|
|
+ """protect_post protects post"""
|
|
|
|
+ self.assertFalse(self.post.is_protected)
|
|
|
|
+ self.assertTrue(moderation.protect_post(self.user, self.post))
|
|
|
|
+
|
|
|
|
+ self.reload_post()
|
|
|
|
+ self.assertTrue(self.post.is_protected)
|
|
|
|
+
|
|
|
|
+ def test_protect_protected_post(self):
|
|
|
|
+ """protect_post fails to protect protected post gracefully"""
|
|
|
|
+ self.post.is_protected = True
|
|
|
|
+ self.assertFalse(moderation.protect_post(self.user, self.post))
|
|
|
|
+
|
|
|
|
+ def test_unprotect_post(self):
|
|
|
|
+ """unprotect_post releases post protection"""
|
|
|
|
+ self.post.is_protected = True
|
|
|
|
+ self.assertTrue(moderation.unprotect_post(self.user, self.post))
|
|
|
|
+
|
|
|
|
+ self.reload_post()
|
|
|
|
+ self.assertFalse(self.post.is_protected)
|
|
|
|
+
|
|
|
|
+ def test_unprotect_protected_post(self):
|
|
|
|
+ """unprotect_post fails to unprotect unprotected post gracefully"""
|
|
|
|
+ self.assertFalse(moderation.unprotect_post(self.user, self.post))
|
|
|
|
+
|
|
|
|
+ def test_hide_post(self):
|
|
|
|
+ """hide_post hides post"""
|
|
|
|
+ self.assertFalse(self.post.is_hidden)
|
|
|
|
+ self.assertTrue(moderation.hide_post(self.user, self.post))
|
|
|
|
+
|
|
|
|
+ self.reload_post()
|
|
|
|
+ self.assertTrue(self.post.is_hidden)
|
|
|
|
+ self.assertEqual(self.post.hidden_by, self.user)
|
|
|
|
+ self.assertEqual(self.post.hidden_by_name, self.user.username)
|
|
|
|
+ self.assertEqual(self.post.hidden_by_slug, self.user.slug)
|
|
|
|
+ self.assertIsNotNone(self.post.hidden_on)
|
|
|
|
+
|
|
|
|
+ def test_hide_hidden_post(self):
|
|
|
|
+ """hide_post fails to hide hidden post gracefully"""
|
|
|
|
+ self.post.is_hidden = True
|
|
|
|
+ self.assertFalse(moderation.hide_post(self.user, self.post))
|
|
|
|
+
|
|
|
|
+ def test_unhide_original_post(self):
|
|
|
|
+ """unhide_post fails for first post in thread"""
|
|
|
|
+ with self.assertRaises(moderation.ModerationError):
|
|
|
|
+ moderation.unhide_post(self.user, self.thread.first_post)
|
|
|
|
+
|
|
|
|
+ def test_unhide_post(self):
|
|
|
|
+ """unhide_post reveals post"""
|
|
|
|
+ self.post.is_hidden = True
|
|
|
|
+
|
|
|
|
+ self.assertTrue(self.post.is_hidden)
|
|
|
|
+ self.assertTrue(moderation.unhide_post(self.user, self.post))
|
|
|
|
+
|
|
|
|
+ self.reload_post()
|
|
|
|
+ self.assertFalse(self.post.is_hidden)
|
|
|
|
+
|
|
|
|
+ def test_unhide_visible_post(self):
|
|
|
|
+ """unhide_post fails to reveal visible post gracefully"""
|
|
|
|
+ self.assertFalse(moderation.unhide_post(self.user, self.post))
|
|
|
|
+
|
|
|
|
+ def test_delete_original_post(self):
|
|
|
|
+ """delete_post fails for first post in thread"""
|
|
|
|
+ with self.assertRaises(moderation.ModerationError):
|
|
|
|
+ moderation.delete_post(self.user, self.thread.first_post)
|
|
|
|
+
|
|
|
|
+ def test_delete_post(self):
|
|
|
|
+ """delete_post deletes thread post"""
|
|
|
|
+ self.assertTrue(moderation.delete_post(self.user, self.post))
|
|
|
|
+ with self.assertRaises(Post.DoesNotExist):
|
|
|
|
+ self.reload_post()
|
|
|
|
+
|
|
|
|
+ self.thread.synchronize()
|
|
|
|
+ self.assertEqual(self.thread.replies, 0)
|