def test_no_engagment_records(self): """ Verify that we get None back """ self.assertIsNone(StudentSocialEngagementScore.get_user_engagement_score(self.course.id, self.user.id)) self.assertIsNone(StudentSocialEngagementScore.get_user_engagement_score(self.course.id, self.user2.id)) # no entries, means a rank of 0! self.assertEqual( StudentSocialEngagementScore.get_user_leaderboard_position( self.course.id, self.user.id )['score'], 0 ) self.assertEqual( StudentSocialEngagementScore.get_user_leaderboard_position( self.course.id, self.user.id )['position'], 0 ) self.assertFalse( StudentSocialEngagementScore.generate_leaderboard(self.course.id) )
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)
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) stats = ( self.DEFAULT_STATS, { 'num_threads': 2, 'num_comments': 2, 'num_replies': 2, 'num_upvotes': 2, 'num_thread_followers': 2, 'num_comments_generated': 2, } ) with patch('social_engagement.engagement._get_course_social_stats') as mock_func: mock_func.return_value = zip(self.user_ids, stats) update_course_engagement(self.course.id) leaderboard_position = StudentSocialEngagementScore.get_user_leaderboard_position( self.course.id, user_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, user_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)
def test_update_engagement_score(self): """ Basic update operation """ self.assertEqual(get_notifications_count_for_user(self.user.id), 0) StudentSocialEngagementScore.save_user_engagement_score(self.course.id, self.user.id, 10) # then update StudentSocialEngagementScore.save_user_engagement_score(self.course.id, self.user.id, 20) # read it back self.assertEqual( StudentSocialEngagementScore.get_user_leaderboard_position( self.course.id, user_id=self.user.id )['score'], 20 ) # confirm there are two entries in the History table self.assertEqual( StudentSocialEngagementScoreHistory.objects.filter( course_id=self.course.id, user__id=self.user.id ).count(), 2 ) self.assertEqual( StudentSocialEngagementScore.get_user_leaderboard_position( self.course.id, user_id=self.user.id )['position'], 1 ) # look at the leaderboard data = StudentSocialEngagementScore.generate_leaderboard(self.course.id) self.assertIsNotNone(data['queryset']) self.assertEqual(len(data['queryset']), 1) self.assertEqual(data['total_user_count'], 2) self.assertEqual(data['course_avg'], 10) self.assertEqual(data['queryset'][0].user.id, self.user.id) self.assertEqual(data['queryset'][0].score, 20) # confirm there is a just a single notification was generated self.assertEqual(get_notifications_count_for_user(self.user.id), 1)
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 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 test_save_first_engagement_score(self): """ Basic write operation """ self.assertEqual(get_notifications_count_for_user(self.user.id), 0) StudentSocialEngagementScore.save_user_engagement_score(self.course.id, self.user.id, 10) # read it back self.assertEqual( StudentSocialEngagementScore.get_user_leaderboard_position( self.course.id, self.user.id )['score'], 10 ) # confirm there is an entry in the History table self.assertEqual( StudentSocialEngagementScoreHistory.objects.filter( course_id=self.course.id, user__id=self.user.id ).count(), 1 ) self.assertEqual( StudentSocialEngagementScore.get_user_leaderboard_position( self.course.id, self.user.id )['position'], 1 ) # look at the leaderboard leaderboard = StudentSocialEngagementScore.generate_leaderboard(self.course.id) self.assertIsNotNone(leaderboard) self.assertEqual(len(leaderboard), 1) self.assertEqual(leaderboard[0]['user__id'], self.user.id) self.assertEqual(leaderboard[0]['score'], 10) # confirm there is a notification was generated self.assertEqual(get_notifications_count_for_user(self.user.id), 1)
def test_update_engagement_score(self): """ Basic update operation """ self.assertEqual(get_notifications_count_for_user(self.user.id), 0) StudentSocialEngagementScore.save_user_engagement_score( self.course.id, self.user.id, 10) # then update StudentSocialEngagementScore.save_user_engagement_score( self.course.id, self.user.id, 20) # read it back self.assertEqual( StudentSocialEngagementScore.get_user_leaderboard_position( self.course.id, self.user.id)['score'], 20) # confirm there are two entries in the History table self.assertEqual( StudentSocialEngagementScoreHistory.objects.filter( course_id=self.course.id, user__id=self.user.id).count(), 2) self.assertEqual( StudentSocialEngagementScore.get_user_leaderboard_position( self.course.id, self.user.id)['position'], 1) # look at the leaderboard course_avg, enrollment_count, leaderboard = StudentSocialEngagementScore.generate_leaderboard( self.course.id) self.assertIsNotNone(leaderboard) self.assertEqual(len(leaderboard), 1) self.assertEqual(enrollment_count, 2) self.assertEqual(course_avg, 10) self.assertEqual(leaderboard[0]['user__id'], self.user.id) self.assertEqual(leaderboard[0]['score'], 20) # confirm there is a just a single notification was generated self.assertEqual(get_notifications_count_for_user(self.user.id), 1)
def test_save_first_engagement_score(self): """ Basic write operation """ self.assertEqual(get_notifications_count_for_user(self.user.id), 0) StudentSocialEngagementScore.save_user_engagement_score( self.course.id, self.user.id, 10) # read it back self.assertEqual( StudentSocialEngagementScore.get_user_leaderboard_position( self.course.id, user_id=self.user.id)['score'], 10) # confirm there is an entry in the History table self.assertEqual( StudentSocialEngagementScoreHistory.objects.filter( course_id=self.course.id, user__id=self.user.id).count(), 1) self.assertEqual( StudentSocialEngagementScore.get_user_leaderboard_position( self.course.id, user_id=self.user.id)['position'], 1) # look at the leaderboard data = StudentSocialEngagementScore.generate_leaderboard( self.course.id) self.assertIsNotNone(data['queryset']) self.assertEqual(len(data['queryset']), 1) self.assertEqual(data['total_user_count'], 2) self.assertEqual(data['course_avg'], 5) self.assertEqual(data['queryset'][0].user.id, self.user.id) self.assertEqual(data['queryset'][0].score, 10) # confirm there is a notification was generated self.assertEqual(get_notifications_count_for_user(self.user.id), 1)
def test_no_engagment_records(self): """ Verify that we get None back """ self.assertIsNone( StudentSocialEngagementScore.get_user_engagement_score( self.course.id, self.user.id)) self.assertIsNone( StudentSocialEngagementScore.get_user_engagement_score( self.course.id, self.user2.id)) # no entries, means a rank of 0! self.assertEqual( StudentSocialEngagementScore.get_user_leaderboard_position( self.course.id, self.user.id)['score'], 0) self.assertEqual( StudentSocialEngagementScore.get_user_leaderboard_position( self.course.id, self.user.id)['position'], 0) self.assertFalse( StudentSocialEngagementScore.generate_leaderboard( self.course.id)[1])
def test_update_user_engagement_score(self): """ Run the engagement calculation for a user in a course """ self.assertEqual(get_notifications_count_for_user(self.user.id), 0) with patch('social_engagement.engagement._get_course_social_stats' ) as mock_func: mock_func.return_value = ((self.user.id, self.DEFAULT_STATS), ) update_course_engagement(self.course.id) leaderboard_position = StudentSocialEngagementScore.get_user_leaderboard_position( self.course.id, user_id=self.user.id) self.assertEqual(leaderboard_position['score'], 85) self.assertEqual(leaderboard_position['position'], 1) self.assertEqual(get_notifications_count_for_user(self.user.id), 1)
def test_update_user_engagement_score(self): """ Run the engagement calculation for a user in a course """ self.assertEqual(get_notifications_count_for_user(self.user.id), 0) with patch('social_engagement.engagement._get_course_social_stats') as mock_func: mock_func.return_value = ((self.user.id, self.DEFAULT_STATS),) update_course_engagement(self.course.id) leaderboard_position = StudentSocialEngagementScore.get_user_leaderboard_position( self.course.id, user_id=self.user.id ) self.assertEqual(leaderboard_position['score'], 85) self.assertEqual(leaderboard_position['position'], 1) self.assertEqual(get_notifications_count_for_user(self.user.id), 1)