diff --git a/openedx/core/djangoapps/certificates/tests/test_api.py b/openedx/core/djangoapps/certificates/tests/test_api.py index f75b85e71b..6b728ed5e5 100644 --- a/openedx/core/djangoapps/certificates/tests/test_api.py +++ b/openedx/core/djangoapps/certificates/tests/test_api.py @@ -51,6 +51,8 @@ class MockGeneratedCertificate(object): self.course_id = course_id self.mode = mode self.status = status + self.created_date = datetime.now(pytz.UTC) + self.modified_date = datetime.now(pytz.UTC) def is_valid(self): """ @@ -149,18 +151,19 @@ class CertificatesApiTestCase(TestCase): ): self.course.self_paced = is_self_paced with configure_waffle_namespace(feature_enabled): - maybe_avail = self.course.certificate_available_date if uses_avail_date else self.certificate.modified_date # With no available_date set, both return modified_date - self.assertEqual(self.certificate.modified_date, api.available_date_for_certificate(self.course)) - self.assertEqual(self.certificate.modified_date, api.display_date_for_certificate(self.course)) + self.assertEqual(self.certificate.modified_date, api.available_date_for_certificate(self.course, self.certificate)) + self.assertEqual(self.certificate.modified_date, api.display_date_for_certificate(self.course, self.certificate)) # With an available date set in the past, both return the available date (if configured) self.course.certificate_available_date = datetime(2017, 2, 1, tzinfo=pytz.UTC) - self.assertEqual(maybe_avail, api.available_date_for_certificate(self.course)) - self.assertEqual(maybe_avail, api.display_date_for_certificate(self.course)) + maybe_avail = self.course.certificate_available_date if uses_avail_date else self.certificate.modified_date + self.assertEqual(maybe_avail, api.available_date_for_certificate(self.course, self.certificate)) + self.assertEqual(maybe_avail, api.display_date_for_certificate(self.course, self.certificate)) # With a future available date, they each return a different date - self.course.certificate_available_date = datetime.max - self.assertEqual(maybe_avail, api.available_date_for_certificate(self.course)) - self.assertEqual(self.certificate.modified_date, api.display_date_for_certificate(self.course)) + self.course.certificate_available_date = datetime.max.replace(tzinfo=pytz.UTC) + maybe_avail = self.course.certificate_available_date if uses_avail_date else self.certificate.modified_date + self.assertEqual(maybe_avail, api.available_date_for_certificate(self.course, self.certificate)) + self.assertEqual(self.certificate.modified_date, api.display_date_for_certificate(self.course, self.certificate)) diff --git a/openedx/core/djangoapps/programs/tasks/v1/tests/test_tasks.py b/openedx/core/djangoapps/programs/tasks/v1/tests/test_tasks.py index 3366f002d9..02994e0916 100644 --- a/openedx/core/djangoapps/programs/tasks/v1/tests/test_tasks.py +++ b/openedx/core/djangoapps/programs/tasks/v1/tests/test_tasks.py @@ -2,10 +2,12 @@ Tests for programs celery tasks. """ import json -from datetime import datetime +from datetime import datetime, timedelta import ddt import httpretty import mock +import pytz +from waffle.testutils import override_switch from celery.exceptions import MaxRetriesExceededError from django.conf import settings from django.test import override_settings, TestCase @@ -15,6 +17,7 @@ from edx_rest_api_client.client import EdxRestApiClient from lms.djangoapps.certificates.tests.factories import GeneratedCertificateFactory from openedx.core.djangoapps.catalog.tests.mixins import CatalogIntegrationMixin +from openedx.core.djangoapps.certificates.config import waffle from openedx.core.djangoapps.content.course_overviews.tests.factories import CourseOverviewFactory from openedx.core.djangoapps.credentials.tests.mixins import CredentialsApiConfigMixin from openedx.core.djangoapps.programs.tasks.v1 import tasks @@ -406,6 +409,7 @@ class PostCourseCertificateTestCase(TestCase): @skip_unless_lms @mock.patch(TASKS_MODULE + '.post_course_certificate') @override_settings(CREDENTIALS_SERVICE_USERNAME='test-service-username') +@override_switch(waffle.WAFFLE_NAMESPACE + '.' + waffle.AUTO_CERTIFICATE_GENERATION, True) class AwardCourseCertificatesTestCase(CredentialsApiConfigMixin, TestCase): """ Test the award_course_certificate celery task @@ -414,7 +418,7 @@ class AwardCourseCertificatesTestCase(CredentialsApiConfigMixin, TestCase): def setUp(self): super(AwardCourseCertificatesTestCase, self).setUp() - self.available_date = datetime.datetime.max + self.available_date = datetime.now(pytz.UTC) + timedelta(days=1) self.course = CourseOverviewFactory.create( self_paced=True, # Any option to allow the certificate to be viewable for the course certificate_available_date=self.available_date, @@ -442,6 +446,18 @@ class AwardCourseCertificatesTestCase(CredentialsApiConfigMixin, TestCase): call_args, _ = mock_post_course_certificate.call_args self.assertEqual(call_args[1], self.student.username) self.assertEqual(call_args[2], self.certificate) + self.assertEqual(call_args[3], self.certificate.modified_date) + + def test_award_course_certificates_available_date(self, mock_post_course_certificate): + """ + Tests the API POST method is called with available date when the course is not self paced + """ + self.course.self_paced = False + self.course.save() + tasks.award_course_certificate.delay(self.student.username, str(self.course.id)).get() + call_args, _ = mock_post_course_certificate.call_args + self.assertEqual(call_args[1], self.student.username) + self.assertEqual(call_args[2], self.certificate) self.assertEqual(call_args[3], self.available_date) def test_award_course_cert_not_called_if_disabled(self, mock_post_course_certificate):