from django.contrib.auth import get_user_model from misago.core import threadstore from misago.core.cache import cache from misago.forums.models import Forum from misago.threads.testutils import post_thread from misago.users.testutils import AuthenticatedUserTestCase from misago.users.activepostersranking import (get_active_posters_ranking, get_real_active_posts_ranking, clear_active_posters_ranking) class TestActivePostersRanking(AuthenticatedUserTestCase): def setUp(self): super(TestActivePostersRanking, self).setUp() cache.clear() threadstore.clear() self.forum = Forum.objects.all_forums().filter(role="forum")[:1][0] def tearDown(self): super(TestActivePostersRanking, self).tearDown() cache.clear() threadstore.clear() def test_get_real_active_posts_ranking(self): """get_real_active_posts_ranking returns list of active posters""" # no posts, empty tanking empty_ranking = get_real_active_posts_ranking() self.assertEqual(empty_ranking['users'], []) self.assertEqual(empty_ranking['users_count'], 0) # other user User = get_user_model() other_user = User.objects.create_user( "OtherUser", "other@user.com", "pass123") other_user.posts = 1 other_user.save() post_thread(self.forum, poster=other_user) ranking = get_real_active_posts_ranking() self.assertEqual(ranking['users'], [other_user]) self.assertEqual(ranking['users_count'], 1) # two users in ranking post_thread(self.forum, poster=self.user) post_thread(self.forum, poster=self.user) self.user.posts = 2 self.user.save() ranking = get_real_active_posts_ranking() self.assertEqual(ranking['users'], [self.user, other_user]) self.assertEqual(ranking['users_count'], 2) self.assertEqual(ranking['users'][0].score, 2) self.assertEqual(ranking['users'][1].score, 1) def test_get_active_posters_ranking(self): """get_active_posters_ranking returns cached list of active posters""" ranking = get_active_posters_ranking() self.assertEqual(ranking['users'], []) self.assertEqual(ranking['users_count'], 0) # post something post_thread(self.forum, poster=self.user) post_thread(self.forum, poster=self.user) self.user.posts = 2 self.user.save() # cache returns results ranking = get_active_posters_ranking() self.assertEqual(ranking['users'], []) self.assertEqual(ranking['users_count'], 0) # cache clear works clear_active_posters_ranking() ranking = get_active_posters_ranking() self.assertEqual(ranking['users'], [self.user]) self.assertEqual(ranking['users_count'], 1)