From 1846353a1f9a369ef421be8bd1ceae3816f9b69f Mon Sep 17 00:00:00 2001 From: Bill DeRusha Date: Wed, 16 Dec 2015 09:50:32 -0500 Subject: [PATCH] Fix auto set deadlines on publish --- common/djangoapps/course_modes/models.py | 4 +++- .../djangoapps/course_modes/tests/test_models.py | 9 +++++++++ lms/djangoapps/verify_student/signals.py | 14 +++++++------- .../verify_student/tests/test_signals.py | 6 +++--- 4 files changed, 22 insertions(+), 11 deletions(-) diff --git a/common/djangoapps/course_modes/models.py b/common/djangoapps/course_modes/models.py index b256dc44c2..c8c07eae0a 100644 --- a/common/djangoapps/course_modes/models.py +++ b/common/djangoapps/course_modes/models.py @@ -159,7 +159,9 @@ class CourseMode(models.Model): @expiration_datetime.setter def expiration_datetime(self, new_datetime): """ Saves datetime to _expiration_datetime and sets the explicit flag. """ - self.expiration_datetime_is_explicit = True + # Only set explicit flag if we are setting an actual date. + if new_datetime is not None: + self.expiration_datetime_is_explicit = True self._expiration_datetime = new_datetime @classmethod diff --git a/common/djangoapps/course_modes/tests/test_models.py b/common/djangoapps/course_modes/tests/test_models.py index c83ed6a00e..c6406e75ed 100644 --- a/common/djangoapps/course_modes/tests/test_models.py +++ b/common/djangoapps/course_modes/tests/test_models.py @@ -421,3 +421,12 @@ class CourseModeModelTest(TestCase): self.assertFalse(verified_mode.expiration_datetime_is_explicit) self.assertEqual(verified_mode.expiration_datetime, now) + + def test_expiration_datetime_explicitly_set_to_none(self): + """ Verify that setting the _expiration_date property does not set the explicit flag. """ + verified_mode, __ = self.create_mode('verified', 'Verified Certificate') + self.assertFalse(verified_mode.expiration_datetime_is_explicit) + + verified_mode.expiration_datetime = None + self.assertFalse(verified_mode.expiration_datetime_is_explicit) + self.assertIsNone(verified_mode.expiration_datetime) diff --git a/lms/djangoapps/verify_student/signals.py b/lms/djangoapps/verify_student/signals.py index 5e4b94b47c..474ff2a3e5 100644 --- a/lms/djangoapps/verify_student/signals.py +++ b/lms/djangoapps/verify_student/signals.py @@ -14,11 +14,11 @@ def _listen_for_course_publish(sender, course_key, **kwargs): # pylint: disable Catches the signal that a course has been published in Studio and sets the verification deadline date to a default. """ - try: - deadline = VerificationDeadline.objects.get(course_key=course_key) - if deadline and not deadline.deadline_is_explicit: - course = modulestore().get_course(course_key) - if course and deadline.deadline != course.end: + course = modulestore().get_course(course_key) + if course: + try: + deadline = VerificationDeadline.objects.get(course_key=course_key) + if not deadline.deadline_is_explicit and deadline.deadline != course.end: VerificationDeadline.set_deadline(course_key, course.end) - except ObjectDoesNotExist: - pass + except ObjectDoesNotExist: + VerificationDeadline.set_deadline(course_key, course.end) diff --git a/lms/djangoapps/verify_student/tests/test_signals.py b/lms/djangoapps/verify_student/tests/test_signals.py index aa828880a1..c7baece697 100644 --- a/lms/djangoapps/verify_student/tests/test_signals.py +++ b/lms/djangoapps/verify_student/tests/test_signals.py @@ -24,13 +24,13 @@ class VerificationDeadlineSignalTest(ModuleStoreTestCase): VerificationDeadline.objects.all().delete() def test_no_deadline(self): - """ Verify the signal does not raise error when no deadlines found. """ + """ Verify the signal sets deadline to course end when no deadline exists.""" _listen_for_course_publish('store', self.course.id) - self.assertIsNone(_listen_for_course_publish('store', self.course.id)) + self.assertEqual(VerificationDeadline.deadline_for_course(self.course.id), self.course.end) def test_deadline(self): - """ Verify deadline is set to course end date by signal. """ + """ Verify deadline is set to course end date by signal when changed. """ deadline = datetime.now(tz=UTC) - timedelta(days=7) VerificationDeadline.set_deadline(self.course.id, deadline)