Ejemplo n.º 1
0
    def test_student_enrollment_status(self, is_enrolled, enrolled_mode,
                                       is_upgrade_required, mock_get_mode):
        """Verify that program data is supplemented with the student's enrollment status."""
        expected_upgrade_url = '{root}/{path}?sku={sku}'.format(
            root=ECOMMERCE_URL_ROOT,
            path=self.checkout_path.strip('/'),
            sku=self.sku,
        )

        update_commerce_config(enabled=True, checkout_page=self.checkout_path)

        mock_mode = mock.Mock()
        mock_mode.sku = self.sku
        mock_get_mode.return_value = mock_mode

        if is_enrolled:
            CourseEnrollmentFactory(user=self.user,
                                    course_id=self.course.id,
                                    mode=enrolled_mode)  # pylint: disable=no-member

        data = utils.ProgramDataExtender(self.program, self.user).extend()

        self._assert_supplemented(
            data,
            is_enrolled=is_enrolled,
            upgrade_url=expected_upgrade_url if is_upgrade_required else None)
Ejemplo n.º 2
0
    def test_course_course_ended(self, days_offset):
        self.course.end = timezone.now() + datetime.timedelta(days=days_offset)
        self.course = self.update_course(self.course, self.user.id)  # pylint: disable=no-member

        data = utils.ProgramDataExtender(self.program, self.user).extend()

        self._assert_supplemented(data)
Ejemplo n.º 3
0
def program_details(request, program_id):
    """View details about a specific program."""
    programs_config = ProgramsApiConfig.current()
    if not programs_config.show_program_details:
        raise Http404

    program_data = utils.get_programs(request.user, program_id=program_id)

    if not program_data:
        raise Http404

    program_data = utils.ProgramDataExtender(program_data, request.user).extend()

    urls = {
        'program_listing_url': reverse('program_listing_view'),
        'track_selection_url': strip_course_id(
            reverse('course_modes_choose', kwargs={'course_id': FAKE_COURSE_KEY})
        ),
        'commerce_api_url': reverse('commerce_api:v0:baskets:create'),
    }

    context = {
        'program_data': program_data,
        'urls': urls,
        'show_program_listing': programs_config.show_program_listing,
        'nav_hidden': True,
        'disable_courseware_js': True,
        'uses_pattern_library': True
    }

    return render_to_response('learner_dashboard/program_details.html', context)
Ejemplo n.º 4
0
 def test_organization_logo_missing(self,
                                    mock_get_organization_by_short_name):
     """
     Verify the logo image is not set if the organizations api returns organization,
     but the logo is not available
     """
     mock_get_organization_by_short_name.return_value = {'logo': None}
     data = utils.ProgramDataExtender(self.program, self.user).extend()
     self.assertEqual(data['organizations'][0].get('img'), None)
Ejemplo n.º 5
0
    def test_organization_logo_exists(self,
                                      mock_get_organization_by_short_name):
        """ Verify the logo image is set from the organizations api """
        mock_logo_url = 'edx/logo.png'
        mock_image = mock.Mock()
        mock_image.url = mock_logo_url
        mock_get_organization_by_short_name.return_value = {'logo': mock_image}

        data = utils.ProgramDataExtender(self.program, self.user).extend()
        self.assertEqual(data['organizations'][0].get('img'), mock_logo_url)
Ejemplo n.º 6
0
    def test_inactive_enrollment_no_upgrade(self, enrolled_mode):
        """Verify that a student with an inactive enrollment isn't encouraged to upgrade."""
        update_commerce_config(enabled=True, checkout_page=self.checkout_path)

        CourseEnrollmentFactory(
            user=self.user,
            course_id=self.course.id,  # pylint: disable=no-member
            mode=enrolled_mode,
            is_active=False,
        )

        data = utils.ProgramDataExtender(self.program, self.user).extend()

        self._assert_supplemented(data)
Ejemplo n.º 7
0
def program_details_marketing(request, program_id):
    """View details about a specific program."""

    programs_config = ProgramsApiConfig.current()
    if not programs_config.show_program_details:
        raise Http404

    auth_user = authenticate(
        username='******',
        password='******') if request.user.is_anonymous() else request.user

    try:
        # If the ID is a UUID, the requested program resides in the catalog.
        uuid.UUID(program_id)

        program_data = get_catalog_programs(auth_user, uuid=program_id)
        if program_data:
            program_data = munge_catalog_program(program_data)
    except ValueError:
        program_data = utils.get_programs(auth_user, program_id=program_id)

    if not program_data:
        raise Http404

    program_data = utils.ProgramDataExtender(program_data, auth_user).extend()

    urls = {
        'program_listing_url':
        reverse('program_listing_view'),
        'track_selection_url':
        strip_course_id(
            reverse('course_modes_choose',
                    kwargs={'course_id': FAKE_COURSE_KEY})),
        'commerce_api_url':
        reverse('commerce_api:v0:baskets:create'),
    }

    context = {
        'program_data': program_data,
        'urls': urls,
        'show_program_listing': programs_config.show_program_listing,
        'nav_hidden': True,
        'disable_courseware_js': True,
        'uses_pattern_library': True,
        'user_preferences': get_user_preferences(auth_user)
    }

    return render_to_response(
        'learner_dashboard/program_details_marketing.html', context)
Ejemplo n.º 8
0
    def test_no_enrollment_start_date(self):
        """Verify that a closed course with no explicit enrollment start date doesn't cause an error.

        Regression test for ECOM-4973.
        """
        self.course.enrollment_end = datetime.datetime.now(
            utc) - datetime.timedelta(days=1)
        self.course = self.update_course(self.course, self.user.id)  # pylint: disable=no-member

        data = utils.ProgramDataExtender(self.program, self.user).extend()

        self._assert_supplemented(
            data,
            is_enrollment_open=False,
        )
Ejemplo n.º 9
0
    def test_ecommerce_disabled(self, mock_get_mode):
        """Verify that the utility can operate when the ecommerce service is disabled."""
        update_commerce_config(enabled=False, checkout_page=self.checkout_path)

        mock_mode = mock.Mock()
        mock_mode.sku = self.sku
        mock_get_mode.return_value = mock_mode

        CourseEnrollmentFactory(user=self.user,
                                course_id=self.course.id,
                                mode=MODES.audit)  # pylint: disable=no-member

        data = utils.ProgramDataExtender(self.program, self.user).extend()

        self._assert_supplemented(data, is_enrolled=True, upgrade_url=None)
Ejemplo n.º 10
0
    def test_certificate_url_retrieval(self, is_uuid_available,
                                       mock_html_certs_enabled,
                                       mock_get_cert_data):
        """Verify that the student's run mode certificate is included, when available."""
        test_uuid = uuid.uuid4().hex
        mock_get_cert_data.return_value = {
            'uuid': test_uuid
        } if is_uuid_available else {}
        mock_html_certs_enabled.return_value = True

        data = utils.ProgramDataExtender(self.program, self.user).extend()

        expected_url = reverse('certificates:render_cert_by_uuid',
                               kwargs={'certificate_uuid': test_uuid
                                       }) if is_uuid_available else None

        self._assert_supplemented(data, certificate_url=expected_url)
Ejemplo n.º 11
0
    def test_course_enrollment_status(self, start_offset, end_offset,
                                      is_enrollment_open):
        """Verify that course enrollment status is reflected correctly."""
        self.course.enrollment_start = timezone.now() - datetime.timedelta(
            days=start_offset)
        self.course.enrollment_end = timezone.now() - datetime.timedelta(
            days=end_offset)
        self.course = self.update_course(self.course, self.user.id)  # pylint: disable=no-member

        data = utils.ProgramDataExtender(self.program, self.user).extend()

        self._assert_supplemented(
            data,
            is_enrollment_open=is_enrollment_open,
            enrollment_open_date=strftime_localized(
                self.course.enrollment_start, 'SHORT_DATE'),
        )