fix: Provide a new data property on CoursewareMeta for proctoring exam access (#29929)

Co-authored-by: Simon Chen <schen@edX-C02FW0GUML85.local>
This commit is contained in:
Simon Chen
2022-02-16 11:02:15 -05:00
committed by GitHub
parent 37bf73ca50
commit 5cfec9732b
3 changed files with 27 additions and 0 deletions

View File

@@ -107,6 +107,7 @@ class CourseInfoSerializer(serializers.Serializer): # pylint: disable=abstract-
show_calculator = serializers.BooleanField()
original_user_is_staff = serializers.BooleanField()
can_view_legacy_courseware = serializers.BooleanField()
can_access_proctored_exams = serializers.BooleanField()
is_staff = serializers.BooleanField()
course_access = serializers.DictField()
notes = serializers.DictField()

View File

@@ -416,6 +416,26 @@ class CourseApiTestViews(BaseCoursewareTests, MasqueradeMixin):
assert 'user_needs_integrity_signature' in courseware_data
assert courseware_data['user_needs_integrity_signature'] == needs_signature
@ddt.data(
('audit', False),
('honor', False),
('verified', True),
('masters', True),
('professional', True),
('no-id-professional', True),
('executive-education', True),
('credit', True),
)
@ddt.unpack
@mock.patch.dict('django.conf.settings.FEATURES', {'DISABLE_HONOR_CERTIFICATES': True})
def test_can_access_proctored_exams(self, mode, result):
CourseEnrollment.enroll(self.user, self.course.id, mode)
response = self.client.get(self.url)
assert response.status_code == 200
courseware_data = response.json()
assert 'can_access_proctored_exams' in courseware_data
assert courseware_data['can_access_proctored_exams'] == result
@ddt.ddt
class SequenceApiTestViews(MasqueradeMixin, BaseCoursewareTests):

View File

@@ -389,6 +389,12 @@ class CoursewareMeta:
user_timezone_locale = user_timezone_locale_prefs(self.request)
return user_timezone_locale['user_timezone']
@property
def can_access_proctored_exams(self):
enrollment_mode = self.enrollment['mode']
enrollment_active = self.enrollment['is_active']
return enrollment_active and CourseMode.is_eligible_for_certificate(enrollment_mode)
class CoursewareInformation(RetrieveAPIView):
"""