Skip to content
Snippets Groups Projects
Unverified Commit 8b6496e8 authored by Dave St.Germain's avatar Dave St.Germain Committed by GitHub
Browse files

Merge pull request #19955 from edx/dcs/proctoring-profed

Enable proctoring for professional track learners
parents 223b8d6f d1cd8e04
No related branches found
No related tags found
No related merge requests found
......@@ -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)
......@@ -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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment