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): ...@@ -323,9 +323,11 @@ class XQueueCertInterface(object):
# If this user's enrollment is not eligible to receive a # If this user's enrollment is not eligible to receive a
# certificate, mark it as such for reporting and # certificate, mark it as such for reporting and
# analytics. Only do this if the certificate is new -- we # analytics. Only do this if the certificate is new, or
# don't want to mark existing audit certs as ineligible. # already marked as ineligible -- we don't want to mark
if created and not is_eligible_for_certificate: # 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.status = CertificateStatuses.audit_passing if passing else CertificateStatuses.audit_notpassing
cert.save() cert.save()
LOGGER.info( LOGGER.info(
......
...@@ -205,7 +205,14 @@ class XQueueCertInterfaceAddCertificateTest(ModuleStoreTestCase): ...@@ -205,7 +205,14 @@ class XQueueCertInterfaceAddCertificateTest(ModuleStoreTestCase):
else: else:
self.assertFalse(mock_send.called) 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 Test that existing audit certificates remain eligible even if cert
generation is re-run. generation is re-run.
...@@ -221,19 +228,19 @@ class XQueueCertInterfaceAddCertificateTest(ModuleStoreTestCase): ...@@ -221,19 +228,19 @@ class XQueueCertInterfaceAddCertificateTest(ModuleStoreTestCase):
user=self.user_2, user=self.user_2,
course_id=self.course.id, course_id=self.course.id,
grade='1.0', grade='1.0',
status=CertificateStatuses.downloadable, status=status,
mode=GeneratedCertificate.MODES.audit, mode=GeneratedCertificate.MODES.audit,
) )
# Run grading/cert generation again # 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: with patch.object(XQueueInterface, 'send_to_queue') as mock_send:
mock_send.return_value = (0, None) mock_send.return_value = (0, None)
self.xqueue.add_cert(self.user_2, self.course.id) self.xqueue.add_cert(self.user_2, self.course.id)
self.assertEqual( self.assertEqual(
GeneratedCertificate.objects.get(user=self.user_2, course_id=self.course.id).status, # pylint: disable=no-member 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