test_threads_moderation.py 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. from misago.forums.models import Forum
  2. from misago.users.testutils import AuthenticatedUserTestCase
  3. from misago.threads import moderation, testutils
  4. from misago.threads.models import Label, Thread, Post, Event
  5. class ThreadsModerationTests(AuthenticatedUserTestCase):
  6. def setUp(self):
  7. super(ThreadsModerationTests, self).setUp()
  8. self.forum = Forum.objects.all_forums().filter(role="forum")[:1][0]
  9. self.thread = testutils.post_thread(self.forum)
  10. Label.objects.clear_cache()
  11. def tearDown(self):
  12. super(ThreadsModerationTests, self).tearDown()
  13. Label.objects.clear_cache()
  14. def reload_thread(self):
  15. self.thread = Thread.objects.get(pk=self.thread.pk)
  16. def test_label_thread(self):
  17. """label_thread makes thread announcement"""
  18. label = Label.objects.create(name="Label", slug="label")
  19. self.assertIsNone(self.thread.label)
  20. self.assertTrue(moderation.label_thread(self.user, self.thread, label))
  21. self.reload_thread()
  22. self.assertEqual(self.thread.label, label)
  23. self.assertTrue(self.thread.has_events)
  24. event = self.thread.event_set.last()
  25. self.assertEqual(event.icon, "tag")
  26. self.assertIn("set thread label to", event.message)
  27. def test_unlabel_thread(self):
  28. """unlabel_thread removes thread label"""
  29. label = Label.objects.create(name="Label", slug="label")
  30. self.assertTrue(moderation.label_thread(self.user, self.thread, label))
  31. self.reload_thread()
  32. self.assertTrue(moderation.unlabel_thread(self.user, self.thread))
  33. self.reload_thread()
  34. self.assertIsNone(self.thread.label)
  35. self.assertTrue(self.thread.has_events)
  36. event = self.thread.event_set.last()
  37. self.assertEqual(event.icon, "tag")
  38. self.assertIn("removed thread label.", event.message)
  39. def test_announce_thread(self):
  40. """announce_thread makes thread announcement"""
  41. self.assertEqual(self.thread.weight, 0)
  42. self.assertTrue(moderation.announce_thread(self.user, self.thread))
  43. self.reload_thread()
  44. self.assertEqual(self.thread.weight, 2)
  45. self.assertTrue(self.thread.has_events)
  46. event = self.thread.event_set.last()
  47. self.assertEqual(event.icon, "star")
  48. self.assertIn("changed thread to announcement.", event.message)
  49. def test_announce_invalid_thread(self):
  50. """announce_thread returns false for already announced thread"""
  51. self.thread.weight = 2
  52. self.assertFalse(moderation.announce_thread(self.user, self.thread))
  53. self.assertEqual(self.thread.weight, 2)
  54. def test_pin_thread(self):
  55. """pin_thread makes thread pinned"""
  56. self.assertEqual(self.thread.weight, 0)
  57. self.assertTrue(moderation.pin_thread(self.user, self.thread))
  58. self.reload_thread()
  59. self.assertEqual(self.thread.weight, 1)
  60. self.assertTrue(self.thread.has_events)
  61. event = self.thread.event_set.last()
  62. self.assertEqual(event.icon, "bookmark")
  63. self.assertIn("pinned thread.", event.message)
  64. def test_pin_invalid_thread(self):
  65. """pin_thread returns false for already pinned thread"""
  66. self.thread.weight = 1
  67. self.assertFalse(moderation.pin_thread(self.user, self.thread))
  68. self.assertEqual(self.thread.weight, 1)
  69. def test_reset_thread(self):
  70. """reset_thread defaults thread weight"""
  71. moderation.pin_thread(self.user, self.thread)
  72. self.assertEqual(self.thread.weight, 1)
  73. self.assertTrue(moderation.reset_thread(self.user, self.thread))
  74. self.reload_thread()
  75. self.assertEqual(self.thread.weight, 0)
  76. self.assertTrue(self.thread.has_events)
  77. event = self.thread.event_set.last()
  78. self.assertIn("unpinned thread.", event.message)
  79. self.assertEqual(event.icon, "circle")
  80. def test_reset_invalid_thread(self):
  81. """reset_thread returns false for already default thread"""
  82. self.assertFalse(moderation.reset_thread(self.user, self.thread))
  83. self.assertEqual(self.thread.weight, 0)
  84. def test_approve_thread(self):
  85. """approve_thread approves moderated thread"""
  86. thread = testutils.post_thread(self.forum, is_moderated=True)
  87. self.assertTrue(thread.is_moderated)
  88. self.assertTrue(thread.first_post.is_moderated)
  89. self.assertTrue(moderation.approve_thread(self.user, thread))
  90. self.reload_thread()
  91. self.assertFalse(thread.is_moderated)
  92. self.assertFalse(thread.first_post.is_moderated)
  93. self.assertTrue(thread.has_events)
  94. event = thread.event_set.last()
  95. self.assertIn("approved thread.", event.message)
  96. self.assertEqual(event.icon, "check")
  97. def test_close_thread(self):
  98. """close_thread closes thread"""
  99. self.assertFalse(self.thread.is_closed)
  100. self.assertTrue(moderation.close_thread(self.user, self.thread))
  101. self.reload_thread()
  102. self.assertTrue(self.thread.is_closed)
  103. self.assertTrue(self.thread.has_events)
  104. event = self.thread.event_set.last()
  105. self.assertIn("closed thread.", event.message)
  106. self.assertEqual(event.icon, "lock")
  107. def test_close_invalid_thread(self):
  108. """close_thread fails gracefully for opened thread"""
  109. moderation.close_thread(self.user, self.thread)
  110. self.reload_thread()
  111. self.assertTrue(self.thread.is_closed)
  112. self.assertFalse(moderation.close_thread(self.user, self.thread))
  113. def test_open_thread(self):
  114. """open_thread closes thread"""
  115. moderation.close_thread(self.user, self.thread)
  116. self.reload_thread()
  117. self.assertTrue(self.thread.is_closed)
  118. self.assertTrue(moderation.open_thread(self.user, self.thread))
  119. self.reload_thread()
  120. self.assertFalse(self.thread.is_closed)
  121. self.assertTrue(self.thread.has_events)
  122. event = self.thread.event_set.last()
  123. self.assertIn("opened thread.", event.message)
  124. self.assertEqual(event.icon, "unlock-alt")
  125. def test_open_invalid_thread(self):
  126. """open_thread fails gracefully for opened thread"""
  127. self.assertFalse(self.thread.is_closed)
  128. self.assertFalse(moderation.open_thread(self.user, self.thread))
  129. def test_hide_thread(self):
  130. """hide_thread hides thread"""
  131. self.assertFalse(self.thread.is_hidden)
  132. self.assertTrue(moderation.hide_thread(self.user, self.thread))
  133. self.reload_thread()
  134. self.assertTrue(self.thread.is_hidden)
  135. self.assertTrue(self.thread.has_events)
  136. event = self.thread.event_set.last()
  137. self.assertIn("hid thread.", event.message)
  138. self.assertEqual(event.icon, "eye-slash")
  139. def test_unhide_thread(self):
  140. """unhide_thread unhides thread"""
  141. moderation.hide_thread(self.user, self.thread)
  142. self.reload_thread()
  143. self.assertTrue(self.thread.is_hidden)
  144. self.assertTrue(moderation.unhide_thread(self.user, self.thread))
  145. self.reload_thread()
  146. self.assertFalse(self.thread.is_hidden)
  147. self.assertTrue(self.thread.has_events)
  148. event = self.thread.event_set.last()
  149. self.assertIn("made thread visible.", event.message)
  150. self.assertEqual(event.icon, "eye")
  151. def test_delete_thread(self):
  152. """delete_thread deletes thread"""
  153. self.assertTrue(moderation.delete_thread(self.user, self.thread))
  154. with self.assertRaises(Thread.DoesNotExist):
  155. self.reload_thread()