Commit 711e2e7f by Peter Fogg

Correctly set certificate status for audit certs when regenerating.

COR-2403
parent 21218ef9
......@@ -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
)
......
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