Cache upgrade_deadline on CourseEnrollment objects
This commit is contained in:
committed by
sandroroux
parent
f8d41b9764
commit
dd53edc6e0
@@ -1696,7 +1696,7 @@ class CourseEnrollment(models.Model):
|
||||
def verified_mode(self):
|
||||
return CourseMode.verified_mode_for_course(self.course_id)
|
||||
|
||||
@property
|
||||
@cached_property
|
||||
def upgrade_deadline(self):
|
||||
"""
|
||||
Returns the upgrade deadline for this enrollment, if it is upgradeable.
|
||||
|
||||
@@ -132,6 +132,21 @@ class CourseEnrollmentTests(SharedModuleStoreTestCase):
|
||||
self.assertEqual(Schedule.objects.all().count(), 0)
|
||||
self.assertEqual(enrollment.upgrade_deadline, course_mode.expiration_datetime)
|
||||
|
||||
|
||||
@skip_unless_lms
|
||||
# NOTE: We mute the post_save signal to prevent Schedules from being created for new enrollments
|
||||
@factory.django.mute_signals(signals.post_save)
|
||||
def test_upgrade_deadline_with_schedule(self):
|
||||
""" The property should use either the CourseMode or related Schedule to determine the deadline. """
|
||||
course = CourseFactory(self_paced=True)
|
||||
CourseModeFactory(
|
||||
course_id=course.id,
|
||||
mode_slug=CourseMode.VERIFIED,
|
||||
# This must be in the future to ensure it is returned by downstream code.
|
||||
expiration_datetime=datetime.datetime.now(pytz.UTC) + datetime.timedelta(days=1),
|
||||
)
|
||||
enrollment = CourseEnrollmentFactory(course_id=course.id, mode=CourseMode.AUDIT)
|
||||
|
||||
# The schedule's upgrade deadline should be used if a schedule exists
|
||||
DynamicUpgradeDeadlineConfiguration.objects.create(enabled=True)
|
||||
schedule = ScheduleFactory(enrollment=enrollment)
|
||||
|
||||
Reference in New Issue
Block a user