test_activepostersranking.py 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. from datetime import timedelta
  2. from django.contrib.auth import get_user_model
  3. from django.utils import timezone
  4. from misago.categories.models import Category
  5. from misago.core import threadstore
  6. from misago.core.cache import cache
  7. from misago.threads.testutils import post_thread
  8. from misago.users.activepostersranking import (
  9. build_active_posters_ranking, get_active_posters_ranking)
  10. from misago.users.testutils import AuthenticatedUserTestCase
  11. UserModel = get_user_model()
  12. class TestActivePostersRanking(AuthenticatedUserTestCase):
  13. def setUp(self):
  14. super(TestActivePostersRanking, self).setUp()
  15. cache.clear()
  16. threadstore.clear()
  17. self.category = Category.objects.get(slug='first-category')
  18. def tearDown(self):
  19. super(TestActivePostersRanking, self).tearDown()
  20. cache.clear()
  21. threadstore.clear()
  22. def test_get_active_posters_ranking(self):
  23. """get_active_posters_ranking returns list of active posters"""
  24. # no posts, empty tanking
  25. empty_ranking = get_active_posters_ranking()
  26. self.assertEqual(empty_ranking['users'], [])
  27. self.assertEqual(empty_ranking['users_count'], 0)
  28. # other user that will be posting
  29. other_user = UserModel.objects.create_user("OtherUser", "other@user.com", "pass123")
  30. # lurker user that won't post anything
  31. UserModel.objects.create_user("Lurker", "lurker@user.com", "pass123")
  32. # unranked user that posted something 400 days ago
  33. unranked_user = UserModel.objects.create_user(
  34. "UnrankedUser", "unranked@user.com", "pass123"
  35. )
  36. started_on = timezone.now() - timedelta(days=400)
  37. post_thread(self.category, poster=unranked_user, started_on=started_on)
  38. # Start testing scenarios
  39. post_thread(self.category, poster=other_user)
  40. build_active_posters_ranking()
  41. ranking = get_active_posters_ranking()
  42. self.assertEqual(ranking['users'], [other_user])
  43. self.assertEqual(ranking['users_count'], 1)
  44. # two users in ranking
  45. post_thread(self.category, poster=self.user)
  46. post_thread(self.category, poster=self.user)
  47. build_active_posters_ranking()
  48. ranking = get_active_posters_ranking()
  49. self.assertEqual(ranking['users'], [self.user, other_user])
  50. self.assertEqual(ranking['users_count'], 2)
  51. self.assertEqual(ranking['users'][0].score, 2)
  52. self.assertEqual(ranking['users'][1].score, 1)
  53. # disabled users are not ranked
  54. disabled = UserModel.objects.create_user("DisabledUser", "disabled@user.com", "pass123")
  55. disabled.is_active = False
  56. disabled.save()
  57. post_thread(self.category, poster=disabled)
  58. post_thread(self.category, poster=disabled)
  59. post_thread(self.category, poster=disabled)
  60. disabled.posts = 3
  61. disabled.save()
  62. build_active_posters_ranking()
  63. ranking = get_active_posters_ranking()
  64. self.assertEqual(ranking['users'], [self.user, other_user])
  65. self.assertEqual(ranking['users_count'], 2)
  66. self.assertEqual(ranking['users'][0].score, 2)
  67. self.assertEqual(ranking['users'][1].score, 1)