test_activepostersranking.py 2.9 KB

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