From 57bf89c8e222ca9088e31d59ff9f757e9932991b Mon Sep 17 00:00:00 2001 From: Tyler Hallada Date: Mon, 30 Oct 2017 13:57:38 -0400 Subject: [PATCH] Create schedule experience on schedule creation --- openedx/core/djangoapps/schedules/signals.py | 17 ++++++++++++++--- .../djangoapps/schedules/tests/test_signals.py | 12 +++++++++++- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/openedx/core/djangoapps/schedules/signals.py b/openedx/core/djangoapps/schedules/signals.py index 1af925f22e..45b5927c7f 100644 --- a/openedx/core/djangoapps/schedules/signals.py +++ b/openedx/core/djangoapps/schedules/signals.py @@ -12,6 +12,9 @@ from courseware.models import ( OrgDynamicUpgradeDeadlineConfiguration ) from edx_ace.utils import date +from openedx.core.djangoapps.schedules.exceptions import CourseUpdateDoesNotExist +from openedx.core.djangoapps.schedules.models import ScheduleExperience +from openedx.core.djangoapps.schedules.resolvers import get_week_highlights from openedx.core.djangoapps.signals.signals import COURSE_START_DATE_CHANGED from openedx.core.djangoapps.theming.helpers import get_current_site from student.models import CourseEnrollment @@ -53,14 +56,22 @@ def create_schedule(sender, **kwargs): upgrade_deadline = _calculate_upgrade_deadline(enrollment.course_id, content_availability_date) - Schedule.objects.create( + schedule = Schedule.objects.create( enrollment=enrollment, start=content_availability_date, upgrade_deadline=upgrade_deadline ) - log.debug('Schedules: created a new schedule starting at %s with an upgrade deadline of %s', - content_availability_date, upgrade_deadline) + try: + get_week_highlights(enrollment.course_id, 1) + experience_type = ScheduleExperience.COURSE_UPDATES + except CourseUpdateDoesNotExist: + experience_type = ScheduleExperience.DEFAULT + + ScheduleExperience(schedule=schedule, experience_type=experience_type).save() + + log.debug('Schedules: created a new schedule starting at %s with an upgrade deadline of %s and experience type: %s', + content_availability_date, upgrade_deadline, ScheduleExperience.EXPERIENCES[experience_type][1]) @receiver(COURSE_START_DATE_CHANGED, dispatch_uid="update_schedules_on_course_start_changed") diff --git a/openedx/core/djangoapps/schedules/tests/test_signals.py b/openedx/core/djangoapps/schedules/tests/test_signals.py index 1bf0048c5e..98b6f48f67 100644 --- a/openedx/core/djangoapps/schedules/tests/test_signals.py +++ b/openedx/core/djangoapps/schedules/tests/test_signals.py @@ -6,6 +6,7 @@ from pytz import utc from course_modes.models import CourseMode from course_modes.tests.factories import CourseModeFactory from courseware.models import DynamicUpgradeDeadlineConfiguration +from openedx.core.djangoapps.schedules.models import ScheduleExperience from openedx.core.djangoapps.schedules.signals import CREATE_SCHEDULE_WAFFLE_FLAG from openedx.core.djangoapps.site_configuration.tests.factories import SiteFactory from openedx.core.djangoapps.waffle_utils.testutils import override_waffle_flag @@ -23,11 +24,12 @@ from ..tests.factories import ScheduleConfigFactory @skip_unless_lms class CreateScheduleTests(SharedModuleStoreTestCase): - def assert_schedule_created(self): + def assert_schedule_created(self, experience_type=ScheduleExperience.DEFAULT): course = _create_course_run(self_paced=True) enrollment = CourseEnrollmentFactory(course_id=course.id, mode=CourseMode.AUDIT) self.assertIsNotNone(enrollment.schedule) self.assertIsNone(enrollment.schedule.upgrade_deadline) + self.assertEquals(enrollment.schedule.experience.experience_type, experience_type) def assert_schedule_not_created(self): course = _create_course_run(self_paced=True) @@ -78,6 +80,14 @@ class CreateScheduleTests(SharedModuleStoreTestCase): with self.assertRaises(Schedule.DoesNotExist): enrollment.schedule + @override_waffle_flag(CREATE_SCHEDULE_WAFFLE_FLAG, True) + @patch('openedx.core.djangoapps.schedules.signals.get_week_highlights') + def test_create_schedule_course_updates_experience(self, mock_get_week_highlights, mock_get_current_site): + site = SiteFactory.create() + mock_get_week_highlights.return_value = True + mock_get_current_site.return_value = site + self.assert_schedule_created(experience_type=ScheduleExperience.COURSE_UPDATES) + @ddt.ddt @skip_unless_lms