Update schedule start only if new course start date is in the future

This commit is contained in:
Nimisha Asthagiri
2017-09-11 14:32:19 -04:00
parent 76d3b62bb5
commit 65f8731a73
2 changed files with 32 additions and 13 deletions

View File

@@ -69,9 +69,11 @@ def create_schedule(sender, **kwargs):
@receiver(COURSE_START_DATE_CHANGED, dispatch_uid="update_schedules_on_course_start_changed")
def update_schedules_on_course_start_changed(sender, updated_course_overview, previous_start_date, **kwargs):
"""
Updates all course schedules if course hasn't started yet.
Updates all course schedules if course hasn't started yet and
the updated start date is still in the future.
"""
if previous_start_date > timezone.now():
current_time = timezone.now()
if previous_start_date > current_time and updated_course_overview.start > current_time:
upgrade_deadline = _calculate_upgrade_deadline(
updated_course_overview.id,
content_availability_date=updated_course_overview.start,

View File

@@ -1,4 +1,7 @@
from collections import namedtuple
import datetime
import ddt
from enum import Enum
from mock import patch
from pytz import utc
@@ -78,7 +81,9 @@ class CreateScheduleTests(SharedModuleStoreTestCase):
enrollment.schedule
@ddt.ddt
@skip_unless_lms
@patch('openedx.core.djangoapps.schedules.signals.get_current_site')
class UpdateScheduleTests(SharedModuleStoreTestCase):
ENABLED_SIGNALS = ['course_published']
VERIFICATION_DEADLINE_DAYS = 14
@@ -96,30 +101,42 @@ class UpdateScheduleTests(SharedModuleStoreTestCase):
_strip_secs(expected_start) + datetime.timedelta(days=self.VERIFICATION_DEADLINE_DAYS),
)
@patch('openedx.core.djangoapps.schedules.signals.get_current_site')
def test_schedule_updated(self, mock_get_current_site):
def test_updated_since_course_not_started(self, mock_get_current_site):
mock_get_current_site.return_value = self.site
course = _create_course_run(self_paced=True, start_day_offset=5)
course = _create_course_run(self_paced=True, start_day_offset=5) # course starts in future
enrollment = CourseEnrollmentFactory(course_id=course.id, mode=CourseMode.AUDIT)
self.assert_schedule_dates(enrollment.schedule, enrollment.course_overview.start)
course.start = course.start + datetime.timedelta(days=3)
course.start = course.start + datetime.timedelta(days=3) # new course start changes to another future date
self.store.update_item(course, ModuleStoreEnum.UserID.test)
enrollment = CourseEnrollment.objects.get(id=enrollment.id)
self.assert_schedule_dates(enrollment.schedule, course.start)
self.assert_schedule_dates(enrollment.schedule, course.start) # start set to new course start
@patch('openedx.core.djangoapps.schedules.signals.get_current_site')
def test_schedule_not_updated(self, mock_get_current_site):
def test_not_updated_since_course_already_started(self, mock_get_current_site):
mock_get_current_site.return_value = self.site
course = _create_course_run(self_paced=True, start_day_offset=-5)
course = _create_course_run(self_paced=True, start_day_offset=-5) # course starts in past
enrollment = CourseEnrollmentFactory(course_id=course.id, mode=CourseMode.AUDIT)
self.assert_schedule_dates(enrollment.schedule, enrollment.created)
course.start = course.start + datetime.timedelta(days=3)
course.start = course.start + datetime.timedelta(days=3) # new course start changes to another future date
self.store.update_item(course, ModuleStoreEnum.UserID.test)
self.assert_schedule_dates(enrollment.schedule, enrollment.created)
enrollment = CourseEnrollment.objects.get(id=enrollment.id)
self.assert_schedule_dates(enrollment.schedule, enrollment.created) # start remains unchanged
def test_not_updated_since_new_start_in_past(self, mock_get_current_site):
mock_get_current_site.return_value = self.site
course = _create_course_run(self_paced=True, start_day_offset=5) # course starts in future
enrollment = CourseEnrollmentFactory(course_id=course.id, mode=CourseMode.AUDIT)
previous_start = enrollment.course_overview.start
self.assert_schedule_dates(enrollment.schedule, previous_start)
course.start = course.start + datetime.timedelta(days=-10) # new course start changes to a past date
self.store.update_item(course, ModuleStoreEnum.UserID.test)
enrollment = CourseEnrollment.objects.get(id=enrollment.id)
self.assert_schedule_dates(enrollment.schedule, previous_start) # start remains unchanged
def _create_course_run(self_paced=True, start_day_offset=-1):