Skip to content

Commit

Permalink
Merge commit 'f565c75d9477aea86f0a66c9421a141d29eaba68'; commit '01cc…
Browse files Browse the repository at this point in the history
…f2b7afdc989cec9466eebc4d62a6ed39eead' into release-candidate
  • Loading branch information
edx-pipeline-bot committed Jul 13, 2020
3 parents 7ea9714 + f565c75 + 01ccf2b commit 4932fad
Show file tree
Hide file tree
Showing 21 changed files with 224 additions and 182 deletions.
10 changes: 4 additions & 6 deletions cms/djangoapps/contentstore/tests/test_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,19 +51,17 @@ def lms_link_for_certificate_web_view_test(self):
mode = 'professional'

self.assertEqual(
utils.get_lms_link_for_certificate_web_view(dummy_user, course_key, mode),
"//localhost:8000/certificates/user/{user_id}/course/{course_key}?preview={mode}".format(
user_id=dummy_user,
utils.get_lms_link_for_certificate_web_view(course_key, mode),
"//localhost:8000/certificates/course/{course_key}?preview={mode}".format(
course_key=course_key,
mode=mode
)
)

with with_site_configuration_context(configuration={"course_org_filter": "mitX", "LMS_BASE": "dummyhost:8000"}):
self.assertEqual(
utils.get_lms_link_for_certificate_web_view(dummy_user, course_key, mode),
"//dummyhost:8000/certificates/user/{user_id}/course/{course_key}?preview={mode}".format(
user_id=dummy_user,
utils.get_lms_link_for_certificate_web_view(course_key, mode),
"//dummyhost:8000/certificates/course/{course_key}?preview={mode}".format(
course_key=course_key,
mode=mode
)
Expand Down
5 changes: 2 additions & 3 deletions cms/djangoapps/contentstore/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ def get_lms_link_for_item(location, preview=False):
)


def get_lms_link_for_certificate_web_view(user_id, course_key, mode):
def get_lms_link_for_certificate_web_view(course_key, mode):
"""
Returns the url to the certificate web view.
"""
Expand All @@ -151,9 +151,8 @@ def get_lms_link_for_certificate_web_view(user_id, course_key, mode):
if lms_base is None:
return None

return u"//{certificate_web_base}/certificates/user/{user_id}/course/{course_id}?preview={mode}".format(
return u"//{certificate_web_base}/certificates/course/{course_id}?preview={mode}".format(
certificate_web_base=lms_base,
user_id=user_id,
course_id=six.text_type(course_key),
mode=mode
)
Expand Down
1 change: 0 additions & 1 deletion cms/djangoapps/contentstore/views/certificates.py
Original file line number Diff line number Diff line change
Expand Up @@ -411,7 +411,6 @@ def certificates_list_handler(request, course_key_string):

if has_certificate_modes:
certificate_web_view_url = get_lms_link_for_certificate_web_view(
user_id=request.user.id,
course_key=course_key,
mode=course_modes[0] # CourseMode.modes_for_course returns default mode if doesn't find anyone.
)
Expand Down
6 changes: 2 additions & 4 deletions cms/djangoapps/contentstore/views/tests/test_certificates.py
Original file line number Diff line number Diff line change
Expand Up @@ -263,18 +263,16 @@ def test_cannot_create_certificate_if_user_has_no_write_permissions(self):
@override_settings(LMS_BASE=None)
def test_no_lms_base_for_certificate_web_view_link(self):
test_link = get_lms_link_for_certificate_web_view(
user_id=self.user.id,
course_key=self.course.id,
mode='honor'
)
self.assertEqual(test_link, None)

@override_settings(LMS_BASE="lms_base_url")
def test_lms_link_for_certificate_web_view(self):
test_url = "//lms_base_url/certificates/user/" \
+ str(self.user.id) + "/course/" + six.text_type(self.course.id) + '?preview=honor'
test_url = "//lms_base_url/certificates/" \
"course/" + six.text_type(self.course.id) + '?preview=honor'
link = get_lms_link_for_certificate_web_view(
user_id=self.user.id,
course_key=self.course.id,
mode='honor'
)
Expand Down
2 changes: 1 addition & 1 deletion common/test/acceptance/pages/lms/certificate_page.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ def url(self):
"""
Construct a URL to the page
"""
return BASE_URL + "/" + self.url_path + "/user/" + self.user_id + "/course/" + self.course_id
return BASE_URL + "/" + self.url_path + "/course/" + self.course_id

@property
def accomplishment_banner(self):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,8 @@ def log_in_as_unique_user(self):
username="testcert",
email="cert@example.com",
password="testuser",
course_id=self.course_id
course_id=self.course_id,
staff=True
).visit()

def test_page_has_accomplishments_banner(self):
Expand Down
7 changes: 6 additions & 1 deletion lms/djangoapps/badges/events/course_complete.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import logging

import six

from django.urls import reverse
from django.utils.text import slugify
from django.utils.translation import ugettext_lazy as _
Expand All @@ -15,6 +16,7 @@
from badges.utils import requires_badges_enabled, site_prefix
from xmodule.modulestore.django import modulestore


LOGGER = logging.getLogger(__name__)


Expand Down Expand Up @@ -63,8 +65,11 @@ def evidence_url(user_id, course_key):
event.
"""
course_id = six.text_type(course_key)
# avoid circular import problems
from lms.djangoapps.certificates.models import GeneratedCertificate
cert = GeneratedCertificate.eligible_certificates.get(user__id=int(user_id), course_id=course_id)
return site_prefix() + reverse(
'certificates:html_view', kwargs={'user_id': user_id, 'course_id': course_id}) + '?evidence_visit=1'
'certificates:render_cert_by_uuid', kwargs={'certificate_uuid': cert.verify_uuid}) + '?evidence_visit=1'


def criteria(course_key):
Expand Down
20 changes: 15 additions & 5 deletions lms/djangoapps/badges/events/tests/test_course_complete.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
"""
Tests for the course completion helper functions.
"""


from datetime import datetime
from uuid import uuid4

from badges.events import course_complete
from lms.djangoapps.certificates.models import GeneratedCertificate
from student.tests.factories import UserFactory
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
from xmodule.modulestore.tests.factories import CourseFactory
Expand Down Expand Up @@ -64,9 +64,19 @@ def test_evidence_url(self):
Make sure the evidence URL points to the right place.
"""
user = UserFactory.create()
cert = GeneratedCertificate.eligible_certificates.create(
user=user,
course_id=self.course_key,
download_uuid=uuid4(),
grade="0.95",
key='the_key',
distinction=True,
status='downloadable',
mode='honor',
name=user.profile.name,
verify_uuid=uuid4().hex
)
self.assertEqual(
'https://edx.org/certificates/user/{user_id}/course/{course_key}?evidence_visit=1'.format(
user_id=user.id, course_key=self.course_key
),
'https://edx.org/certificates/{}?evidence_visit=1'.format(cert.verify_uuid),
course_complete.evidence_url(user.id, self.course_key)
)
23 changes: 13 additions & 10 deletions lms/djangoapps/certificates/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -312,7 +312,9 @@ def certificate_downloadable_status(student, course_key):

if current_status['status'] == CertificateStatuses.downloadable and may_view_certificate:
response_data['is_downloadable'] = True
response_data['download_url'] = current_status['download_url'] or get_certificate_url(student.id, course_key)
response_data['download_url'] = current_status['download_url'] or get_certificate_url(
student.id, course_key, current_status['uuid']
)
response_data['is_pdf_certificate'] = bool(current_status['download_url'])
response_data['uuid'] = current_status['uuid']

Expand Down Expand Up @@ -472,13 +474,13 @@ def _course_from_key(course_key):
return CourseOverview.get_from_id(_safe_course_key(course_key))


def _certificate_html_url(user_id, course_id, uuid):
if uuid:
return reverse('certificates:render_cert_by_uuid', kwargs={'certificate_uuid': uuid})
elif user_id and course_id:
kwargs = {"user_id": str(user_id), "course_id": six.text_type(course_id)}
return reverse('certificates:html_view', kwargs=kwargs)
return ''
def _certificate_html_url(uuid):
"""
Returns uuid based certificate URL.
"""
return reverse(
'certificates:render_cert_by_uuid', kwargs={'certificate_uuid': uuid}
) if uuid else ''


def _certificate_download_url(user_id, course_id, user_certificate=None):
Expand Down Expand Up @@ -515,7 +517,7 @@ def get_certificate_url(user_id=None, course_id=None, uuid=None, user_certificat
return url

if has_html_certificates_enabled(course):
url = _certificate_html_url(user_id, course_id, uuid)
url = _certificate_html_url(uuid)
else:
url = _certificate_download_url(user_id, course_id, user_certificate=user_certificate)
return url
Expand Down Expand Up @@ -631,10 +633,11 @@ def emit_certificate_event(event_name, user, course_id, course=None, event_data=
'org_id': course.org,
'course_id': six.text_type(course_id)
}

data = {
'user_id': user.id,
'course_id': six.text_type(course_id),
'certificate_url': get_certificate_url(user.id, course_id)
'certificate_url': get_certificate_url(user.id, course_id, uuid=event_data['certificate_id'])
}
event_data = event_data or {}
event_data.update(data)
Expand Down
15 changes: 5 additions & 10 deletions lms/djangoapps/certificates/tests/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -199,10 +199,7 @@ def test_with_downloadable_web_cert(self):
'is_downloadable': True,
'is_generating': False,
'is_unverified': False,
'download_url': '/certificates/user/{user_id}/course/{course_id}'.format(
user_id=self.student.id,
course_id=self.course.id,
),
'download_url': '/certificates/{uuid}'.format(uuid=cert_status['uuid']),
'is_pdf_certificate': False,
'uuid': cert_status['uuid']
}
Expand Down Expand Up @@ -496,16 +493,14 @@ def test_get_web_certificate_url(self):
self.assertEqual(expected_url, cert_url)

expected_url = reverse(
'certificates:html_view',
kwargs={
"user_id": str(self.student.id),
"course_id": six.text_type(self.web_cert_course.id),
}
'certificates:render_cert_by_uuid',
kwargs=dict(certificate_uuid=self.uuid)
)

cert_url = certs_api.get_certificate_url(
user_id=self.student.id,
course_id=self.web_cert_course.id
course_id=self.web_cert_course.id,
uuid=self.uuid
)
self.assertEqual(expected_url, cert_url)

Expand Down
7 changes: 5 additions & 2 deletions lms/djangoapps/certificates/tests/test_support_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,11 @@


import json
from uuid import uuid4

import ddt
import six

from django.conf import settings
from django.test.utils import override_settings
from django.urls import reverse
Expand Down Expand Up @@ -85,6 +87,7 @@ def setUp(self):
status=self.CERT_STATUS,
mode=self.CERT_MODE,
download_url=self.CERT_DOWNLOAD_URL,
verify_uuid=uuid4().hex
)

# Login as support staff
Expand Down Expand Up @@ -226,8 +229,8 @@ def test_download_link(self):
self.assertEqual(
retrieved_cert["download_url"],
reverse(
'certificates:html_view',
kwargs={"user_id": self.student.id, "course_id": self.course.id}
'certificates:render_cert_by_uuid',
kwargs={"certificate_uuid": self.cert.verify_uuid}
)
)
self.assertTrue(retrieved_cert["regenerate"])
Expand Down
9 changes: 6 additions & 3 deletions lms/djangoapps/certificates/tests/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -229,13 +229,14 @@ def setUp(self):
self.cert = GeneratedCertificate.eligible_certificates.create(
user=self.user,
course_id=self.course_id,
download_uuid=uuid4(),
download_uuid=uuid4().hex,
grade="0.95",
key='the_key',
distinction=True,
status='downloadable',
mode='honor',
name=self.user.profile.name,
verify_uuid=uuid4().hex
)
self._setup_configuration()

Expand Down Expand Up @@ -284,7 +285,8 @@ def _add_course_certificates(self, count=1, signatory_count=0, is_active=True):
def test_html_view_for_site(self):
test_url = get_certificate_url(
user_id=self.user.id,
course_id=six.text_type(self.course.id)
course_id=six.text_type(self.course.id),
uuid=self.cert.verify_uuid
)
self._add_course_certificates(count=1, signatory_count=2)
response = self.client.get(test_url)
Expand All @@ -302,7 +304,8 @@ def test_html_view_for_site(self):
def test_html_view_site_configuration_missing(self):
test_url = get_certificate_url(
user_id=self.user.id,
course_id=six.text_type(self.course.id)
course_id=six.text_type(self.course.id),
uuid=self.cert.verify_uuid
)
self._add_course_certificates(count=1, signatory_count=2)
response = self.client.get(test_url)
Expand Down
Loading

0 comments on commit 4932fad

Please sign in to comment.