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)
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)
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)
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)
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)
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)
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)
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, )
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)
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)
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'), )