diff --git a/lms/djangoapps/courseware/rules.py b/lms/djangoapps/courseware/rules.py index ce019ca574..2dcb72c049 100644 --- a/lms/djangoapps/courseware/rules.py +++ b/lms/djangoapps/courseware/rules.py @@ -3,6 +3,7 @@ django-rules for courseware related features """ from __future__ import absolute_import +from course_modes.models import CourseMode from opaque_keys.edx.keys import CourseKey from student.models import CourseEnrollment @@ -10,16 +11,16 @@ import rules @rules.predicate -def is_verified_or_masters_track_exam(user, exam): +def is_track_ok_for_exam(user, exam): """ - Returns whether the user is in a verified or master's track + Returns whether the user is in an appropriate enrollment mode """ course_id = CourseKey.from_string(exam['course_id']) mode, is_active = CourseEnrollment.enrollment_mode_for_user(user, course_id) - return is_active and mode in ('verified', 'masters') + return is_active and mode in (CourseMode.VERIFIED, CourseMode.MASTERS, CourseMode.PROFESSIONAL) # The edx_proctoring.api uses this permission to gate access to the # proctored experience -can_take_proctored_exam = is_verified_or_masters_track_exam -rules.set_perm('edx_proctoring.can_take_proctored_exam', is_verified_or_masters_track_exam) +can_take_proctored_exam = is_track_ok_for_exam +rules.set_perm('edx_proctoring.can_take_proctored_exam', is_track_ok_for_exam) diff --git a/lms/djangoapps/courseware/tests/test_rules.py b/lms/djangoapps/courseware/tests/test_rules.py index cd36ad0115..4277b5ccf5 100644 --- a/lms/djangoapps/courseware/tests/test_rules.py +++ b/lms/djangoapps/courseware/tests/test_rules.py @@ -24,6 +24,8 @@ class PermissionTests(TestCase): self.course_id = CourseLocator('MITx', '000', 'Perm_course') CourseModeFactory(mode_slug='verified', course_id=self.course_id) CourseModeFactory(mode_slug='masters', course_id=self.course_id) + CourseModeFactory(mode_slug='professional', course_id=self.course_id) + CourseEnrollment.unenroll(self.user, self.course_id) def tearDown(self): super(PermissionTests, self).tearDown() @@ -34,6 +36,8 @@ class PermissionTests(TestCase): ('audit', False), ('verified', True), ('masters', True), + ('professional', True), + ('no-id-professional', False), ) @ddt.unpack def test_proctoring_perm(self, mode, should_have_perm): @@ -42,7 +46,5 @@ class PermissionTests(TestCase): """ if mode is not None: CourseEnrollment.enroll(self.user, self.course_id, mode=mode) - else: - CourseEnrollment.unenroll(self.user, self.course_id) has_perm = self.user.has_perm('edx_proctoring.can_take_proctored_exam', {'course_id': unicode(self.course_id)}) assert has_perm == should_have_perm