diff --git a/openedx/core/djangoapps/programs/tests/test_utils.py b/openedx/core/djangoapps/programs/tests/test_utils.py index 0ec5f773d075018d88da5b3e2d5c2f721dda0f03..41d493f8860798fff48740f52fc8b6628d5f54cf 100644 --- a/openedx/core/djangoapps/programs/tests/test_utils.py +++ b/openedx/core/djangoapps/programs/tests/test_utils.py @@ -11,6 +11,7 @@ import mock from nose.plugins.attrib import attr from pytz import utc +from course_modes.models import CourseMode from lms.djangoapps.certificates.api import MODES from lms.djangoapps.commerce.tests.test_utils import update_commerce_config from openedx.core.djangoapps.catalog.tests.factories import ( @@ -151,6 +152,42 @@ class TestProgramProgressMeter(TestCase): self.assertEqual(meter.progress(count_only=False), expected) + def test_no_id_professional_in_progress(self, mock_get_programs): + """ + Verify that the progress meter treats no-id-professional enrollments + as professional. + """ + course_run_key = generate_course_run_key() + data = [ + ProgramFactory( + courses=[ + CourseFactory(course_runs=[ + CourseRunFactory(key=course_run_key, type=CourseMode.PROFESSIONAL), + ]), + ] + ) + ] + mock_get_programs.return_value = data + + CourseEnrollmentFactory( + user=self.user, course_id=course_run_key, + mode=CourseMode.NO_ID_PROFESSIONAL_MODE + ) + + meter = ProgramProgressMeter(self.user) + + program = data[0] + expected = [ + ProgressFactory( + uuid=program['uuid'], + completed=[], + in_progress=[program['courses'][0]], + not_started=[] + ) + ] + + self.assertEqual(meter.progress(count_only=False), expected) + @ddt.data(1, -1) def test_in_progress_course_upgrade_deadline_check(self, modifier, mock_get_programs): """ diff --git a/openedx/core/djangoapps/programs/utils.py b/openedx/core/djangoapps/programs/utils.py index 4bf2664d595af8decf3d0db8ba809adc6462c7e2..ec4b99125f69deae844a2dcdba1bd68073c67eff 100644 --- a/openedx/core/djangoapps/programs/utils.py +++ b/openedx/core/djangoapps/programs/utils.py @@ -75,7 +75,10 @@ class ProgramProgressMeter(object): for enrollment in self.enrollments: # enrollment.course_id is really a CourseKey (╯ಠ_ಠ)╯︵ â”»â”â”» enrollment_id = unicode(enrollment.course_id) - self.enrolled_run_modes[enrollment_id] = enrollment.mode + mode = enrollment.mode + if mode == CourseMode.NO_ID_PROFESSIONAL_MODE: + mode = CourseMode.PROFESSIONAL + self.enrolled_run_modes[enrollment_id] = mode # We can't use dict.keys() for this because the course run ids need to be ordered self.course_run_ids.append(enrollment_id)