diff --git a/common/djangoapps/enrollment/api.py b/common/djangoapps/enrollment/api.py index 2645b5dcb4..57035d4bc2 100644 --- a/common/djangoapps/enrollment/api.py +++ b/common/djangoapps/enrollment/api.py @@ -18,7 +18,7 @@ log = logging.getLogger(__name__) DEFAULT_DATA_API = 'enrollment.data' -def get_enrollments(user_id): +def get_enrollments(user_id, include_inactive=False): """Retrieves all the courses a user is enrolled in. Takes a user and retrieves all relative enrollments. Includes information regarding how the user is enrolled @@ -26,6 +26,7 @@ def get_enrollments(user_id): Args: user_id (str): The username of the user we want to retrieve course enrollment information for. + include_inactive (bool): Determines whether inactive enrollments will be included Returns: A list of enrollment information for the given user. @@ -92,7 +93,7 @@ def get_enrollments(user_id): ] """ - return _data_api().get_course_enrollments(user_id) + return _data_api().get_course_enrollments(user_id, include_inactive) def get_enrollment(user_id, course_id): diff --git a/common/djangoapps/enrollment/data.py b/common/djangoapps/enrollment/data.py index faf45a69be..033a1380ce 100644 --- a/common/djangoapps/enrollment/data.py +++ b/common/djangoapps/enrollment/data.py @@ -31,13 +31,15 @@ from student.models import ( log = logging.getLogger(__name__) -def get_course_enrollments(user_id): +def get_course_enrollments(user_id, include_inactive=False): """Retrieve a list representing all aggregated data for a user's course enrollments. Construct a representation of all course enrollment data for a specific user. Args: user_id (str): The name of the user to retrieve course enrollment information for. + include_inactive (bool): Determines whether inactive enrollments will be included + Returns: A serializable list of dictionaries of all aggregated enrollment data for a user. @@ -45,9 +47,11 @@ def get_course_enrollments(user_id): """ qset = CourseEnrollment.objects.filter( user__username=user_id, - is_active=True ).order_by('created') + if not include_inactive: + qset = qset.filter(is_active=True) + enrollments = CourseEnrollmentSerializer(qset, many=True).data # Find deleted courses and filter them out of the results diff --git a/common/djangoapps/enrollment/tests/fake_data_api.py b/common/djangoapps/enrollment/tests/fake_data_api.py index 2c306e9f4e..88edc70e5d 100644 --- a/common/djangoapps/enrollment/tests/fake_data_api.py +++ b/common/djangoapps/enrollment/tests/fake_data_api.py @@ -24,7 +24,7 @@ _VERIFIED_MODE_EXPIRED = [] # pylint: disable=unused-argument -def get_course_enrollments(student_id): +def get_course_enrollments(student_id, include_inactive=False): """Stubbed out Enrollment data request.""" return _ENROLLMENTS diff --git a/common/djangoapps/enrollment/tests/test_data.py b/common/djangoapps/enrollment/tests/test_data.py index a99cd88346..9936148477 100644 --- a/common/djangoapps/enrollment/tests/test_data.py +++ b/common/djangoapps/enrollment/tests/test_data.py @@ -150,6 +150,42 @@ class EnrollmentDataTest(ModuleStoreTestCase): updated_results = data.get_course_enrollments(self.user.username) self.assertEqual(results, updated_results) + def test_get_enrollments_including_inactive(self): + """ Verify that if 'include_inactive' is True, all enrollments + are returned including inactive. + """ + course_modes, course_numbers = ['honor', 'verified', 'audit'], ['1', '2', '3'] + created_courses = [] + for course_number in course_numbers: + created_courses.append(CourseFactory.create(number=course_number)) + + created_enrollments = [] + for course in created_courses: + self._create_course_modes(course_modes, course=course) + # Create the original enrollment. + created_enrollments.append(data.create_course_enrollment( + self.user.username, + unicode(course.id), + 'honor', + True + )) + + # deactivate one enrollment + data.update_course_enrollment( + self.user.username, + unicode(created_courses[0].id), + 'honor', + False + ) + + # by default in-active enrollment will be excluded. + results = data.get_course_enrollments(self.user.username) + self.assertNotEqual(len(results), len(created_enrollments)) + + # we can get all enrollments including inactive by passing "include_inactive" + results = data.get_course_enrollments(self.user.username, include_inactive=True) + self.assertEqual(len(results), len(created_enrollments)) + @ddt.data( # Default (no course modes in the database) # Expect that users are automatically enrolled as "honor". diff --git a/lms/djangoapps/support/static/support/templates/enrollment.underscore b/lms/djangoapps/support/static/support/templates/enrollment.underscore index f4baabacca..1c3b4db1c1 100644 --- a/lms/djangoapps/support/static/support/templates/enrollment.underscore +++ b/lms/djangoapps/support/static/support/templates/enrollment.underscore @@ -27,6 +27,7 @@