def send_course_completion_statement(lrs_configuration, user, course_overview, course_grade): """ Send xAPI statement for course completion. Arguments: lrs_configuration (XAPILRSConfiguration): XAPILRSConfiguration instance where to send statements. user (User): Django User object. course_overview (CourseOverview): Course over view object containing course details. course_grade (CourseGrade): course grade object. """ user_details = LearnerInfoSerializer(user) course_details = CourseInfoSerializer( course_overview, context={'site': lrs_configuration.enterprise_customer.site}) LOGGER.info( 'Sending course completion to xAPI for user: {username}, course: {course_key} with {percentage}%' .format(username=user.username if user else '', course_key=six.text_type(course_overview.id), percentage=course_grade.percent * 100)) statement = LearnerCourseCompletionStatement( user, course_overview, user_details.data, course_details.data, course_grade, ) EnterpriseXAPIClient(lrs_configuration).save_statement(statement)
def test_data(self, mock_third_party_api): """ Verify that serializer data is as expected. """ mock_third_party_api.return_value.get_remote_id.return_value = TEST_ENTERPRISE_SSO_UID with mock.patch.object(self.user, 'profile', create=True) as mock_user_profile: mock_user_profile.country.code = 'PK' assert LearnerInfoSerializer(self.user).data == self.expected_data
def test_data_with_no_enterprise_customer_user(self): """ Verify that serializer data is as expected in case when user does not belong to an enterprise. """ # Remove the link between the user and enterprise customer self.enterprise_customer_user.delete() # update expected data self.expected_data.update(enterprise_sso_uid=None, enterprise_user_id=None) with mock.patch.object(self.user, 'profile', create=True) as mock_user_profile: mock_user_profile.country.code = 'PK' assert LearnerInfoSerializer(self.user).data == self.expected_data
def send_course_enrollment_statement(lrs_configuration, course_enrollment): """ Send xAPI statement for course enrollment. Arguments: lrs_configuration (XAPILRSConfiguration): XAPILRSConfiguration instance where to send statements. course_enrollment (CourseEnrollment): Course enrollment object. """ user_details = LearnerInfoSerializer(course_enrollment.user) course_details = CourseInfoSerializer(course_enrollment.course) statement = LearnerCourseEnrollmentStatement( course_enrollment.user, course_enrollment.course, user_details.data, course_details.data, ) EnterpriseXAPIClient(lrs_configuration).save_statement(statement)
def send_course_completion_statement(lrs_configuration, user, course_overview, course_grade): """ Send xAPI statement for course completion. Arguments: lrs_configuration (XAPILRSConfiguration): XAPILRSConfiguration instance where to send statements. user (User): Django User object. course_overview (CourseOverview): Course over view object containing course details. course_grade (CourseGrade): course grade object. """ user_details = LearnerInfoSerializer(user) course_details = CourseInfoSerializer(course_overview) statement = LearnerCourseCompletionStatement( user, course_overview, user_details.data, course_details.data, course_grade, ) EnterpriseXAPIClient(lrs_configuration).save_statement(statement)
def send_course_enrollment_statement(lrs_configuration, course_enrollment): """ Send xAPI statement for course enrollment. Arguments: lrs_configuration (XAPILRSConfiguration): XAPILRSConfiguration instance where to send statements. course_enrollment (CourseEnrollment): Course enrollment object. """ user_details = LearnerInfoSerializer(course_enrollment.user) course_details = CourseInfoSerializer( course_enrollment.course, context={'site': lrs_configuration.enterprise_customer.site}) LOGGER.info( 'Sending course enrollment to xAPI for user: {username} for course: {course_key}' .format(username=course_enrollment.user.username, course_key=six.text_type(course_enrollment.course.id))) statement = LearnerCourseEnrollmentStatement( course_enrollment.user, course_enrollment.course, user_details.data, course_details.data, ) EnterpriseXAPIClient(lrs_configuration).save_statement(statement)