test_activepostersranking.py 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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. UserModel = 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 = UserModel.objects.create_user(
  24. "OtherUser", "other@user.com", "pass123"
  25. )
  26. # lurker user that won't post anything
  27. UserModel.objects.create_user("Lurker", "lurker@user.com", "pass123")
  28. # unranked user that posted something 400 days ago
  29. unranked_user = UserModel.objects.create_user(
  30. "UnrankedUser", "unranked@user.com", "pass123"
  31. )
  32. started_on = timezone.now() - timedelta(days=400)
  33. post_thread(self.category, poster=unranked_user, started_on=started_on)
  34. # Start testing scenarios
  35. post_thread(self.category, poster=other_user)
  36. build_active_posters_ranking()
  37. ranking = get_active_posters_ranking()
  38. self.assertEqual(ranking["users"], [other_user])
  39. self.assertEqual(ranking["users_count"], 1)
  40. # two users in ranking
  41. post_thread(self.category, poster=self.user)
  42. post_thread(self.category, poster=self.user)
  43. build_active_posters_ranking()
  44. ranking = get_active_posters_ranking()
  45. self.assertEqual(ranking["users"], [self.user, other_user])
  46. self.assertEqual(ranking["users_count"], 2)
  47. self.assertEqual(ranking["users"][0].score, 2)
  48. self.assertEqual(ranking["users"][1].score, 1)
  49. # disabled users are not ranked
  50. disabled = UserModel.objects.create_user(
  51. "DisabledUser", "disabled@user.com", "pass123"
  52. )
  53. disabled.is_active = False
  54. disabled.save()
  55. post_thread(self.category, poster=disabled)
  56. post_thread(self.category, poster=disabled)
  57. post_thread(self.category, poster=disabled)
  58. disabled.posts = 3
  59. disabled.save()
  60. build_active_posters_ranking()
  61. ranking = get_active_posters_ranking()
  62. self.assertEqual(ranking["users"], [self.user, other_user])
  63. self.assertEqual(ranking["users_count"], 2)
  64. self.assertEqual(ranking["users"][0].score, 2)
  65. self.assertEqual(ranking["users"][1].score, 1)