Merge pull request #11427 from edx/peter-fogg/fix-audit-cert-regen
Correctly set certificate status for audit certs when regenerating.
This commit is contained in:
@@ -323,9 +323,11 @@ class XQueueCertInterface(object):
|
||||
|
||||
# If this user's enrollment is not eligible to receive a
|
||||
# certificate, mark it as such for reporting and
|
||||
# analytics. Only do this if the certificate is new -- we
|
||||
# don't want to mark existing audit certs as ineligible.
|
||||
if created and not is_eligible_for_certificate:
|
||||
# analytics. Only do this if the certificate is new, or
|
||||
# already marked as ineligible -- we don't want to mark
|
||||
# existing audit certs as ineligible.
|
||||
if (created or cert.status in (CertificateStatuses.audit_passing, CertificateStatuses.audit_notpassing)) \
|
||||
and not is_eligible_for_certificate:
|
||||
cert.status = CertificateStatuses.audit_passing if passing else CertificateStatuses.audit_notpassing
|
||||
cert.save()
|
||||
LOGGER.info(
|
||||
|
||||
@@ -205,7 +205,14 @@ class XQueueCertInterfaceAddCertificateTest(ModuleStoreTestCase):
|
||||
else:
|
||||
self.assertFalse(mock_send.called)
|
||||
|
||||
def test_regen_audit_certs_eligibility(self):
|
||||
@ddt.data(
|
||||
(CertificateStatuses.downloadable, 'Pass', CertificateStatuses.generating),
|
||||
(CertificateStatuses.audit_passing, 'Pass', CertificateStatuses.audit_passing),
|
||||
(CertificateStatuses.audit_notpassing, 'Pass', CertificateStatuses.audit_passing),
|
||||
(CertificateStatuses.audit_notpassing, None, CertificateStatuses.audit_notpassing),
|
||||
)
|
||||
@ddt.unpack
|
||||
def test_regen_audit_certs_eligibility(self, status, grade, expected_status):
|
||||
"""
|
||||
Test that existing audit certificates remain eligible even if cert
|
||||
generation is re-run.
|
||||
@@ -221,19 +228,19 @@ class XQueueCertInterfaceAddCertificateTest(ModuleStoreTestCase):
|
||||
user=self.user_2,
|
||||
course_id=self.course.id,
|
||||
grade='1.0',
|
||||
status=CertificateStatuses.downloadable,
|
||||
status=status,
|
||||
mode=GeneratedCertificate.MODES.audit,
|
||||
)
|
||||
|
||||
# Run grading/cert generation again
|
||||
with patch('courseware.grades.grade', Mock(return_value={'grade': 'Pass', 'percent': 0.75})):
|
||||
with patch('courseware.grades.grade', Mock(return_value={'grade': grade, 'percent': 0.75})):
|
||||
with patch.object(XQueueInterface, 'send_to_queue') as mock_send:
|
||||
mock_send.return_value = (0, None)
|
||||
self.xqueue.add_cert(self.user_2, self.course.id)
|
||||
|
||||
self.assertEqual(
|
||||
GeneratedCertificate.objects.get(user=self.user_2, course_id=self.course.id).status, # pylint: disable=no-member
|
||||
CertificateStatuses.generating
|
||||
expected_status
|
||||
)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user