From 761db165b5ea0501e9ebd29ba2cac0cbc3c2a553 Mon Sep 17 00:00:00 2001 From: ayub-khan Date: Thu, 1 Jun 2017 15:31:48 +0500 Subject: [PATCH] LEARNER-925 - Allow user to get program certificate if enrolled as verified in credit course --- .../djangoapps/programs/tests/test_utils.py | 17 +++++++++++++++++ openedx/core/djangoapps/programs/utils.py | 7 ++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/openedx/core/djangoapps/programs/tests/test_utils.py b/openedx/core/djangoapps/programs/tests/test_utils.py index 5b244ee0cc..7adf47c351 100644 --- a/openedx/core/djangoapps/programs/tests/test_utils.py +++ b/openedx/core/djangoapps/programs/tests/test_utils.py @@ -518,6 +518,23 @@ class TestProgramProgressMeter(TestCase): meter = ProgramProgressMeter(self.user) self.assertEqual(meter.completed_programs, [program['uuid']]) + @mock.patch(UTILS_MODULE + '.ProgramProgressMeter.completed_course_runs', new_callable=mock.PropertyMock) + def test_credit_course_counted_complete_for_verified(self, mock_completed_course_runs, mock_get_programs): + """ + Verify that 'credit' course certificate type are treated as if they were + "verified" when checking for course completion status. + """ + course_run_key = generate_course_run_key() + course = CourseFactory(course_runs=[ + CourseRunFactory(key=course_run_key, type='credit'), + ]) + program = ProgramFactory(courses=[course]) + mock_get_programs.return_value = [program] + self._create_enrollments(course_run_key) + meter = ProgramProgressMeter(self.user) + mock_completed_course_runs.return_value = [{'course_run_id': course_run_key, 'type': 'verified'}] + self.assertEqual(meter._is_course_complete(course), True) + @ddt.ddt @override_settings(ECOMMERCE_PUBLIC_URL_ROOT=ECOMMERCE_URL_ROOT) diff --git a/openedx/core/djangoapps/programs/utils.py b/openedx/core/djangoapps/programs/utils.py index 6cf250ec7b..ba0d5b0607 100644 --- a/openedx/core/djangoapps/programs/utils.py +++ b/openedx/core/djangoapps/programs/utils.py @@ -266,7 +266,12 @@ class ProgramProgressMeter(object): # count towards completion of a course in a program). This may change # in the future to make use of the more rigid set of "applicable seat # types" associated with each program type in the catalog. - 'type': course_run['type'], + + # Runs of type 'credit' are counted as 'verified' since verified + # certificates are earned when credit runs are completed. LEARNER-1274 + # tracks a cleaner way to do this using the discovery service's + # applicable_seat_types field. + 'type': 'verified' if course_run['type'] == 'credit' else course_run['type'], } return any(reshape(course_run) in self.completed_course_runs for course_run in course['course_runs'])