test_top_posters_ranking.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. from datetime import timedelta
  2. from django.utils import timezone
  3. from ...conf.test import override_dynamic_settings
  4. from ...threads.test import reply_thread
  5. from ..activepostersranking import (
  6. build_active_posters_ranking,
  7. get_active_posters_ranking,
  8. )
  9. from ..models import ActivityRanking
  10. from ..test import create_test_user
  11. def test_ranking_is_emptied_if_no_users_exist(post):
  12. assert not build_active_posters_ranking()
  13. def test_ranking_is_emptied_if_no_posts_exist(user):
  14. assert not build_active_posters_ranking()
  15. @override_dynamic_settings(top_posters_ranking_length=5)
  16. def test_recent_post_by_user_counts_to_ranking(thread, user):
  17. reply_thread(thread, poster=user)
  18. assert build_active_posters_ranking()
  19. @override_dynamic_settings(top_posters_ranking_length=5)
  20. def test_recent_post_by_removed_user_doesnt_count_to_ranking(thread):
  21. reply_thread(thread)
  22. assert not build_active_posters_ranking()
  23. @override_dynamic_settings(top_posters_ranking_length=5)
  24. def test_old_post_by_user_doesnt_count_to_ranking(thread, user):
  25. reply_thread(thread, poster=user, posted_on=timezone.now() - timedelta(days=6))
  26. assert not build_active_posters_ranking()
  27. @override_dynamic_settings(top_posters_ranking_size=2)
  28. def test_ranking_size_is_limited(thread):
  29. for i in range(3):
  30. user = create_test_user("User%s" % i, "user%s@example.com" % i)
  31. reply_thread(thread, poster=user)
  32. assert len(build_active_posters_ranking()) == 2
  33. @override_dynamic_settings(top_posters_ranking_size=2)
  34. def test_old_ranking_is_removed_during_build(user):
  35. ActivityRanking.objects.create(user=user, score=1)
  36. build_active_posters_ranking()
  37. assert not ActivityRanking.objects.exists()
  38. def test_empty_ranking_is_returned_from_db(db):
  39. assert get_active_posters_ranking() == {"users": [], "users_count": 0}
  40. def test_ranking_is_returned_from_db(user):
  41. ActivityRanking.objects.create(user=user, score=1)
  42. assert get_active_posters_ranking() == {"users": [user], "users_count": 1}
  43. def test_ranked_user_is_annotated_with_score(user):
  44. ActivityRanking.objects.create(user=user, score=1)
  45. ranked_user = get_active_posters_ranking()["users"][0]
  46. assert ranked_user.score == 1
  47. def test_ranked_users_are_ordered_by_score(user, other_user):
  48. ActivityRanking.objects.create(user=user, score=1)
  49. ActivityRanking.objects.create(user=other_user, score=2)
  50. assert get_active_posters_ranking() == {
  51. "users": [other_user, user],
  52. "users_count": 2,
  53. }