예제 #1
0
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
예제 #4
0
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)
예제 #5
0
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)
예제 #6
0
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)