Merge pull request #15833 from edx/ssemenova/ed-801
EDUCATOR-801 Certificate issued date should be the certificate availability date for instructor-paced courses
This commit is contained in:
@@ -32,7 +32,7 @@ class CertificateWebViewTest(EventsTestMixin, UniqueCourseTest):
|
||||
'course_title': 'Course title override',
|
||||
'signatories': [],
|
||||
'version': 1,
|
||||
'is_active': True
|
||||
'is_active': True,
|
||||
}
|
||||
course_settings = {'certificates': test_certificate_config}
|
||||
self.course_fixture = CourseFixture(
|
||||
|
||||
@@ -4,6 +4,7 @@ import json
|
||||
from uuid import uuid4
|
||||
|
||||
import ddt
|
||||
import datetime
|
||||
from django.conf import settings
|
||||
from django.core.cache import cache
|
||||
from django.core.urlresolvers import reverse
|
||||
@@ -189,7 +190,10 @@ class MicrositeCertificatesViewsTests(ModuleStoreTestCase):
|
||||
super(MicrositeCertificatesViewsTests, self).setUp()
|
||||
self.client = Client()
|
||||
self.course = CourseFactory.create(
|
||||
org='testorg', number='run1', display_name='refundable course'
|
||||
org='testorg',
|
||||
number='run1',
|
||||
display_name='refundable course',
|
||||
certificate_available_date=datetime.datetime.today() - datetime.timedelta(days=1)
|
||||
)
|
||||
self.course.cert_html_view_enabled = True
|
||||
self.course.save()
|
||||
|
||||
@@ -7,10 +7,13 @@ from urllib import urlencode
|
||||
from uuid import uuid4
|
||||
|
||||
import ddt
|
||||
import datetime
|
||||
from django.conf import settings
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.test.client import Client, RequestFactory
|
||||
from django.test.utils import override_settings
|
||||
from util.date_utils import strftime_localized
|
||||
from django.utils.translation import ugettext as _
|
||||
from mock import patch
|
||||
from nose.plugins.attrib import attr
|
||||
|
||||
@@ -73,7 +76,10 @@ class CommonCertificatesTestCase(ModuleStoreTestCase):
|
||||
super(CommonCertificatesTestCase, self).setUp()
|
||||
self.client = Client()
|
||||
self.course = CourseFactory.create(
|
||||
org='testorg', number='run1', display_name='refundable course'
|
||||
org='testorg',
|
||||
number='run1',
|
||||
display_name='refundable course',
|
||||
certificate_available_date=datetime.datetime.today() - datetime.timedelta(days=1),
|
||||
)
|
||||
self.course_id = self.course.location.course_key
|
||||
self.user = UserFactory.create(
|
||||
@@ -788,6 +794,34 @@ class CertificatesViewsTests(CommonCertificatesTestCase):
|
||||
self.assertIn('course_title_0', response.content)
|
||||
self.assertIn('Signatory_Title 0', response.content)
|
||||
|
||||
@override_settings(FEATURES=FEATURES_WITH_CERTS_ENABLED)
|
||||
@ddt.data(True, False)
|
||||
def test_html_view_certificate_availability_date_for_instructor_paced_courses(self, is_self_paced):
|
||||
"""
|
||||
test certificate web view should display the certificate availability date
|
||||
as the issued date for instructor-paced courses
|
||||
"""
|
||||
self.course.self_paced = is_self_paced
|
||||
self.course.save()
|
||||
self._add_course_certificates(count=1, signatory_count=1)
|
||||
test_url = get_certificate_url(
|
||||
user_id=self.user.id,
|
||||
course_id=unicode(self.course.id)
|
||||
)
|
||||
|
||||
if is_self_paced:
|
||||
expected_date = datetime.datetime.today()
|
||||
else:
|
||||
expected_date = self.course.certificate_available_date
|
||||
|
||||
response = self.client.get(test_url)
|
||||
date = '{month} {day}, {year}'.format(
|
||||
month=strftime_localized(expected_date, "%B"),
|
||||
day=expected_date.day,
|
||||
year=expected_date.year
|
||||
)
|
||||
self.assertIn(date, response.content)
|
||||
|
||||
@override_settings(FEATURES=FEATURES_WITH_CERTS_ENABLED)
|
||||
def test_render_html_view_invalid_certificate_configuration(self):
|
||||
self.course.cert_html_view_enabled = True
|
||||
|
||||
@@ -5,15 +5,16 @@ Certificate HTML webview.
|
||||
import logging
|
||||
import urllib
|
||||
from datetime import datetime
|
||||
import pytz
|
||||
from uuid import uuid4
|
||||
|
||||
import pytz
|
||||
from django.conf import settings
|
||||
from django.contrib.auth.models import User
|
||||
from django.http import Http404, HttpResponse
|
||||
from django.template import RequestContext
|
||||
from django.utils.encoding import smart_str
|
||||
from django.utils.translation import ugettext as _
|
||||
from eventtracking import tracker
|
||||
from opaque_keys import InvalidKeyError
|
||||
from opaque_keys.edx.keys import CourseKey
|
||||
|
||||
@@ -35,15 +36,15 @@ from certificates.models import (
|
||||
GeneratedCertificate
|
||||
)
|
||||
from courseware.access import has_access
|
||||
from courseware.courses import get_course_by_id
|
||||
from edxmako.shortcuts import render_to_response
|
||||
from edxmako.template import Template
|
||||
from eventtracking import tracker
|
||||
from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers
|
||||
from openedx.core.lib.courses import course_image_url
|
||||
from student.models import LinkedInAddToProfileConfiguration
|
||||
from util import organizations_helpers as organization_api
|
||||
from util.views import handle_500
|
||||
from util.date_utils import strftime_localized
|
||||
from util.views import handle_500
|
||||
from xmodule.modulestore.django import modulestore
|
||||
from xmodule.modulestore.exceptions import ItemNotFoundError
|
||||
|
||||
@@ -98,10 +99,16 @@ def _update_certificate_context(context, user_certificate, platform_name):
|
||||
)
|
||||
|
||||
# Translators: The format of the date includes the full name of the month
|
||||
course = get_course_by_id(user_certificate.course_id) if user_certificate.course_id else None
|
||||
|
||||
if course and not course.self_paced and course.certificate_available_date:
|
||||
date = course.certificate_available_date
|
||||
else:
|
||||
date = user_certificate.modified_date
|
||||
context['certificate_date_issued'] = _('{month} {day}, {year}').format(
|
||||
month=strftime_localized(user_certificate.modified_date, "%B"),
|
||||
day=user_certificate.modified_date.day,
|
||||
year=user_certificate.modified_date.year
|
||||
month=strftime_localized(date, "%B"),
|
||||
day=date.day,
|
||||
year=date.year
|
||||
)
|
||||
|
||||
# Translators: This text represents the verification of the certificate
|
||||
@@ -333,10 +340,14 @@ def _get_user_certificate(request, user, course_key, course, preview_mode=None):
|
||||
if preview_mode:
|
||||
# certificate is being previewed from studio
|
||||
if has_access(request.user, 'instructor', course) or has_access(request.user, 'staff', course):
|
||||
if course.certificate_available_date and not course.self_paced:
|
||||
modified_date = course.certificate_available_date
|
||||
else:
|
||||
modified_date = datetime.now().date()
|
||||
user_certificate = GeneratedCertificate(
|
||||
mode=preview_mode,
|
||||
verify_uuid=unicode(uuid4().hex),
|
||||
modified_date=datetime.now().date()
|
||||
modified_date=modified_date
|
||||
)
|
||||
else:
|
||||
# certificate is being viewed by learner or public
|
||||
|
||||
Reference in New Issue
Block a user