Skip to content
Snippets Groups Projects
Unverified Commit 5dc13d06 authored by Brittney Exline's avatar Brittney Exline Committed by GitHub
Browse files

Merge pull request #18191 from edx/bexline/fix_cert_generation

LEARNER-5185 Fix bug in cert generation for passing users who become approved
parents ef477ee2 083fed96
No related merge requests found
......@@ -83,6 +83,7 @@ def _listen_for_id_verification_status_changed(sender, user, **kwargs): # pylin
user_enrollments = CourseEnrollment.enrollments_for_user(user=user)
grade_factory = CourseGradeFactory()
expected_verification_status = IDVerificationService.user_status(user)
expected_verification_status = expected_verification_status['status']
for enrollment in user_enrollments:
if grade_factory.read(user=user, course=enrollment.course_overview).passed:
if fire_ungenerated_certificate_task(user, enrollment.course_id, expected_verification_status):
......@@ -93,7 +94,7 @@ def _listen_for_id_verification_status_changed(sender, user, **kwargs): # pylin
log.info(message.format(
user=user.id,
course=enrollment.course_id,
status=expected_verification_status['status']
status=expected_verification_status
))
......
......@@ -32,6 +32,15 @@ def generate_certificate(self, **kwargs):
expected_verification_status = kwargs.pop('expected_verification_status', None)
if expected_verification_status:
actual_verification_status = IDVerificationService.user_status(student)
actual_verification_status = actual_verification_status['status']
if expected_verification_status != actual_verification_status:
logger.warn('Expected verification status {expected} '
'differs from actual verification status {actual} '
'for user {user} in course {course}'.format(
expected=expected_verification_status,
actual=actual_verification_status,
user=student.id,
course=course_key
))
raise self.retry(kwargs=original_kwargs)
generate_user_certificates(student=student, course_key=course_key, **kwargs)
......@@ -15,7 +15,7 @@ from lms.djangoapps.certificates.models import (
from lms.djangoapps.certificates.signals import fire_ungenerated_certificate_task, CERTIFICATE_DELAY_SECONDS
from lms.djangoapps.grades.course_grade_factory import CourseGradeFactory
from lms.djangoapps.grades.tests.utils import mock_passing_grade
from lms.djangoapps.verify_student.models import SoftwareSecurePhotoVerification
from lms.djangoapps.verify_student.models import IDVerificationAttempt, SoftwareSecurePhotoVerification
from openedx.core.djangoapps.certificates.config import waffle
from student.tests.factories import CourseEnrollmentFactory, UserFactory
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
......@@ -263,17 +263,12 @@ class LearnerTrackChangeCertsTest(ModuleStoreTestCase):
status='submitted'
)
attempt.approve()
expected_verification_status = {
'status': 'approved',
'error': '',
'should_display': True,
}
mock_generate_certificate_apply_async.assert_called_with(
countdown=CERTIFICATE_DELAY_SECONDS,
kwargs={
'student': unicode(self.user_one.id),
'course_key': unicode(self.course_one.id),
'expected_verification_status': unicode(expected_verification_status),
'expected_verification_status': IDVerificationAttempt.STATUS.approved,
}
)
......@@ -289,17 +284,12 @@ class LearnerTrackChangeCertsTest(ModuleStoreTestCase):
status='submitted'
)
attempt.approve()
expected_verification_status = {
'status': 'approved',
'error': '',
'should_display': True,
}
mock_generate_certificate_apply_async.assert_called_with(
countdown=CERTIFICATE_DELAY_SECONDS,
kwargs={
'student': unicode(self.user_two.id),
'course_key': unicode(self.course_two.id),
'expected_verification_status': unicode(expected_verification_status),
'expected_verification_status': IDVerificationAttempt.STATUS.approved,
}
)
......
......@@ -4,6 +4,7 @@ from mock import call, patch
from opaque_keys.edx.keys import CourseKey
from lms.djangoapps.certificates.tasks import generate_certificate
from lms.djangoapps.verify_student.models import IDVerificationAttempt
from student.tests.factories import UserFactory
......@@ -47,16 +48,10 @@ class GenerateUserCertificateTest(TestCase):
course_key = 'course-v1:edX+CS101+2017_T2'
student = UserFactory()
expected_verification_status = {
'status': 'approved',
'error': '',
'should_display': True,
}
kwargs = {
'student': student.id,
'course_key': course_key,
'expected_verification_status': expected_verification_status,
'expected_verification_status': IDVerificationAttempt.STATUS.approved
}
user_status_mock.side_effect = [
......
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