Commit 65f8731a by Nimisha Asthagiri

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

parent 76d3b62b
......@@ -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,
......
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):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment