diff --git a/common/djangoapps/entitlements/models.py b/common/djangoapps/entitlements/models.py index d69035e5a9..62d2f79be3 100644 --- a/common/djangoapps/entitlements/models.py +++ b/common/djangoapps/entitlements/models.py @@ -369,7 +369,8 @@ class CourseEntitlement(TimeStampedModel): course_uuid = get_course_uuid_for_course(course_run_key) if course_uuid: entitlement = entitlements.filter(course_uuid=course_uuid).first() - if (is_course_run_entitlement_fulfillable(course_run_key=course_run_key, entitlement=entitlement) and + if (entitlement and is_course_run_entitlement_fulfillable( + course_run_key=course_run_key, entitlement=entitlement) and entitlement.is_entitlement_redeemable()): return entitlement return None diff --git a/common/djangoapps/entitlements/tests/test_models.py b/common/djangoapps/entitlements/tests/test_models.py index 258785977e..3d8f210f91 100644 --- a/common/djangoapps/entitlements/tests/test_models.py +++ b/common/djangoapps/entitlements/tests/test_models.py @@ -2,6 +2,7 @@ import unittest from datetime import timedelta +from uuid import uuid4 from django.conf import settings from django.test import TestCase @@ -89,6 +90,26 @@ class TestCourseEntitlementModelHelpers(ModuleStoreTestCase): entitlement.refresh_from_db() assert entitlement.enrollment_course_run is None + new_course = CourseFactory() + CourseModeFactory( + course_id=new_course.id, + mode_slug=CourseMode.VERIFIED, + # This must be in the future to ensure it is returned by downstream code. + expiration_datetime=now() + timedelta(days=1) + ) + + # Return invalid uuid so that no entitlement returned for this new course + mock_get_course_uuid.return_value = uuid4().hex + + try: + CourseEntitlement.check_for_existing_entitlement_and_enroll( + user=self.user, + course_run_key=new_course.id, + ) + assert not CourseEnrollment.is_enrolled(user=self.user, course_key=new_course.id) + except AttributeError as error: + self.fail(error.message) + @unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms') class TestModels(TestCase):