Merge pull request #12044 from edx/schen/ECOM-3198

ECOM-3198 Add banner image to the program listing program cards
This commit is contained in:
Simon Chen
2016-04-11 16:00:03 -04:00
17 changed files with 253 additions and 54 deletions

View File

@@ -18,6 +18,7 @@ from openedx.core.djangoapps.programs.utils import (
get_programs_for_dashboard,
get_programs_for_credentials,
get_engaged_programs,
get_display_category
)
from student.tests.factories import UserFactory, CourseEnrollmentFactory
@@ -109,6 +110,7 @@ class TestProgramRetrieval(ProgramsApiConfigMixin, ProgramsDataMixin,
actual = get_programs_for_dashboard(self.user, self.COURSE_KEYS)
expected = {}
for program in self.PROGRAMS_API_RESPONSE['results']:
program['display_category'] = get_display_category(program)
for course_code in program['course_codes']:
for run in course_code['run_modes']:
course_key = run['course_key']
@@ -206,6 +208,8 @@ class TestProgramRetrieval(ProgramsApiConfigMixin, ProgramsDataMixin,
actual = get_engaged_programs(self.user, enrollments)
programs = self.PROGRAMS_API_RESPONSE['results']
for program in programs:
program['display_category'] = get_display_category(program)
# 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
@@ -234,6 +238,8 @@ class TestProgramRetrieval(ProgramsApiConfigMixin, ProgramsDataMixin,
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)
@@ -251,6 +257,8 @@ class TestProgramRetrieval(ProgramsApiConfigMixin, ProgramsDataMixin,
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[-2:]
self.assertEqual(expected, actual)
@@ -277,3 +285,16 @@ class TestProgramRetrieval(ProgramsApiConfigMixin, ProgramsDataMixin,
expected = []
self.assertEqual(expected, actual)
@httpretty.activate
def test_get_display_category_success(self):
self.create_programs_config()
self.mock_programs_api()
actual_programs = get_programs(self.user)
for program in actual_programs:
expected = 'XSeries'
self.assertEqual(expected, get_display_category(program))
def test_get_display_category_none(self):
self.assertEqual('', get_display_category(None))
self.assertEqual('', get_display_category({"id": "test"}))

View File

@@ -46,6 +46,7 @@ def flatten_programs(programs, course_ids):
for run in course_code['run_modes']:
run_id = run['course_key']
if run_id in course_ids:
program['display_category'] = get_display_category(program)
flattened.setdefault(run_id, []).append(program)
except KeyError:
log.exception('Unable to parse Programs API response: %r', program)
@@ -113,6 +114,24 @@ def get_programs_for_credentials(user, programs_credentials):
return certificate_programs
def get_display_category(program):
""" Given the program, return the category of the program for display
Arguments:
program (Program): The program to get the display category string from
Returns:
string, the category for display to the user.
Empty string if the program has no category or is null.
"""
display_candidate = ''
if program and program.get('category'):
if program.get('category') == 'xseries':
display_candidate = 'XSeries'
else:
display_candidate = program.get('category', '').capitalize()
return display_candidate
def get_engaged_programs(user, enrollments):
"""Derive a list of programs in which the given user is engaged.