def test_leaderboard_fetch_multiple(self): """ Tests fetching leaderboard results with multiple courses""" courses = [self._bootstrap_courses(1), self._bootstrap_courses(2)] course_user = self._bootstrap_course_user(-1, courses[0], True) course_user_2 = self._bootstrap_course_user(-2, courses[1], True) for count, course in enumerate(courses): self._bootstrap_topics(course) for i in range((count+1) * 5): id = i + count*5 self._boostrap_leaderboard_users(course, id, id == count) leaderboard = QuestionService.get_course_leaders(course_user, False, "questionsAuthored", "") self.assertEqual(len(leaderboard), 5) leaderboard = QuestionService.get_course_leaders(course_user_2, False, "questionsAuthored", "") self.assertEqual(len(leaderboard), 10)
def test_leaderboard_sort_direction(self): course = self._bootstrap_courses(1) course_user = self._bootstrap_course_user(-1, course, True) self._bootstrap_topics(course) for i in [1,2,3,4,5]: self._boostrap_leaderboard_users(course, i, i == 1) leaderboard = QuestionService.get_course_leaders(course_user, False, "questionsAuthored", "DESC") self.assertEqual(len(leaderboard), 5) self.assertEqual(leaderboard[0]["questionsAuthored"], 5) self.assertEqual(leaderboard[1]["questionsAuthored"], 0) # Sort in other direction leaderboard = QuestionService.get_course_leaders(course_user, False, "questionsAuthored", "ASC") self.assertEqual(len(leaderboard), 5) self.assertEqual(leaderboard[0]["questionsAuthored"], 0) self.assertEqual(leaderboard[-1]["questionsAuthored"], 5)
def test_leaderboard_fetch_many_instructor(self): """ Tests limiting of leaderboard fetching results for instructor""" course = self._bootstrap_courses(1) course_user = self._bootstrap_course_user(-1, course, True) self._bootstrap_topics(course) for i in range(0, 100): self._boostrap_leaderboard_users(course, i, i == 1) leaderboard = QuestionService.get_course_leaders(course_user, False, "questionsAuthored", "DESC", limit=-1) self.assertEqual(len(leaderboard), 100)
def test_leaderboard_fetch(self): """ Tests fetching leaderboard results""" course = self._bootstrap_courses(1) course_user = self._bootstrap_course_user(-1, course, True) self._bootstrap_topics(course) for i in [1,2,3,4,5]: self._boostrap_leaderboard_users(course, i, i == 1) leaderboard = QuestionService.get_course_leaders(course_user, False, "questionsAuthored", "") self.assertEqual(len(leaderboard), 5)
def leaderboard(request, sort_field, sort_order): logged_in_user = UserService.logged_in_user(request) user_roles = (str(x) for x in logged_in_user.roles.all()) limit = -1 if is_administrator(logged_in_user) else 20 if sort_order != "DESC" and sort_order != "ASC": sort_order = "DESC" leaderboard_scores = QuestionService.get_course_leaders(logged_in_user, False, sort_field, sort_order, limit) return JsonResponse({"data": leaderboard_scores})