Merge pull request #19802 from edx/dcs/proctoring-rules
Define permission used in edx-proctoring
This commit is contained in:
25
lms/djangoapps/courseware/rules.py
Normal file
25
lms/djangoapps/courseware/rules.py
Normal file
@@ -0,0 +1,25 @@
|
||||
"""
|
||||
django-rules for courseware related features
|
||||
"""
|
||||
from __future__ import absolute_import
|
||||
|
||||
from opaque_keys.edx.keys import CourseKey
|
||||
from student.models import CourseEnrollment
|
||||
|
||||
import rules
|
||||
|
||||
|
||||
@rules.predicate
|
||||
def is_verified_or_masters_track_exam(user, exam):
|
||||
"""
|
||||
Returns whether the user is in a verified or master's track
|
||||
"""
|
||||
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')
|
||||
|
||||
|
||||
# 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)
|
||||
48
lms/djangoapps/courseware/tests/test_rules.py
Normal file
48
lms/djangoapps/courseware/tests/test_rules.py
Normal file
@@ -0,0 +1,48 @@
|
||||
"""
|
||||
Tests for permissions defined in courseware.rules
|
||||
"""
|
||||
import ddt
|
||||
|
||||
from django.test import TestCase
|
||||
|
||||
from course_modes.tests.factories import CourseModeFactory
|
||||
|
||||
from opaque_keys.edx.locator import CourseLocator
|
||||
from student.models import CourseEnrollment
|
||||
from student.tests.factories import UserFactory
|
||||
|
||||
|
||||
@ddt.ddt
|
||||
class PermissionTests(TestCase):
|
||||
"""
|
||||
Tests for permissions defined in courseware.rules
|
||||
"""
|
||||
def setUp(self):
|
||||
super(PermissionTests, self).setUp()
|
||||
self.user = UserFactory()
|
||||
|
||||
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)
|
||||
|
||||
def tearDown(self):
|
||||
super(PermissionTests, self).tearDown()
|
||||
self.user.delete()
|
||||
|
||||
@ddt.data(
|
||||
(None, False),
|
||||
('audit', False),
|
||||
('verified', True),
|
||||
('masters', True),
|
||||
)
|
||||
@ddt.unpack
|
||||
def test_proctoring_perm(self, mode, should_have_perm):
|
||||
"""
|
||||
Test that the user has the edx_proctoring.can_take_proctored_exam permission
|
||||
"""
|
||||
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
|
||||
Reference in New Issue
Block a user