def test_all_courses(self): """ Verifies that we can calculate over all courses """ course2 = CourseFactory.create(org='foo', course='bar', run='baz') CourseEnrollment.enroll(self.user, course2.id) self.assertEqual(CourseEnrollment.objects.filter(course_id=course2.id).count(), 1) 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 whole course and re-calc update_all_courses_engagement_scores() leaderboard = StudentSocialEngagementScore.generate_leaderboard(self.course.id) self.assertEqual(len(leaderboard), 2) leaderboard = StudentSocialEngagementScore.generate_leaderboard(course2.id) self.assertEqual(len(leaderboard), 1)
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)
def test_closed_course(self, store): """ Make sure we can force update closed course """ course2 = CourseFactory.create(org='foo', course='bar', run='baz', end=datetime.now(pytz.UTC) - timedelta(days=1), default_store=store) CourseEnrollment.enroll(self.user, course2.id) CourseEnrollment.enroll(self.user2, course2.id) 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 whole course and re-calc update_all_courses_engagement_scores() # shouldn't be anything in there because course is closed course_avg, enrollment_count, leaderboard = StudentSocialEngagementScore.generate_leaderboard( course2.id) self.assertEqual(len(leaderboard), 0) self.assertEqual(course_avg, 0) # update whole course and re-calc update_all_courses_engagement_scores(compute_if_closed_course=True) # shouldn't be anything in there because course is closed course_avg, enrollment_count, leaderboard = StudentSocialEngagementScore.generate_leaderboard( course2.id) self.assertEqual(len(leaderboard), 2) self.assertEqual(course_avg, 85)
def test_all_courses(self, store): """ Verifies that we can calculate over all courses """ course2 = CourseFactory.create(org='foo', course='bar', run='baz', default_store=store) CourseEnrollment.enroll(self.user, course2.id) self.assertEqual( CourseEnrollment.objects.filter(course_id=course2.id).count(), 1) 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 whole course and re-calc update_all_courses_engagement_scores() course_avg, enrollment_count, leaderboard = StudentSocialEngagementScore.generate_leaderboard( self.course.id) self.assertEqual(len(leaderboard), 2) self.assertEqual(course_avg, 85) course_avg, enrollment_count, leaderboard = StudentSocialEngagementScore.generate_leaderboard( course2.id) self.assertEqual(len(leaderboard), 1) self.assertEqual(course_avg, 85)
def test_closed_course(self): """ Make sure we can force update closed course """ course2 = CourseFactory.create( org='foo', course='bar', run='baz', end=datetime.now(pytz.UTC) - timedelta(days=1) ) CourseEnrollment.enroll(self.user, course2.id) CourseEnrollment.enroll(self.user2, course2.id) 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 whole course and re-calc update_all_courses_engagement_scores() # shouldn't be anything in there because course is closed leaderboard = StudentSocialEngagementScore.generate_leaderboard(course2.id) self.assertEqual(len(leaderboard), 0) # update whole course and re-calc update_all_courses_engagement_scores(compute_if_closed_course=True) # shouldn't be anything in there because course is closed leaderboard = StudentSocialEngagementScore.generate_leaderboard(course2.id) self.assertEqual(len(leaderboard), 2)