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)
Exemple #5
0
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})