Skip to content
Snippets Groups Projects
Unverified Commit 08877db8 authored by adeelehsan's avatar adeelehsan Committed by GitHub
Browse files

Merge pull request #22243 from edx/aehsan/prod-612/allow_certificate_regenration_for_exisiting

Allow certification regenration for existing honor certificates
parents 9543f4c1 1adc01b4
No related merge requests found
......@@ -757,7 +757,7 @@ class CourseMode(models.Model):
return min(mode.min_price for mode in modes if mode.currency.lower() == currency.lower())
@classmethod
def is_eligible_for_certificate(cls, mode_slug):
def is_eligible_for_certificate(cls, mode_slug, status=None):
"""
Returns whether or not the given mode_slug is eligible for a
certificate. Currently all modes other than 'audit' grant a
......@@ -769,7 +769,11 @@ class CourseMode(models.Model):
ineligible_modes = [cls.AUDIT]
if settings.FEATURES['DISABLE_HONOR_CERTIFICATES']:
ineligible_modes.append(cls.HONOR)
# Adding check so that we can regenerate the certificate for learners who have
# already earned the certificate using honor mode
from lms.djangoapps.certificates.models import CertificateStatuses
if mode_slug == cls.HONOR and status != CertificateStatuses.downloadable:
ineligible_modes.append(cls.HONOR)
return mode_slug not in ineligible_modes
......
......@@ -291,7 +291,8 @@ class XQueueCertInterface(object):
mode_is_verified = enrollment_mode in GeneratedCertificate.VERIFIED_CERTS_MODES
user_is_verified = IDVerificationService.user_is_verified(student)
cert_mode = enrollment_mode
is_eligible_for_certificate = is_whitelisted or CourseMode.is_eligible_for_certificate(enrollment_mode)
is_eligible_for_certificate = is_whitelisted or CourseMode.is_eligible_for_certificate(enrollment_mode,
cert_status)
unverified = False
# For credit mode generate verified certificate
if cert_mode in (CourseMode.CREDIT_MODE, CourseMode.MASTERS):
......
......@@ -8,11 +8,14 @@ import json
import ddt
import six
from mock import patch
from django.conf import settings
from django.test.utils import override_settings
from django.urls import reverse
from opaque_keys.edx.keys import CourseKey
from lms.djangoapps.grades.tests.utils import mock_passing_grade
from lms.djangoapps.certificates import api
from lms.djangoapps.certificates.models import CertificateInvalidation, CertificateStatuses, GeneratedCertificate
from lms.djangoapps.certificates.tests.factories import CertificateInvalidationFactory
from openedx.core.djangoapps.content.course_overviews.tests.factories import CourseOverviewFactory
......@@ -22,6 +25,7 @@ from student.tests.factories import UserFactory
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
from xmodule.modulestore.tests.factories import CourseFactory
FEATURES_WITH_CERTS_ENABLED = settings.FEATURES.copy()
FEATURES_WITH_CERTS_ENABLED['CERTIFICATES_HTML_VIEW'] = True
......@@ -299,6 +303,23 @@ class CertificateRegenerateTests(CertificateSupportTestCase):
cert = GeneratedCertificate.eligible_certificates.get(user=self.student)
self.assertEqual(cert.status, CertificateStatuses.notpassing)
@patch('lms.djangoapps.certificates.queue.XQueueCertInterface._generate_cert')
def test_regenerate_certificate_for_honor_mode(self, mock_generate_cert):
"""Test web certificate regenration for the users who have earned the
certificate in honor mode
"""
self.cert.mode = 'honor'
self.cert.download_url = ''
self.cert.save()
with mock_passing_grade(percent=0.75):
with patch('course_modes.models.CourseMode.mode_for_course') as mock_mode_for_course:
mock_mode_for_course.return_value = 'honor'
api.regenerate_user_certificates(self.student, self.course.id,
course=self.course)
mock_generate_cert.assert_called()
def test_regenerate_certificate_missing_params(self):
# Missing username
response = self._regenerate(course_key=self.CERT_COURSE_KEY)
......
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