Commit c7fc1929 by Sofiya Semenova

ED-801 Certificate issued date should display the certificate availability date…

ED-801 Certificate issued date should display the certificate availability date for instructor paced coursest
parent 6e607fcc
...@@ -32,7 +32,7 @@ class CertificateWebViewTest(EventsTestMixin, UniqueCourseTest): ...@@ -32,7 +32,7 @@ class CertificateWebViewTest(EventsTestMixin, UniqueCourseTest):
'course_title': 'Course title override', 'course_title': 'Course title override',
'signatories': [], 'signatories': [],
'version': 1, 'version': 1,
'is_active': True 'is_active': True,
} }
course_settings = {'certificates': test_certificate_config} course_settings = {'certificates': test_certificate_config}
self.course_fixture = CourseFixture( self.course_fixture = CourseFixture(
......
...@@ -4,6 +4,7 @@ import json ...@@ -4,6 +4,7 @@ import json
from uuid import uuid4 from uuid import uuid4
import ddt import ddt
import datetime
from django.conf import settings from django.conf import settings
from django.core.cache import cache from django.core.cache import cache
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
...@@ -189,7 +190,10 @@ class MicrositeCertificatesViewsTests(ModuleStoreTestCase): ...@@ -189,7 +190,10 @@ class MicrositeCertificatesViewsTests(ModuleStoreTestCase):
super(MicrositeCertificatesViewsTests, self).setUp() super(MicrositeCertificatesViewsTests, self).setUp()
self.client = Client() self.client = Client()
self.course = CourseFactory.create( 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.cert_html_view_enabled = True
self.course.save() self.course.save()
......
...@@ -7,10 +7,13 @@ from urllib import urlencode ...@@ -7,10 +7,13 @@ from urllib import urlencode
from uuid import uuid4 from uuid import uuid4
import ddt import ddt
import datetime
from django.conf import settings from django.conf import settings
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.test.client import Client, RequestFactory from django.test.client import Client, RequestFactory
from django.test.utils import override_settings 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 mock import patch
from nose.plugins.attrib import attr from nose.plugins.attrib import attr
...@@ -73,7 +76,10 @@ class CommonCertificatesTestCase(ModuleStoreTestCase): ...@@ -73,7 +76,10 @@ class CommonCertificatesTestCase(ModuleStoreTestCase):
super(CommonCertificatesTestCase, self).setUp() super(CommonCertificatesTestCase, self).setUp()
self.client = Client() self.client = Client()
self.course = CourseFactory.create( 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.course_id = self.course.location.course_key
self.user = UserFactory.create( self.user = UserFactory.create(
...@@ -789,6 +795,34 @@ class CertificatesViewsTests(CommonCertificatesTestCase): ...@@ -789,6 +795,34 @@ class CertificatesViewsTests(CommonCertificatesTestCase):
self.assertIn('Signatory_Title 0', response.content) self.assertIn('Signatory_Title 0', response.content)
@override_settings(FEATURES=FEATURES_WITH_CERTS_ENABLED) @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): def test_render_html_view_invalid_certificate_configuration(self):
self.course.cert_html_view_enabled = True self.course.cert_html_view_enabled = True
self.course.save() self.course.save()
......
...@@ -5,15 +5,16 @@ Certificate HTML webview. ...@@ -5,15 +5,16 @@ Certificate HTML webview.
import logging import logging
import urllib import urllib
from datetime import datetime from datetime import datetime
import pytz
from uuid import uuid4 from uuid import uuid4
import pytz
from django.conf import settings from django.conf import settings
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.http import Http404, HttpResponse from django.http import Http404, HttpResponse
from django.template import RequestContext from django.template import RequestContext
from django.utils.encoding import smart_str from django.utils.encoding import smart_str
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from eventtracking import tracker
from opaque_keys import InvalidKeyError from opaque_keys import InvalidKeyError
from opaque_keys.edx.keys import CourseKey from opaque_keys.edx.keys import CourseKey
...@@ -35,15 +36,15 @@ from certificates.models import ( ...@@ -35,15 +36,15 @@ from certificates.models import (
GeneratedCertificate GeneratedCertificate
) )
from courseware.access import has_access from courseware.access import has_access
from courseware.courses import get_course_by_id
from edxmako.shortcuts import render_to_response from edxmako.shortcuts import render_to_response
from edxmako.template import Template from edxmako.template import Template
from eventtracking import tracker
from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers
from openedx.core.lib.courses import course_image_url from openedx.core.lib.courses import course_image_url
from student.models import LinkedInAddToProfileConfiguration from student.models import LinkedInAddToProfileConfiguration
from util import organizations_helpers as organization_api from util import organizations_helpers as organization_api
from util.views import handle_500
from util.date_utils import strftime_localized from util.date_utils import strftime_localized
from util.views import handle_500
from xmodule.modulestore.django import modulestore from xmodule.modulestore.django import modulestore
from xmodule.modulestore.exceptions import ItemNotFoundError from xmodule.modulestore.exceptions import ItemNotFoundError
...@@ -98,10 +99,16 @@ def _update_certificate_context(context, user_certificate, platform_name): ...@@ -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 # 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( context['certificate_date_issued'] = _('{month} {day}, {year}').format(
month=strftime_localized(user_certificate.modified_date, "%B"), month=strftime_localized(date, "%B"),
day=user_certificate.modified_date.day, day=date.day,
year=user_certificate.modified_date.year year=date.year
) )
# Translators: This text represents the verification of the certificate # 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): ...@@ -333,10 +340,14 @@ def _get_user_certificate(request, user, course_key, course, preview_mode=None):
if preview_mode: if preview_mode:
# certificate is being previewed from studio # certificate is being previewed from studio
if has_access(request.user, 'instructor', course) or has_access(request.user, 'staff', course): 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( user_certificate = GeneratedCertificate(
mode=preview_mode, mode=preview_mode,
verify_uuid=unicode(uuid4().hex), verify_uuid=unicode(uuid4().hex),
modified_date=datetime.now().date() modified_date=modified_date
) )
else: else:
# certificate is being viewed by learner or public # certificate is being viewed by learner or public
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment