MICROBA-923 Add method to generate V2 course certificates (#26898)

This commit is contained in:
Christie Rice
2021-03-09 11:02:19 -05:00
committed by GitHub
parent 05dbd83290
commit 4aff07ad82
6 changed files with 200 additions and 90 deletions

View File

@@ -13,12 +13,17 @@ from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
from xmodule.modulestore.tests.factories import CourseFactory
from common.djangoapps.student.tests.factories import CourseEnrollmentFactory, UserFactory
from lms.djangoapps.certificates.generation_handler import CERTIFICATES_USE_ALLOWLIST
from lms.djangoapps.certificates.generation_handler import CERTIFICATES_USE_ALLOWLIST, CERTIFICATES_USE_UPDATED
from lms.djangoapps.certificates.generation_handler import (
_can_generate_allowlist_certificate_for_status,
is_using_certificate_allowlist,
can_generate_allowlist_certificate,
_is_using_v2_course_certificates,
_can_generate_allowlist_certificate,
_can_generate_v2_certificate,
can_generate_certificate_task,
generate_allowlist_certificate_task,
generate_certificate_task,
generate_regular_certificate_task,
is_using_certificate_allowlist_and_is_on_allowlist
)
from lms.djangoapps.certificates.models import GeneratedCertificate, CertificateStatuses
@@ -147,29 +152,38 @@ class AllowlistTests(ModuleStoreTestCase):
"""
Test handling of an invalid user/course run combo
"""
assert not can_generate_allowlist_certificate(self.user, self.course_run_key)
assert not _can_generate_allowlist_certificate(self.user, self.course_run_key)
assert not generate_allowlist_certificate_task(self.user, self.course_run_key)
assert not can_generate_certificate_task(self.user, self.course_run_key)
assert not generate_certificate_task(self.user, self.course_run_key)
def test_handle_valid(self):
"""
Test handling of a valid user/course run combo
"""
assert can_generate_allowlist_certificate(self.user, self.course_run_key)
assert _can_generate_allowlist_certificate(self.user, self.course_run_key)
assert generate_allowlist_certificate_task(self.user, self.course_run_key)
def test_handle_valid_general_methods(self):
"""
Test handling of a valid user/course run combo for the general (non-allowlist) generation methods
"""
assert can_generate_certificate_task(self.user, self.course_run_key)
assert generate_certificate_task(self.user, self.course_run_key)
def test_can_generate_auto_disabled(self):
"""
Test handling when automatic generation is disabled
"""
with override_waffle_switch(AUTO_GENERATION_SWITCH, active=False):
assert not can_generate_allowlist_certificate(self.user, self.course_run_key)
assert not _can_generate_allowlist_certificate(self.user, self.course_run_key)
def test_can_generate_not_verified(self):
"""
Test handling when the user's id is not verified
"""
with mock.patch(ID_VERIFIED_METHOD, return_value=False):
assert not can_generate_allowlist_certificate(self.user, self.course_run_key)
assert not _can_generate_allowlist_certificate(self.user, self.course_run_key)
def test_can_generate_not_enrolled(self):
"""
@@ -179,7 +193,7 @@ class AllowlistTests(ModuleStoreTestCase):
cr = CourseFactory()
key = cr.id # pylint: disable=no-member
CertificateWhitelistFactory.create(course_id=key, user=u)
assert not can_generate_allowlist_certificate(u, key)
assert not _can_generate_allowlist_certificate(u, key)
def test_can_generate_not_whitelisted(self):
"""
@@ -194,7 +208,7 @@ class AllowlistTests(ModuleStoreTestCase):
is_active=True,
mode="verified",
)
assert not can_generate_allowlist_certificate(u, key)
assert not _can_generate_allowlist_certificate(u, key)
def test_can_generate_invalidated(self):
"""
@@ -222,4 +236,61 @@ class AllowlistTests(ModuleStoreTestCase):
active=True
)
assert not can_generate_allowlist_certificate(u, key)
assert not _can_generate_allowlist_certificate(u, key)
@override_switch(AUTO_GENERATION_SWITCH_NAME, active=True)
@override_waffle_flag(CERTIFICATES_USE_UPDATED, active=True)
@mock.patch(ID_VERIFIED_METHOD, mock.Mock(return_value=True))
class CertificateTests(ModuleStoreTestCase):
"""
Tests for handling course certificates
"""
def setUp(self):
super().setUp()
# Create user, a course run, and an enrollment
self.user = UserFactory()
self.course_run = CourseFactory()
self.course_run_key = self.course_run.id # pylint: disable=no-member
self.enrollment = CourseEnrollmentFactory(
user=self.user,
course_id=self.course_run_key,
is_active=True,
mode="verified",
)
def test_handle_valid(self):
"""
Test handling of a valid user/course run combo.
Note: these assertions are placeholders for now. They will be updated as the implementation is added.
"""
assert not _can_generate_v2_certificate(self.user, self.course_run_key)
assert can_generate_certificate_task(self.user, self.course_run_key)
assert not generate_certificate_task(self.user, self.course_run_key)
assert not generate_regular_certificate_task(self.user, self.course_run_key)
@override_waffle_flag(CERTIFICATES_USE_UPDATED, active=False)
def test_handle_invalid(self):
"""
Test handling of an invalid user/course run combo
"""
assert not _can_generate_v2_certificate(self.user, self.course_run_key)
assert not can_generate_certificate_task(self.user, self.course_run_key)
assert not generate_certificate_task(self.user, self.course_run_key)
assert not generate_regular_certificate_task(self.user, self.course_run_key)
def test_is_using_updated_true(self):
"""
Test the updated flag
"""
assert _is_using_v2_course_certificates(self.course_run_key)
@override_waffle_flag(CERTIFICATES_USE_UPDATED, active=False)
def test_is_using_updated_false(self):
"""
Test the updated flag without the override
"""
assert not _is_using_v2_course_certificates(self.course_run_key)