def test_get_leaderboard_returns_fields(self): """Test CACHE USERS get_leaderboard returns user fields""" user = UserFactory.create() TaskRunFactory.create(user=user) fields = User.public_attributes() update_leaderboard() leaderboard = cached_users.get_leaderboard(1) for field in fields: assert field in leaderboard[0].keys(), field assert len(leaderboard[0].keys()) == len(fields)
def test_get_leaderboard_returns_users_ordered_by_rank(self): leader = UserFactory.create() second = UserFactory.create() third = UserFactory.create() project = ProjectFactory.create() tasks = TaskFactory.create_batch(3, project=project) i = 3 for user in [leader, second, third]: TaskRunFactory.create_batch(i, user=user, task=tasks[i - 1]) i -= 1 update_leaderboard() leaderboard = cached_users.get_leaderboard(3) assert leaderboard[0]['name'] == leader.name assert leaderboard[1]['name'] == second.name assert leaderboard[2]['name'] == third.name
def test_rank_and_score(self): """Test CACHE USERS rank_and_score returns the correct rank and score""" i = 0 project = ProjectFactory.create() tasks = TaskFactory.create_batch(4, project=project) users = UserFactory.create_batch(4) for user in users: i += 1 taskruns = TaskRunFactory.create_batch(i, user=user, task=tasks[i - 1]) update_leaderboard() first_in_rank = cached_users.rank_and_score(users[3].id) last_in_rank = cached_users.rank_and_score(users[0].id) print first_in_rank assert first_in_rank['rank'] == 1, first_in_rank['rank'] assert first_in_rank['score'] == 4, first_in_rank['score'] assert last_in_rank['rank'] == 4, last_in_rank['rank'] assert last_in_rank['score'] == 1, last_in_rank['score']
def test_get_leaderboard_includes_specific_user_even_is_not_in_top(self): leader = UserFactory.create() second = UserFactory.create() third = UserFactory.create() project = ProjectFactory.create() tasks = TaskFactory.create_batch(3, project=project) i = 3 for user in [leader, second, third]: TaskRunFactory.create_batch(i, user=user, task=tasks[i - 1]) i -= 1 user_out_of_top = UserFactory.create() update_leaderboard() leaderboard = cached_users.get_leaderboard(3, user_id=user_out_of_top.id) assert len(leaderboard) is 4, len(leaderboard) assert leaderboard[-1]['name'] == user_out_of_top.name