diff --git a/openedx/core/djangoapps/verified_track_content/partition_scheme.py b/openedx/core/djangoapps/verified_track_content/partition_scheme.py index 3f00aed3d8..2260265b12 100644 --- a/openedx/core/djangoapps/verified_track_content/partition_scheme.py +++ b/openedx/core/djangoapps/verified_track_content/partition_scheme.py @@ -30,7 +30,8 @@ class EnrollmentTrackUserPartition(UserPartition): def groups(self): """ Return the groups (based on CourseModes) for the course associated with this - EnrollmentTrackUserPartition instance. + EnrollmentTrackUserPartition instance. Note that only groups based on selectable + CourseModes are returned (which means that Credit will never be returned). If a course is using the Verified Track Cohorting pilot feature, this method returns an empty array regardless of registered CourseModes. @@ -42,7 +43,7 @@ class EnrollmentTrackUserPartition(UserPartition): return [ Group(ENROLLMENT_GROUP_IDS[mode.slug], unicode(mode.name)) - for mode in CourseMode.modes_for_course(course_key, include_expired=True, only_selectable=False) + for mode in CourseMode.modes_for_course(course_key, include_expired=True) ] def from_json(self): @@ -65,7 +66,8 @@ class EnrollmentTrackPartitionScheme(object): def get_group_for_user(cls, course_key, user, user_partition, **kwargs): # pylint: disable=unused-argument """ Returns the Group from the specified user partition to which the user - is assigned, via enrollment mode. + is assigned, via enrollment mode. If a user is in a Credit mode, the Verified or + Professional mode for the course is returned instead. If a course is using the Verified Track Cohorting pilot feature, this method returns None regardless of the user's enrollment mode. @@ -88,6 +90,8 @@ class EnrollmentTrackPartitionScheme(object): mode_slug, modes=CourseMode.modes_for_course(course_key, include_expired=True, only_selectable=False), ) + if course_mode and CourseMode.is_credit_mode(course_mode): + course_mode = CourseMode.verified_mode_for_course(course_key) if not course_mode: course_mode = CourseMode.DEFAULT_MODE return Group(ENROLLMENT_GROUP_IDS[course_mode.slug], unicode(course_mode.name)) diff --git a/openedx/core/djangoapps/verified_track_content/tests/test_partition_scheme.py b/openedx/core/djangoapps/verified_track_content/tests/test_partition_scheme.py index 8c46eacc36..0e007e2697 100644 --- a/openedx/core/djangoapps/verified_track_content/tests/test_partition_scheme.py +++ b/openedx/core/djangoapps/verified_track_content/tests/test_partition_scheme.py @@ -43,15 +43,15 @@ class EnrollmentTrackUserPartitionTest(SharedModuleStoreTestCase): self.course, CourseMode.VERIFIED, "Verified Enrollment Track", min_price=1, expiration_datetime=datetime.now(pytz.UTC) + timedelta(days=-1) ) - # Note that the credit mode is not selectable-- this is intentional. + # Note that the credit mode is not selectable-- this is intentional so we + # can test that it is filtered out. create_mode(self.course, CourseMode.CREDIT_MODE, "Credit Mode", min_price=2) partition = create_enrollment_track_partition(self.course) groups = partition.groups - self.assertEqual(3, len(groups)) + self.assertEqual(2, len(groups)) self.assertIsNotNone(self.get_group_by_name(partition, "Audit Enrollment Track")) self.assertIsNotNone(self.get_group_by_name(partition, "Verified Enrollment Track")) - self.assertIsNotNone(self.get_group_by_name(partition, "Credit Mode")) def test_to_json_supported(self): user_partition_json = create_enrollment_track_partition(self.course).to_json() @@ -138,7 +138,13 @@ class EnrollmentTrackPartitionSchemeTest(SharedModuleStoreTestCase): def test_enrolled_in_non_selectable(self): create_mode(self.course, CourseMode.CREDIT_MODE, "Credit Enrollment Track", min_price=1) CourseEnrollment.enroll(self.student, self.course.id, mode=CourseMode.CREDIT_MODE) - self.assertEqual("Credit Enrollment Track", self._get_user_group().name) + + # The default mode is returned because Credit mode is filtered out, and no verified mode exists. + self.assertEqual("Audit", self._get_user_group().name) + + # Now create a verified mode and check that it is returned for the learner enrolled in Credit. + create_mode(self.course, CourseMode.VERIFIED, "Verified Enrollment Track", min_price=1) + self.assertEqual("Verified Enrollment Track", self._get_user_group().name) def test_using_verified_track_cohort(self): VerifiedTrackCohortedCourse.objects.create(course_key=self.course.id, enabled=True).save()