From 7375eb447446dfe29ef03d6ca3b4e660497c4166 Mon Sep 17 00:00:00 2001 From: Christie Rice <8483753+crice100@users.noreply.github.com> Date: Thu, 7 Mar 2019 10:56:05 -0500 Subject: [PATCH] REVEM-219 Handle invalid course run key --- .../experiments/tests/test_utils.py | 25 +++++++++++++++++++ lms/djangoapps/experiments/utils.py | 17 +++++++++++-- 2 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 lms/djangoapps/experiments/tests/test_utils.py diff --git a/lms/djangoapps/experiments/tests/test_utils.py b/lms/djangoapps/experiments/tests/test_utils.py new file mode 100644 index 0000000000..83ee0d39e6 --- /dev/null +++ b/lms/djangoapps/experiments/tests/test_utils.py @@ -0,0 +1,25 @@ +""" +Tests of experiment functionality +""" +from unittest import TestCase +from lms.djangoapps.experiments.utils import is_enrolled_in_course_run +from opaque_keys.edx.keys import CourseKey + + +class ExperimentUtilsTests(TestCase): + """ + Tests of experiment functionality + """ + def test_valid_course_run_key_enrollment(self): + course_run = { + 'key': 'course-v1:DelftX+NGIx+RA0', + } + enrollment_ids = {CourseKey.from_string('course-v1:DelftX+NGIx+RA0')} + self.assertTrue(is_enrolled_in_course_run(course_run, enrollment_ids)) + + def test_invalid_course_run_key_enrollment(self): + course_run = { + 'key': 'cr_key', + } + enrollment_ids = {CourseKey.from_string('course-v1:DelftX+NGIx+RA0')} + self.assertFalse(is_enrolled_in_course_run(course_run, enrollment_ids)) diff --git a/lms/djangoapps/experiments/utils.py b/lms/djangoapps/experiments/utils.py index 47d911e039..7bb349dff5 100644 --- a/lms/djangoapps/experiments/utils.py +++ b/lms/djangoapps/experiments/utils.py @@ -4,6 +4,7 @@ Utilities to facilitate experimentation import hashlib import re +import logging from student.models import CourseEnrollment from django_comment_common.models import Role from course_modes.models import get_cosmetic_verified_display_price @@ -11,10 +12,14 @@ from courseware.access import has_staff_access_to_preview_mode from courseware.date_summary import verified_upgrade_deadline_link, verified_upgrade_link_is_valid from xmodule.partitions.partitions_service import get_user_partition_groups, get_all_partitions_for_course from opaque_keys.edx.keys import CourseKey +from opaque_keys import InvalidKeyError from openedx.core.djangoapps.catalog.utils import get_programs from openedx.core.djangoapps.waffle_utils import WaffleFlag, WaffleFlagNamespace +logger = logging.getLogger(__name__) + + # TODO: clean up as part of REVEM-199 (START) # .. feature_toggle_name: experiments.add_programs # .. feature_toggle_type: flag @@ -104,8 +109,16 @@ def is_enrolled_in_course_run(course_run, enrollment_course_ids): """ Determine if the user is enrolled in this course run """ - course_run_key = CourseKey.from_string(course_run.get('key')) - return course_run_key in enrollment_course_ids + key = None + try: + key = course_run.get('key') + course_run_key = CourseKey.from_string(key) + return course_run_key in enrollment_course_ids + except InvalidKeyError: + logger.warn( + u'Unable to determine if user was enrolled since the course key {} is invalid'.format(key) + ) + return False # Invalid course run key. Assume user is not enrolled. # TODO: clean up as part of REVEM-199 (END)