def test_no_score(self):
        """
        Run the engagement calculation for a user in a course who has no score
        """

        self.assertEqual(get_notifications_count_for_user(self.user.id), 0)

        with patch('social_engagement.engagement._get_user_social_stats'
                   ) as mock_func:
            mock_func.return_value = {
                'num_threads': 0,
                'num_comments': 0,
                'num_replies': 0,
                'num_upvotes': 0,
                'num_thread_followers': 0,
                'num_comments_generated': 0,
            }

            update_user_engagement_score(self.course.id, self.user.id)

            leaderboard_position = StudentSocialEngagementScore.get_user_leaderboard_position(
                self.course.id, self.user.id)

            self.assertEqual(leaderboard_position['score'], 0)

            self.assertEqual(leaderboard_position['position'], 0)

            self.assertEqual(get_notifications_count_for_user(self.user.id), 0)
Esempio n. 2
0
    def test_no_score(self):
        """
        Run the engagement calculation for a user in a course who has no score
        """

        self.assertEqual(get_notifications_count_for_user(self.user.id), 0)

        with patch('social_engagement.engagement._get_user_social_stats') as mock_func:
            mock_func.return_value = {
                'num_threads': 0,
                'num_comments': 0,
                'num_replies': 0,
                'num_upvotes': 0,
                'num_thread_followers': 0,
                'num_comments_generated': 0,
            }

            update_user_engagement_score(self.course.id, self.user.id)

            leaderboard_position = StudentSocialEngagementScore.get_user_leaderboard_position(
                self.course.id,
                self.user.id
            )

            self.assertEqual(
                leaderboard_position['score'],
                0
            )

            self.assertEqual(
                leaderboard_position['position'],
                0
            )

            self.assertEqual(get_notifications_count_for_user(self.user.id), 0)
    def handle(self, *args, **options):
        help = "Command to creaete or update social engagement entries"
        option_list = BaseCommand.option_list + (
            make_option(
                "-c",
                "--course_ids",
                dest="course_ids",
                help="List of courses for which to generate social engagement",
                metavar="first/course/id,second/course/id"
            ),
            make_option(
                "-u",
                "--user_ids",
                dest="user_ids",
                help="List of users for which to generate social engagement",
                metavar="1234,2468,3579"
            ),
        )

        course_ids = options.get('course_ids')
        user_ids = options.get('user_ids')

        if course_ids:
            # over a few specific courses?
            for course_id in course_ids:
                if user_ids:
                    # over a few specific users in those courses?
                    for user_id in user_ids:
                        update_user_engagement_score(course_id, user_id, compute_if_closed_course=True)
                else:
                    update_course_engagement_scores(course_id, compute_if_closed_course=True)
        else:
            print 'Updating social engagement scores in all courses...'
            update_all_courses_engagement_scores(compute_if_closed_course=True)
Esempio n. 4
0
def _update_user_engagement_score(course_key, user_id):
    """
    Helper to call down into the Social Engagement app to recalc the passed in user's
    Social Engagement score
    """

    if settings.FEATURES.get('ENABLE_SOCIAL_ENGAGEMENT', False):
        update_user_engagement_score(course_key, user_id)
Esempio n. 5
0
def task_update_user_engagement_score(course_id, user_id):
    """
    Task to update user's engagement score
    """
    try:
        update_user_engagement_score(course_id, user_id)
    except Exception as exc:  # pylint: disable=broad-except
        log.info(
            "social engagement score update failure for course {} and user id {} with exception {}"
            .format(course_id, user_id, repr(exc)))
    def test_multiple_users(self):
        """
        See if it works with more than one enrollee
        """

        self.assertEqual(get_notifications_count_for_user(self.user.id), 0)
        self.assertEqual(get_notifications_count_for_user(self.user2.id), 0)

        with patch('social_engagement.engagement._get_user_social_stats'
                   ) as mock_func:
            mock_func.return_value = {
                'num_threads': 1,
                'num_comments': 1,
                'num_replies': 1,
                'num_upvotes': 1,
                'num_thread_followers': 1,
                'num_comments_generated': 1,
            }

            update_user_engagement_score(self.course.id, self.user.id)

        with patch('social_engagement.engagement._get_user_social_stats'
                   ) as mock_func:
            mock_func.return_value = {
                'num_threads': 2,
                'num_comments': 2,
                'num_replies': 2,
                'num_upvotes': 2,
                'num_thread_followers': 2,
                'num_comments_generated': 2,
            }

            update_user_engagement_score(self.course.id, self.user2.id)

        leaderboard_position = StudentSocialEngagementScore.get_user_leaderboard_position(
            self.course.id, self.user.id)

        self.assertEqual(leaderboard_position['score'], 85)

        # user should be in place #2
        self.assertEqual(leaderboard_position['position'], 2)

        self.assertEqual(get_notifications_count_for_user(self.user.id), 1)

        leaderboard_position = StudentSocialEngagementScore.get_user_leaderboard_position(
            self.course.id, self.user2.id)

        self.assertEqual(leaderboard_position['score'], 170)

        # user2 should be in place #1
        self.assertEqual(leaderboard_position['position'], 1)

        self.assertEqual(get_notifications_count_for_user(self.user2.id), 1)
Esempio n. 7
0
def task_compute_social_scores_in_course(course_id):
    """
    Task to compute social scores in course
    """
    score_update_count = 0
    course_key = CourseKey.from_string(course_id)
    course = modulestore().get_course(course_key, depth=None)
    user_ids = CourseEnrollment.objects.values_list(
        'user_id', flat=True).filter(is_active=1, course_id=course_key)

    if course:
        # For each user compute and save social engagement score
        for user_id in user_ids:
            update_user_engagement_score(course_key,
                                         user_id,
                                         compute_if_closed_course=True,
                                         course_descriptor=course)
            score_update_count += 1
    else:
        log.info("Course with course id %s does not exist", course_id)
    log.info("Social scores updated for %d users in course %s",
             score_update_count, course_id)
Esempio n. 8
0
    def test_multiple_users(self):
        """
        See if it works with more than one enrollee
        """

        self.assertEqual(get_notifications_count_for_user(self.user.id), 0)
        self.assertEqual(get_notifications_count_for_user(self.user2.id), 0)

        with patch('social_engagement.engagement._get_user_social_stats') as mock_func:
            mock_func.return_value = {
                'num_threads': 1,
                'num_comments': 1,
                'num_replies': 1,
                'num_upvotes': 1,
                'num_thread_followers': 1,
                'num_comments_generated': 1,
            }

            update_user_engagement_score(self.course.id, self.user.id)

        with patch('social_engagement.engagement._get_user_social_stats') as mock_func:
            mock_func.return_value = {
                'num_threads': 2,
                'num_comments': 2,
                'num_replies': 2,
                'num_upvotes': 2,
                'num_thread_followers': 2,
                'num_comments_generated': 2,
            }

            update_user_engagement_score(self.course.id, self.user2.id)

        leaderboard_position = StudentSocialEngagementScore.get_user_leaderboard_position(
            self.course.id,
            self.user.id
        )

        self.assertEqual(
            leaderboard_position['score'],
            85
        )

        # user should be in place #2
        self.assertEqual(
            leaderboard_position['position'],
            2
        )

        self.assertEqual(get_notifications_count_for_user(self.user.id), 1)

        leaderboard_position = StudentSocialEngagementScore.get_user_leaderboard_position(
            self.course.id,
            self.user2.id
        )

        self.assertEqual(
            leaderboard_position['score'],
            170
        )

        # user2 should be in place #1
        self.assertEqual(
            leaderboard_position['position'],
            1
        )

        self.assertEqual(get_notifications_count_for_user(self.user2.id), 1)