Merge pull request #27357 from edx/jhynes/microba-1164_revoke-program-certs-bugfix
fix: fix bug with `revoke_program_certificates` task
This commit is contained in:
@@ -343,4 +343,4 @@ class CertificateInvalidationTest(SharedModuleStoreTestCase):
|
||||
self.certificate.invalidate()
|
||||
|
||||
assert mock_revoke_task.call_count == 1
|
||||
assert mock_revoke_task.call_args[0] == (self.user.username, self.course_id)
|
||||
assert mock_revoke_task.call_args[0] == (self.user.username, str(self.course_id))
|
||||
|
||||
@@ -169,15 +169,11 @@ def handle_course_cert_revoked(sender, user, course_key, mode, status, **kwargs)
|
||||
|
||||
# schedule background task to process
|
||||
LOGGER.info(
|
||||
'handling COURSE_CERT_REVOKED: username=%s, course_key=%s, mode=%s, status=%s',
|
||||
user,
|
||||
course_key,
|
||||
mode,
|
||||
status,
|
||||
f"handling COURSE_CERT_REVOKED: user={user.id}, course_key={course_key}, mode={mode}, status={status}"
|
||||
)
|
||||
# import here, because signal is registered at startup, but items in tasks are not yet able to be loaded
|
||||
from openedx.core.djangoapps.programs.tasks import revoke_program_certificates
|
||||
revoke_program_certificates.delay(user.username, course_key)
|
||||
revoke_program_certificates.delay(user.username, str(course_key))
|
||||
|
||||
|
||||
@receiver(COURSE_CERT_DATE_CHANGE, dispatch_uid='course_certificate_date_change_handler')
|
||||
|
||||
@@ -467,7 +467,7 @@ def revoke_program_certificates(self, username, course_key): # lint-amnesty, py
|
||||
|
||||
Args:
|
||||
username (str): The username of the student
|
||||
course_key (str|CourseKey): The course identifier
|
||||
course_key (str): The course identifier
|
||||
|
||||
Returns:
|
||||
None
|
||||
@@ -510,7 +510,7 @@ def revoke_program_certificates(self, username, course_key): # lint-amnesty, py
|
||||
|
||||
try:
|
||||
inverted_programs = get_inverted_programs(student)
|
||||
course_specific_programs = inverted_programs.get(str(course_key))
|
||||
course_specific_programs = inverted_programs.get(course_key)
|
||||
if not course_specific_programs:
|
||||
# No reason to continue beyond this point
|
||||
LOGGER.info(
|
||||
|
||||
@@ -230,7 +230,7 @@ class CertRevokedReceiverTest(TestCase):
|
||||
|
||||
assert mock_is_learner_issuance_enabled.call_count == 1
|
||||
assert mock_task.call_count == 1
|
||||
assert mock_task.call_args[0] == (TEST_USERNAME, TEST_COURSE_KEY)
|
||||
assert mock_task.call_args[0] == (TEST_USERNAME, str(TEST_COURSE_KEY))
|
||||
|
||||
|
||||
@skip_unless_lms
|
||||
|
||||
@@ -676,6 +676,27 @@ class RevokeProgramCertificatesTestCase(CatalogIntegrationMixin, CredentialsApiC
|
||||
|
||||
self.inverted_programs = {self.course_key: [{'uuid': 1}, {'uuid': 2}]}
|
||||
|
||||
def _make_side_effect(self, side_effects):
|
||||
"""
|
||||
DRY helper. Returns a side effect function for use with mocks that
|
||||
will be called multiple times, permitting Exceptions to be raised
|
||||
(or not) in a specified order.
|
||||
|
||||
See Also:
|
||||
http://www.voidspace.org.uk/python/mock/examples.html#multiple-calls-with-different-effects
|
||||
http://www.voidspace.org.uk/python/mock/mock.html#mock.Mock.side_effect
|
||||
|
||||
"""
|
||||
|
||||
def side_effect(*_a):
|
||||
if side_effects:
|
||||
exc = side_effects.pop(0)
|
||||
if exc:
|
||||
raise exc
|
||||
return mock.DEFAULT
|
||||
|
||||
return side_effect
|
||||
|
||||
def test_inverted_programs(
|
||||
self,
|
||||
mock_get_inverted_programs,
|
||||
@@ -689,7 +710,7 @@ class RevokeProgramCertificatesTestCase(CatalogIntegrationMixin, CredentialsApiC
|
||||
tasks.revoke_program_certificates.delay(self.student.username, self.course_key).get()
|
||||
mock_get_inverted_programs.assert_any_call(self.student)
|
||||
|
||||
def test_revokinging_certificate(
|
||||
def test_revoke_program_certificate(
|
||||
self,
|
||||
mock_get_inverted_programs,
|
||||
mock_get_certified_programs,
|
||||
@@ -760,27 +781,6 @@ class RevokeProgramCertificatesTestCase(CatalogIntegrationMixin, CredentialsApiC
|
||||
assert not mock_get_certified_programs.called
|
||||
assert not mock_revoke_program_certificate.called
|
||||
|
||||
def _make_side_effect(self, side_effects):
|
||||
"""
|
||||
DRY helper. Returns a side effect function for use with mocks that
|
||||
will be called multiple times, permitting Exceptions to be raised
|
||||
(or not) in a specified order.
|
||||
|
||||
See Also:
|
||||
http://www.voidspace.org.uk/python/mock/examples.html#multiple-calls-with-different-effects
|
||||
http://www.voidspace.org.uk/python/mock/mock.html#mock.Mock.side_effect
|
||||
|
||||
"""
|
||||
|
||||
def side_effect(*_a):
|
||||
if side_effects:
|
||||
exc = side_effects.pop(0)
|
||||
if exc:
|
||||
raise exc
|
||||
return mock.DEFAULT
|
||||
|
||||
return side_effect
|
||||
|
||||
def test_continue_revoking_certs_if_error(
|
||||
self,
|
||||
mock_get_inverted_programs,
|
||||
|
||||
Reference in New Issue
Block a user