123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- from misago.acl import add_acl
- from misago.forums.models import Forum
- from misago.readtracker import threadstracker
- from misago.users.testutils import AuthenticatedUserTestCase
- from misago.threads import goto
- from misago.threads.testutils import post_thread, reply_thread
- class MockThreadsCounter(object):
- def set(self, *args, **kwargs):
- pass
- def decrease(self, *args, **kwargs):
- pass
- class GotoTests(AuthenticatedUserTestCase):
- def setUp(self):
- super(GotoTests, self).setUp()
- self.forum = Forum.objects.all_forums().filter(role="forum")[:1][0]
- self.forum.labels = []
- self.thread = post_thread(self.forum)
- add_acl(self.user, self.forum)
- add_acl(self.user, self.thread)
- def test_get_thread_pages(self):
- """get_thread_pages returns valid count of pages for given positions"""
- self.assertEqual(goto.get_thread_pages(1), 1)
- self.assertEqual(goto.get_thread_pages(10), 1)
- self.assertEqual(goto.get_thread_pages(13), 1)
- self.assertEqual(goto.get_thread_pages(14), 2)
- self.assertEqual(goto.get_thread_pages(19), 2)
- self.assertEqual(goto.get_thread_pages(20), 2)
- self.assertEqual(goto.get_thread_pages(23), 2)
- self.assertEqual(goto.get_thread_pages(24), 3)
- self.assertEqual(goto.get_thread_pages(27), 3)
- self.assertEqual(goto.get_thread_pages(36), 4)
- self.assertEqual(goto.get_thread_pages(373), 37)
- def test_get_post_page(self):
- """get_post_page returns valid page number for given queryset"""
- self.assertEqual(goto.get_post_page(1, self.thread.post_set), 1)
- # add 12 posts, bumping no of posts on page to to 13
- [reply_thread(self.thread) for p in xrange(12)]
- self.assertEqual(goto.get_post_page(13, self.thread.post_set), 1)
- # add 2 posts
- [reply_thread(self.thread) for p in xrange(2)]
- self.assertEqual(goto.get_post_page(15, self.thread.post_set), 2)
- def test_hashed_reverse(self):
- """hashed_reverse returns complete url for given post"""
- url = goto.hashed_reverse(self.thread, self.thread.first_post)
- url_formats = self.thread.get_absolute_url(), self.thread.first_post_id
- self.assertEqual(url, '%s#post-%s' % url_formats)
- url = goto.hashed_reverse(self.thread, self.thread.first_post, 4)
- url_formats = self.thread.get_absolute_url(), self.thread.first_post_id
- self.assertEqual(url, '%s4/#post-%s' % url_formats)
- def test_last(self):
- """last returns link to last post in thread"""
- url_last = goto.last(self.user, self.thread)
- url_formats = self.thread.get_absolute_url(), self.thread.last_post_id
- self.assertEqual(url_last, '%s#post-%s' % url_formats)
- # add 12 posts to reach page limit
- [reply_thread(self.thread) for p in xrange(12)]
- url_last = goto.last(self.user, self.thread)
- url_formats = self.thread.get_absolute_url(), self.thread.last_post_id
- self.assertEqual(url_last, '%s#post-%s' % url_formats)
- # add 2 posts to add second page to thread
- [reply_thread(self.thread) for p in xrange(2)]
- url_last = goto.last(self.user, self.thread)
- url_formats = self.thread.get_absolute_url(), self.thread.last_post_id
- self.assertEqual(url_last, '%s2/#post-%s' % url_formats)
- def test_get_post_link(self):
- """get_post_link returns link to specified post"""
- post_link = goto.get_post_link(
- 1, self.thread.post_set, self.thread, self.thread.last_post)
- self.assertEqual(post_link, goto.last(self.user, self.thread))
- # add 16 posts to add extra page to thread
- [reply_thread(self.thread) for p in xrange(16)]
- post_link = goto.get_post_link(
- 17, self.thread.post_set, self.thread, self.thread.last_post)
- self.assertEqual(post_link, goto.last(self.user, self.thread))
- def test_new(self):
- """new returns link to first unread post"""
- self.user.new_threads = MockThreadsCounter()
- self.user.unread_threads = MockThreadsCounter()
- post_link = goto.new(self.user, self.thread)
- self.assertEqual(post_link, goto.last(self.user, self.thread))
- # add 18 posts to add extra page to thread, then read them
- [reply_thread(self.thread) for p in xrange(18)]
- threadstracker.read_thread(
- self.user, self.thread, self.thread.last_post)
- # add extra unread posts
- first_unread = reply_thread(self.thread)
- [reply_thread(self.thread) for p in xrange(30)]
- new_link = goto.new(self.user, self.thread)
- post_link = goto.get_post_link(
- 50, self.thread.post_set, self.thread, first_unread)
- self.assertEqual(new_link, post_link)
- # read thread
- threadstracker.read_thread(
- self.user, self.thread, self.thread.last_post)
- # assert new() points to last reply
- post_link = goto.new(self.user, self.thread)
- self.assertEqual(post_link, goto.last(self.user, self.thread))
- def test_reported(self):
- """reported returns link to first reported post"""
- self.thread.acl['can_see_reports'] = True
- # add 24 posts
- [reply_thread(self.thread) for p in xrange(24)]
- # add reported post
- reported_post = reply_thread(self.thread, is_reported=True)
- # add 24 posts
- [reply_thread(self.thread) for p in xrange(24)]
- # assert that there is link to reported post
- reported_link = goto.reported(self.user, self.thread)
- post_link = goto.get_post_link(
- 50, self.thread.post_set, self.thread, reported_post)
- self.assertEqual(reported_link, post_link)
- # lack of permission should lead to last post
- self.thread.acl['can_see_reports'] = False
- reported_link = goto.reported(self.user, self.thread)
- self.assertEqual(reported_link, goto.last(self.user, self.thread))
- # lack of reports in thread should lead to last post
- self.thread.acl['can_see_reports'] = True
- self.thread.has_reported_posts = False
- reported_link = goto.reported(self.user, self.thread)
- self.assertEqual(reported_link, goto.last(self.user, self.thread))
- def test_moderated(self):
- """moderated returns link to first moderated post"""
- self.forum.acl['can_review_moderated_content'] = True
- self.thread.acl['can_review'] = True
- # add 24 posts
- [reply_thread(self.thread) for p in xrange(24)]
- # add moderated post
- moderated_post = reply_thread(self.thread, is_moderated=True)
- # add 24 posts
- [reply_thread(self.thread) for p in xrange(24)]
- # assert that there is link to moderated post
- moderated_link = goto.moderated(self.user, self.thread)
- post_link = goto.get_post_link(
- 50, self.thread.post_set, self.thread, moderated_post)
- self.assertEqual(moderated_link, post_link)
- # lack of permission should lead to last post
- self.thread.acl['can_review'] = False
- moderated_link = goto.moderated(self.user, self.thread)
- self.assertEqual(moderated_link, goto.last(self.user, self.thread))
- # lack of moderated posts in thread should lead to last post
- self.thread.acl['can_review'] = True
- self.thread.has_moderated_posts = False
- moderated_link = goto.moderated(self.user, self.thread)
- self.assertEqual(moderated_link, goto.last(self.user, self.thread))
- def test_post(self):
- """post returns link to post given"""
- self.assertEqual(
- goto.last(self.user, self.thread),
- goto.post(self.user, self.thread, self.thread.last_post))
- # add 24 posts
- [reply_thread(self.thread) for p in xrange(24)]
- self.assertEqual(
- goto.last(self.user, self.thread),
- goto.post(self.user, self.thread, self.thread.last_post))
|