123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252 |
- from misago.categories.models import Category
- from misago.threads import moderation, testutils
- from misago.threads.models import Thread
- from misago.users.testutils import AuthenticatedUserTestCase
- class MockRequest(object):
- def __init__(self, user):
- self.user = user
- self.user_ip = '123.14.15.222'
- class ThreadsModerationTests(AuthenticatedUserTestCase):
- def setUp(self):
- super().setUp()
- self.request = MockRequest(self.user)
- self.category = Category.objects.all_categories()[:1][0]
- self.thread = testutils.post_thread(self.category)
- def tearDown(self):
- super().tearDown()
- def reload_thread(self):
- self.thread = Thread.objects.get(pk=self.thread.pk)
- def test_change_thread_title(self):
- """change_thread_title changes thread's title and slug"""
- self.assertTrue(
- moderation.change_thread_title(self.request, self.thread, "New title is here!")
- )
- self.reload_thread()
- self.assertEqual(self.thread.title, "New title is here!")
- self.assertEqual(self.thread.slug, 'new-title-is-here')
- event = self.thread.last_post
- self.assertTrue(event.is_event)
- self.assertEqual(event.event_type, 'changed_title')
- def test_pin_globally_thread(self):
- """pin_thread_globally makes thread pinned globally"""
- self.assertEqual(self.thread.weight, 0)
- self.assertTrue(moderation.pin_thread_globally(self.request, self.thread))
- self.reload_thread()
- self.assertEqual(self.thread.weight, 2)
- event = self.thread.last_post
- self.assertTrue(event.is_event)
- self.assertEqual(event.event_type, 'pinned_globally')
- def test_pin_globally_invalid_thread(self):
- """
- pin_thread_globally returns false for already globally pinned thread
- """
- self.thread.weight = 2
- self.assertFalse(moderation.pin_thread_globally(self.request, self.thread))
- self.assertEqual(self.thread.weight, 2)
- def test_pin_thread_locally(self):
- """pin_thread_locally makes thread pinned locally"""
- self.assertEqual(self.thread.weight, 0)
- self.assertTrue(moderation.pin_thread_locally(self.request, self.thread))
- self.reload_thread()
- self.assertEqual(self.thread.weight, 1)
- event = self.thread.last_post
- self.assertTrue(event.is_event)
- self.assertEqual(event.event_type, 'pinned_locally')
- def test_pin_invalid_thread(self):
- """pin_thread_locally returns false for already locally pinned thread"""
- self.thread.weight = 1
- self.assertFalse(moderation.pin_thread_locally(self.request, self.thread))
- self.assertEqual(self.thread.weight, 1)
- def test_unpin_globally_pinned_thread(self):
- """unpin_thread unpins globally pinned thread"""
- moderation.pin_thread_globally(self.request, self.thread)
- self.assertEqual(self.thread.weight, 2)
- self.assertTrue(moderation.unpin_thread(self.request, self.thread))
- self.reload_thread()
- self.assertEqual(self.thread.weight, 0)
- event = self.thread.last_post
- self.assertTrue(event.is_event)
- self.assertEqual(event.event_type, 'unpinned')
- def test_unpin_locally_pinned_thread(self):
- """unpin_thread unpins locally pinned thread"""
- moderation.pin_thread_locally(self.request, self.thread)
- self.assertEqual(self.thread.weight, 1)
- self.assertTrue(moderation.unpin_thread(self.request, self.thread))
- self.reload_thread()
- self.assertEqual(self.thread.weight, 0)
- event = self.thread.last_post
- self.assertTrue(event.is_event)
- self.assertEqual(event.event_type, 'unpinned')
- def test_unpin_weightless_thread(self):
- """unpin_thread returns false for already weightless thread"""
- self.assertFalse(moderation.unpin_thread(self.request, self.thread))
- self.assertEqual(self.thread.weight, 0)
- def test_approve_thread(self):
- """approve_thread approves unapproved thread"""
- self.thread = testutils.post_thread(self.category, is_unapproved=True)
- self.assertTrue(self.thread.is_unapproved)
- self.assertTrue(self.thread.first_post.is_unapproved)
- self.assertTrue(moderation.approve_thread(self.request, self.thread))
- self.reload_thread()
- self.assertFalse(self.thread.is_unapproved)
- self.assertFalse(self.thread.first_post.is_unapproved)
- event = self.thread.last_post
- self.assertTrue(event.is_event)
- self.assertEqual(event.event_type, 'approved')
- def test_move_thread(self):
- """moves_thread moves unapproved thread to other category"""
- root_category = Category.objects.root_category()
- Category(
- name='New Category',
- slug='new-category',
- ).insert_at(
- root_category,
- position='last-child',
- save=True,
- )
- new_category = Category.objects.get(slug='new-category')
- self.assertEqual(self.thread.category, self.category)
- self.assertTrue(moderation.move_thread(self.request, self.thread, new_category))
- self.reload_thread()
- self.assertEqual(self.thread.category, new_category)
- event = self.thread.last_post
- self.assertTrue(event.is_event)
- self.assertEqual(event.event_type, 'moved')
- def test_move_thread_to_same_category(self):
- """moves_thread does not move thread to same category it is in"""
- self.assertEqual(self.thread.category, self.category)
- self.assertFalse(moderation.move_thread(self.request, self.thread, self.category))
- self.reload_thread()
- self.assertEqual(self.thread.category, self.category)
- def test_close_thread(self):
- """close_thread closes thread"""
- self.assertFalse(self.thread.is_closed)
- self.assertTrue(moderation.close_thread(self.request, self.thread))
- self.reload_thread()
- self.assertTrue(self.thread.is_closed)
- event = self.thread.last_post
- self.assertTrue(event.is_event)
- self.assertEqual(event.event_type, 'closed')
- def test_close_invalid_thread(self):
- """close_thread fails gracefully for opened thread"""
- moderation.close_thread(self.request, self.thread)
- self.reload_thread()
- self.assertTrue(self.thread.is_closed)
- self.assertFalse(moderation.close_thread(self.request, self.thread))
- def test_open_thread(self):
- """open_thread closes thread"""
- moderation.close_thread(self.request, self.thread)
- self.reload_thread()
- self.assertTrue(self.thread.is_closed)
- self.assertTrue(moderation.open_thread(self.request, self.thread))
- self.reload_thread()
- self.assertFalse(self.thread.is_closed)
- event = self.thread.last_post
- self.assertTrue(event.is_event)
- self.assertEqual(event.event_type, 'opened')
- def test_open_invalid_thread(self):
- """open_thread fails gracefully for opened thread"""
- self.assertFalse(self.thread.is_closed)
- self.assertFalse(moderation.open_thread(self.request, self.thread))
- def test_hide_thread(self):
- """hide_thread hides thread"""
- self.assertFalse(self.thread.is_hidden)
- self.assertTrue(moderation.hide_thread(self.request, self.thread))
- self.reload_thread()
- self.assertTrue(self.thread.is_hidden)
- event = self.thread.last_post
- self.assertTrue(event.is_event)
- self.assertEqual(event.event_type, 'hid')
- def test_hide_hidden_thread(self):
- """hide_thread fails gracefully for hidden thread"""
- self.thread.is_hidden = True
- self.assertFalse(moderation.hide_thread(self.request, self.thread))
- def test_unhide_thread(self):
- """unhide_thread unhides thread"""
- moderation.hide_thread(self.request, self.thread)
- self.reload_thread()
- self.assertTrue(self.thread.is_hidden)
- self.assertTrue(moderation.unhide_thread(self.request, self.thread))
- self.reload_thread()
- self.assertFalse(self.thread.is_hidden)
- event = self.thread.last_post
- self.assertTrue(event.is_event)
- self.assertEqual(event.event_type, 'unhid')
- def test_unhide_visible_thread(self):
- """unhide_thread fails gracefully for visible thread"""
- self.assertFalse(moderation.unhide_thread(self.request, self.thread))
- def test_delete_thread(self):
- """delete_thread deletes thread"""
- self.assertTrue(moderation.delete_thread(self.request, self.thread))
- with self.assertRaises(Thread.DoesNotExist):
- self.reload_thread()
|