Esempio n. 1
0
    def test_get_enterprise_customer_user(self):
        user = UserFactory()
        enterprise_customer = EnterpriseCustomerFactory()

        assert utils.get_enterprise_customer_user(
            user.id, enterprise_customer.uuid) is None

        enterprise_customer_user = EnterpriseCustomerUserFactory(
            user_id=user.id, enterprise_customer=enterprise_customer)
        assert utils.get_enterprise_customer_user(
            user.id, enterprise_customer.uuid) == enterprise_customer_user
Esempio n. 2
0
 def is_user_linked(self, email):
     """
     Check whether user is linked to the enterprise customer or not.
     """
     user = User.objects.get(email=email)
     return utils.get_enterprise_customer_user(
         user.id, self._enterprise_customer.uuid)
Esempio n. 3
0
    def get(self, request, enterprise_uuid, course_id):
        """
        Handle the enrollment of enterprise learner in the provided course.

        Based on `enterprise_uuid` in URL, the view will decide which
        enterprise customer's course enrollment record should be created.

        Depending on the value of query parameter `course_mode` then learner
        will be either redirected to LMS dashboard for audit modes or
        redirected to ecommerce basket flow for payment of premium modes.
        """
        # Verify that all necessary resources are present
        verify_edx_resources()
        enrollment_course_mode = request.GET.get('course_mode')

        # Redirect the learner to LMS dashboard in case no course mode is
        # provided as query parameter `course_mode`
        if not enrollment_course_mode:
            return redirect(LMS_DASHBOARD_URL)

        try:
            enrollment_client = EnrollmentApiClient()
            course_modes = enrollment_client.get_course_modes(course_id)
        except HttpClientError:
            logger.error(
                'Failed to determine available course modes for course ID: %s',
                course_id)
            raise Http404

        # Verify that the request user belongs to the enterprise against the
        # provided `enterprise_uuid`.
        enterprise_customer = get_enterprise_customer_or_404(enterprise_uuid)
        enterprise_customer_user = get_enterprise_customer_user(
            request.user.id, enterprise_customer.uuid)
        if not enterprise_customer_user:
            raise Http404

        selected_course_mode = None
        for course_mode in course_modes:
            if course_mode['slug'] == enrollment_course_mode:
                selected_course_mode = course_mode
                break

        if not selected_course_mode:
            return redirect(LMS_DASHBOARD_URL)

        # Create the Enterprise backend database records for this course
        # enrollment
        EnterpriseCourseEnrollment.objects.update_or_create(
            enterprise_customer_user=enterprise_customer_user,
            course_id=course_id,
            defaults={
                'consent_granted': True,
            })

        audit_modes = getattr(settings,
                              'ENTERPRISE_COURSE_ENROLLMENT_AUDIT_MODES',
                              ['audit', 'honor'])
        if selected_course_mode['slug'] in audit_modes:
            # In case of Audit course modes enroll the learner directly through
            # enrollment API client and redirect the learner to dashboard.
            enrollment_api_client = EnrollmentApiClient()
            enrollment_api_client.enroll_user_in_course(
                request.user.username, course_id, selected_course_mode['slug'])

            return redirect(LMS_COURSEWARE_URL.format(course_id=course_id))

        # redirect the enterprise learner to the ecommerce flow in LMS
        # Note: LMS start flow automatically detects the paid mode
        return redirect(
            LMS_START_PREMIUM_COURSE_FLOW_URL.format(course_id=course_id))