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, Event class ThreadsModerationTests(AuthenticatedUserTestCase): def setUp(self): super(ThreadsModerationTests, self).setUp() self.forum = Forum.objects.all_forums().filter(role="forum")[:1][0] self.thread = testutils.post_thread(self.forum) def reload_thread(self): self.thread = Thread.objects.get(pk=self.thread.pk) def test_announce_thread(self): """announce_thread makes thread announcement""" self.assertEqual(self.thread.weight, 0) self.assertTrue(moderation.announce_thread(self.user, self.thread)) self.reload_thread() self.assertEqual(self.thread.weight, 2) self.assertTrue(self.thread.has_events) event = self.thread.event_set.last() self.assertEqual(event.icon, "star") self.assertIn("changed thread to announcement.", event.message) def test_announce_invalid_thread(self): """announce_thread returns false for already announced thread""" self.thread.weight = 2 self.assertFalse(moderation.announce_thread(self.user, self.thread)) self.assertEqual(self.thread.weight, 2) def test_pin_thread(self): """pin_thread makes thread pinned""" self.assertEqual(self.thread.weight, 0) self.assertTrue(moderation.pin_thread(self.user, self.thread)) self.reload_thread() self.assertEqual(self.thread.weight, 1) self.assertTrue(self.thread.has_events) event = self.thread.event_set.last() self.assertEqual(event.icon, "bookmark") self.assertIn("pinned thread.", event.message) def test_pin_invalid_thread(self): """pin_thread returns false for already pinned thread""" self.thread.weight = 1 self.assertFalse(moderation.pin_thread(self.user, self.thread)) self.assertEqual(self.thread.weight, 1) def test_reset_thread(self): """reset_thread defaults thread weight""" moderation.pin_thread(self.user, self.thread) self.assertEqual(self.thread.weight, 1) self.assertTrue(moderation.reset_thread(self.user, self.thread)) self.reload_thread() self.assertEqual(self.thread.weight, 0) self.assertTrue(self.thread.has_events) event = self.thread.event_set.last() self.assertIn("unpinned thread.", event.message) self.assertEqual(event.icon, "circle") def test_reset_invalid_thread(self): """reset_thread returns false for already default thread""" self.assertFalse(moderation.reset_thread(self.user, self.thread)) self.assertEqual(self.thread.weight, 0)