test_activepostersranking.py 2.9 KB

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