def test_get_engaged_programs(self): """ Verify that correct programs are returned in the correct order when the user has multiple enrollments. """ self.create_programs_config() self.mock_programs_api() enrollments = self._create_enrollments(*self.COURSE_KEYS) actual = get_engaged_programs(self.user, enrollments) programs = self.PROGRAMS_API_RESPONSE['results'] # get_engaged_programs iterates across a list returned by the programs # API to create flattened lists keyed by course ID. These lists are # joined in order of enrollment creation time when constructing the # list of engaged programs. As such, two programs sharing an enrollment # should be returned in the same order found in the API response. In this # case, the most recently created enrollment is for a run mode present in # the last two test programs. expected = [ programs[1], programs[2], programs[0], ] self.assertEqual(expected, actual)
def view_programs(request): """View programs in which the user is engaged.""" show_program_listing = ProgramsApiConfig.current().show_program_listing if not show_program_listing: raise Http404 enrollments = list(get_course_enrollments(request.user, None, [])) programs = get_engaged_programs(request.user, enrollments) # TODO: Pull 'xseries' string from configuration model. marketing_root = urljoin(settings.MKTG_URLS.get('ROOT'), 'xseries').strip('/') for program in programs: program['marketing_url'] = '{root}/{slug}'.format( root=marketing_root, slug=program['marketing_slug']) return render_to_response( 'learner_dashboard/programs.html', { 'programs': programs, 'xseries_url': marketing_root if ProgramsApiConfig.current().show_xseries_ad else None, 'nav_hidden': True, 'show_program_listing': show_program_listing })
def test_get_engaged_no_enrollments(self): """Verify that no programs are returned when the user has no enrollments.""" self.create_programs_config() self.mock_programs_api() actual = get_engaged_programs(self.user, []) expected = [] self.assertEqual(expected, actual)
def test_get_engaged_no_programs(self): """Verify that no programs are returned when no programs exist.""" self.create_programs_config() self.mock_programs_api(data=[]) enrollments = self._create_enrollments(*self.COURSE_KEYS) actual = get_engaged_programs(self.user, enrollments) expected = [] self.assertEqual(expected, actual)
def test_get_engaged_programs_shared_enrollment(self): """ Verify that correct programs are returned when the user has a single enrollment appearing in multiple programs. """ self.create_programs_config() self.mock_programs_api() enrollments = self._create_enrollments(self.COURSE_KEYS[-1]) actual = get_engaged_programs(self.user, enrollments) programs = self.PROGRAMS_API_RESPONSE['results'] expected = programs[-2:] self.assertEqual(expected, actual)
def test_get_engaged_programs_single_program(self): """ Verify that correct program is returned when the user has a single enrollment appearing in one program. """ self.create_programs_config() self.mock_programs_api() enrollments = self._create_enrollments(self.COURSE_KEYS[0]) actual = get_engaged_programs(self.user, enrollments) programs = self.PROGRAMS_API_RESPONSE['results'] for program in programs: program['display_category'] = get_display_category(program) expected = [programs[0]] self.assertEqual(expected, actual)
def view_programs(request): """View programs in which the user is engaged.""" if not ProgramsApiConfig.current().is_student_dashboard_enabled: raise Http404 enrollments = list(get_course_enrollments(request.user, None, [])) programs = get_engaged_programs(request.user, enrollments) # TODO: Pull 'xseries' string from configuration model. marketing_root = urljoin(settings.MKTG_URLS.get('ROOT'), 'xseries').strip('/') for program in programs: program['marketing_url'] = '{root}/{slug}'.format( root=marketing_root, slug=program['marketing_slug'] ) return render_to_response('learner_dashboard/programs.html', { 'programs': programs, 'xseries_url': marketing_root if ProgramsApiConfig.current().show_xseries_ad else None })