def test_update(self): """ Verify the view supports updating a course. """ # Sanity check: Ensure no verification deadline is set self.assertIsNone( VerificationDeadline.deadline_for_course(self.course.id)) # Generate the expected data verification_deadline = datetime(year=2020, month=12, day=31, tzinfo=pytz.utc) expiration_datetime = datetime.now(pytz.utc) response, expected = self._get_update_response_and_expected_data( expiration_datetime, verification_deadline) # Sanity check: The API should return HTTP status 200 for updates self.assertEqual(response.status_code, 200) # Verify the course and modes are returned as JSON actual = json.loads(response.content) self.assertEqual(actual, expected) # Verify the verification deadline is updated self.assertEqual( VerificationDeadline.deadline_for_course(self.course.id), verification_deadline)
def test_update_verification_deadline_without_expiring_modes(self): """ Verify verification deadline can be set if no course modes expire. This accounts for the verified professional mode, which requires verification but should never expire. """ verification_deadline = datetime(year=1915, month=5, day=7, tzinfo=pytz.utc) response, __ = self._get_update_response_and_expected_data(None, verification_deadline) self.assertEqual(response.status_code, 200) self.assertEqual(VerificationDeadline.deadline_for_course(self.course.id), verification_deadline)
def test_update(self): """ Verify the view supports updating a course. """ # Sanity check: Ensure no verification deadline is set self.assertIsNone(VerificationDeadline.deadline_for_course(self.course.id)) # Generate the expected data verification_deadline = datetime(year=2020, month=12, day=31, tzinfo=pytz.utc) expiration_datetime = datetime.now(pytz.utc) response, expected = self._get_update_response_and_expected_data(expiration_datetime, verification_deadline) # Sanity check: The API should return HTTP status 200 for updates self.assertEqual(response.status_code, 200) # Verify the course and modes are returned as JSON actual = json.loads(response.content) self.assertEqual(actual, expected) # Verify the verification deadline is updated self.assertEqual(VerificationDeadline.deadline_for_course(self.course.id), verification_deadline)
def _serialize_course(cls, course, modes=None, verification_deadline=None): """ Serializes a course to a Python dict. """ modes = modes or [] verification_deadline = verification_deadline or VerificationDeadline.deadline_for_course(course.id) return { u"id": unicode(course.id), u"name": unicode(course.display_name), u"verification_deadline": cls._serialize_datetime(verification_deadline), u"modes": [cls._serialize_course_mode(mode) for mode in modes], }
def test_disable_verification_deadline(self): # Configure a verification deadline for the course VerificationDeadline.set_deadline(self.course.id, self.VERIFICATION_DEADLINE) # Create the course mode Django admin form form = self._admin_form("verified", upgrade_deadline=self.UPGRADE_DEADLINE) # Use the form to disable the verification deadline self._set_form_verification_deadline(form, None) form.save() # Check that the deadline was disabled self.assertIs(VerificationDeadline.deadline_for_course(self.course.id), None)
def _serialize_course(cls, course, modes=None, verification_deadline=None): """ Serializes a course to a Python dict. """ modes = modes or [] verification_deadline = verification_deadline or VerificationDeadline.deadline_for_course( course.id) return { u'id': unicode(course.id), u'name': unicode(course.display_name), u'verification_deadline': cls._serialize_datetime(verification_deadline), u'modes': [cls._serialize_course_mode(mode) for mode in modes] }
def get(cls, course_id): """ Retrieve a single course. """ try: course_id = CourseKey.from_string(unicode(course_id)) except InvalidKeyError: log.debug('[%s] is not a valid course key.', course_id) raise ValueError course_modes = CourseMode.objects.filter(course_id=course_id) if course_modes: verification_deadline = VerificationDeadline.deadline_for_course(course_id) return cls(course_id, list(course_modes), verification_deadline=verification_deadline) return None
def test_update_verification_deadline_without_expiring_modes(self): """ Verify verification deadline can be set if no course modes expire. This accounts for the verified professional mode, which requires verification but should never expire. """ verification_deadline = datetime(year=1915, month=5, day=7, tzinfo=pytz.utc) response, __ = self._get_update_response_and_expected_data( None, verification_deadline) self.assertEqual(response.status_code, 200) self.assertEqual( VerificationDeadline.deadline_for_course(self.course.id), verification_deadline)
def test_set_verification_deadline(self, course_mode): # Configure a verification deadline for the course VerificationDeadline.set_deadline(self.course.id, self.VERIFICATION_DEADLINE) # Create the course mode Django admin form form = self._admin_form(course_mode) # Update the verification deadline form data # We need to set the date and time fields separately, since they're # displayed as separate widgets in the form. new_deadline = (self.VERIFICATION_DEADLINE + timedelta(days=1)).replace(microsecond=0) self._set_form_verification_deadline(form, new_deadline) form.save() # Check that the deadline was updated updated_deadline = VerificationDeadline.deadline_for_course(self.course.id) self.assertEqual(updated_deadline, new_deadline)
def get(cls, course_id): """ Retrieve a single course. """ try: course_id = CourseKey.from_string(unicode(course_id)) except InvalidKeyError: log.debug('[%s] is not a valid course key.', course_id) raise ValueError course_modes = CourseMode.objects.filter(course_id=course_id) if course_modes: verification_deadline = VerificationDeadline.deadline_for_course( course_id) return cls(course_id, list(course_modes), verification_deadline=verification_deadline) return None
def date(self): return VerificationDeadline.deadline_for_course(self.course.id)