From c13b531eeb1df33cf311b633bda6a7f629d4c2c7 Mon Sep 17 00:00:00 2001 From: Andy Armstrong Date: Mon, 2 Oct 2017 17:20:16 -0400 Subject: [PATCH] Display course home message for certificate availability LEARNER-2182 --- lms/djangoapps/courseware/date_summary.py | 25 +++++++++ .../courseware/tests/test_date_summary.py | 53 ++++++++++++++----- 2 files changed, 66 insertions(+), 12 deletions(-) diff --git a/lms/djangoapps/courseware/date_summary.py b/lms/djangoapps/courseware/date_summary.py index 170df6291a..a68ed55801 100644 --- a/lms/djangoapps/courseware/date_summary.py +++ b/lms/djangoapps/courseware/date_summary.py @@ -354,6 +354,31 @@ class CertificateAvailableDate(DateSummary): ) if mode.slug != CourseMode.AUDIT ]) + def register_alerts(self, request, course): + """ + Registers an alert close to the certificate delivery date. + """ + is_enrolled = CourseEnrollment.get_enrollment(request.user, course.id) + if not is_enrolled or not self.is_enabled or course.end > self.current_time: + return + if self.date > self.current_time: + CourseHomeMessages.register_info_message( + request, + Text(_( + 'If you have earned a certificate, you will be able to access it {time_remaining_string}' + ' from now. You will also be able to view your certificates on your {learner_profile_link}.' + )).format( + time_remaining_string=self.time_remaining_string, + learner_profile_link=HTML( + '{learner_profile_name}' + ).format( + learner_profile_url=reverse('learner_profile', kwargs={'username': request.user.username}), + learner_profile_name=_('Learner Profile'), + ), + ), + title=Text(_('We are working on generating course certificates.')) + ) + class VerifiedUpgradeDeadlineDate(DateSummary): """ diff --git a/lms/djangoapps/courseware/tests/test_date_summary.py b/lms/djangoapps/courseware/tests/test_date_summary.py index dcabd580a4..bee9bd9599 100644 --- a/lms/djangoapps/courseware/tests/test_date_summary.py +++ b/lms/djangoapps/courseware/tests/test_date_summary.py @@ -48,17 +48,6 @@ class CourseDateSummaryTest(SharedModuleStoreTestCase): super(CourseDateSummaryTest, self).setUp() SelfPacedConfiguration.objects.create(enable_course_home_improvements=True) - def enable_course_certificates(self, course): - """ Enable course certificate configuration """ - course.certificates = { - u'certificates': [{ - u'course_title': u'Test', - u'name': u'', - u'is_active': True, - }] - } - course.save() - def test_course_info_feature_flag(self): SelfPacedConfiguration(enable_course_home_improvements=False).save() course = create_course_run() @@ -369,7 +358,7 @@ class CourseDateSummaryTest(SharedModuleStoreTestCase): verified_user = create_user() CourseEnrollmentFactory(course_id=course.id, user=verified_user, mode=CourseMode.VERIFIED) course.certificate_available_date = datetime.now(utc) + timedelta(days=7) - self.enable_course_certificates(course) + enable_course_certificates(course) CertificateAvailableDate(course, audit_user) for block in (CertificateAvailableDate(course, audit_user), CertificateAvailableDate(course, verified_user)): self.assertIsNotNone(course.certificate_available_date) @@ -467,6 +456,8 @@ class TestDateAlerts(SharedModuleStoreTestCase): super(TestDateAlerts, self).setUp() with freeze_time('2017-07-01 09:00:00'): self.course = create_course_run(days_till_start=0) + self.course.certificate_available_date = self.course.start + timedelta(days=21) + enable_course_certificates(self.course) self.enrollment = CourseEnrollmentFactory(course_id=self.course.id, mode=CourseMode.AUDIT) self.request = RequestFactory().request() self.request.session = {} @@ -546,6 +537,30 @@ class TestDateAlerts(SharedModuleStoreTestCase): else: self.assertEqual(len(messages), 0) + @ddt.data( + ['2017-07-15 08:00:00', None], + ['2017-07-15 09:00:00', u'If you have earned a certificate, you will be able to access it 1 week from now.'], + ['2017-07-21 09:00:00', u'If you have earned a certificate, you will be able to access it 1 day from now.'], + ['2017-07-22 08:00:00', u'If you have earned a certificate, you will be able to access it 1 hour from now.'], + ['2017-07-22 09:00:00', None], + ['2017-07-23 09:00:00', None], + ) + @ddt.unpack + @waffle.testutils.override_switch('certificates.auto_certificate_generation', True) + def test_certificate_availability_alert(self, current_time, expected_message_html): + """ + Verify the verified upgrade deadline alerts. + """ + with freeze_time(current_time): + block = CertificateAvailableDate(self.course, self.request.user) + block.register_alerts(self.request, self.course) + messages = list(CourseHomeMessages.user_messages(self.request)) + if expected_message_html: + self.assertEqual(len(messages), 1) + self.assertIn(expected_message_html, messages[0].message_html) + else: + self.assertEqual(len(messages), 0) + @attr(shard=1) class TestScheduleOverrides(SharedModuleStoreTestCase): @@ -716,3 +731,17 @@ def create_self_paced_course_run(days_till_start=1): ) return course + + +def enable_course_certificates(course): + """ + Enable course certificate configuration. + """ + course.certificates = { + u'certificates': [{ + u'course_title': u'Test', + u'name': u'', + u'is_active': True, + }] + } + course.save()