test_activepostersranking.py 2.7 KB

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