test_threads_moderation.py 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  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_close_thread(self):
  85. """close_thread closes thread"""
  86. self.assertFalse(self.thread.is_closed)
  87. self.assertTrue(moderation.close_thread(self.user, self.thread))
  88. self.reload_thread()
  89. self.assertTrue(self.thread.is_closed)
  90. self.assertTrue(self.thread.has_events)
  91. event = self.thread.event_set.last()
  92. self.assertIn("closed thread.", event.message)
  93. self.assertEqual(event.icon, "lock")
  94. def test_close_invalid_thread(self):
  95. """close_thread fails gracefully for opened thread"""
  96. moderation.close_thread(self.user, self.thread)
  97. self.reload_thread()
  98. self.assertTrue(self.thread.is_closed)
  99. self.assertFalse(moderation.close_thread(self.user, self.thread))
  100. def test_open_thread(self):
  101. """open_thread closes thread"""
  102. moderation.close_thread(self.user, self.thread)
  103. self.reload_thread()
  104. self.assertTrue(self.thread.is_closed)
  105. self.assertTrue(moderation.open_thread(self.user, self.thread))
  106. self.reload_thread()
  107. self.assertFalse(self.thread.is_closed)
  108. self.assertTrue(self.thread.has_events)
  109. event = self.thread.event_set.last()
  110. self.assertIn("opened thread.", event.message)
  111. self.assertEqual(event.icon, "unlock-alt")
  112. def test_open_invalid_thread(self):
  113. """open_thread fails gracefully for opened thread"""
  114. self.assertFalse(self.thread.is_closed)
  115. self.assertFalse(moderation.open_thread(self.user, self.thread))
  116. def test_hide_thread(self):
  117. """hide_thread hides thread"""
  118. self.assertFalse(self.thread.is_hidden)
  119. self.assertTrue(moderation.hide_thread(self.user, self.thread))
  120. self.reload_thread()
  121. self.assertTrue(self.thread.is_hidden)
  122. self.assertTrue(self.thread.has_events)
  123. event = self.thread.event_set.last()
  124. self.assertIn("hid thread.", event.message)
  125. self.assertEqual(event.icon, "eye-slash")
  126. def test_unhide_thread(self):
  127. """unhide_thread unhides thread"""
  128. moderation.hide_thread(self.user, self.thread)
  129. self.reload_thread()
  130. self.assertTrue(self.thread.is_hidden)
  131. self.assertTrue(moderation.unhide_thread(self.user, self.thread))
  132. self.reload_thread()
  133. self.assertFalse(self.thread.is_hidden)
  134. self.assertTrue(self.thread.has_events)
  135. event = self.thread.event_set.last()
  136. self.assertIn("made thread visible.", event.message)
  137. self.assertEqual(event.icon, "eye")
  138. def test_delete_thread(self):
  139. """delete_thread deletes thread"""
  140. self.assertTrue(moderation.delete_thread(self.user, self.thread))
  141. with self.assertRaises(Thread.DoesNotExist):
  142. self.reload_thread()