92 lines
3.3 KiB
Python
92 lines
3.3 KiB
Python
"""
|
|
Unit Tests for the Certificate service
|
|
"""
|
|
|
|
from edx_toggles.toggles.testutils import override_waffle_flag
|
|
|
|
from common.djangoapps.student.tests.factories import UserFactory
|
|
from lms.djangoapps.certificates.generation_handler import CERTIFICATES_USE_ALLOWLIST
|
|
from lms.djangoapps.certificates.models import CertificateStatuses, GeneratedCertificate
|
|
from lms.djangoapps.certificates.services import CertificateService
|
|
from lms.djangoapps.certificates.tests.factories import CertificateWhitelistFactory, GeneratedCertificateFactory
|
|
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
|
|
from xmodule.modulestore.tests.factories import CourseFactory
|
|
|
|
|
|
class CertificateServiceTests(ModuleStoreTestCase):
|
|
"""
|
|
Tests for the Certificate service
|
|
"""
|
|
|
|
def setUp(self):
|
|
super().setUp()
|
|
self.service = CertificateService()
|
|
self.course = CourseFactory()
|
|
self.user = UserFactory()
|
|
self.user_id = self.user.id
|
|
self.course_id = self.course.id # pylint: disable=no-member
|
|
GeneratedCertificateFactory.create(
|
|
status=CertificateStatuses.downloadable,
|
|
user=self.user,
|
|
course_id=self.course.id, # pylint: disable=no-member
|
|
grade=1.0
|
|
)
|
|
|
|
def generated_certificate_to_dict(self, generated_certificate):
|
|
"""
|
|
Converts a Generated Certificate instance to a Python dictionary
|
|
"""
|
|
return {
|
|
'verify_uuid': generated_certificate.verify_uuid,
|
|
'download_uuid': generated_certificate.download_uuid,
|
|
'download_url': generated_certificate.download_url,
|
|
'grade': generated_certificate.grade,
|
|
'status': generated_certificate.status
|
|
}
|
|
|
|
def test_invalidate_certificate(self):
|
|
"""
|
|
Verify that CertificateService invalidates the user certificate
|
|
"""
|
|
success = self.service.invalidate_certificate(self.user_id, self.course_id)
|
|
assert success
|
|
|
|
invalid_generated_certificate = GeneratedCertificate.objects.get(
|
|
user=self.user_id,
|
|
course_id=self.course_id
|
|
)
|
|
self.assertDictEqual(
|
|
self.generated_certificate_to_dict(invalid_generated_certificate),
|
|
{
|
|
'verify_uuid': '',
|
|
'download_uuid': '',
|
|
'download_url': '',
|
|
'grade': '',
|
|
'status': CertificateStatuses.unavailable
|
|
}
|
|
)
|
|
|
|
@override_waffle_flag(CERTIFICATES_USE_ALLOWLIST, active=True)
|
|
def test_invalidate_certificate_allowlist(self):
|
|
"""
|
|
Verify that CertificateService does not invalidate the certificate if it is allowlisted
|
|
"""
|
|
u = UserFactory.create()
|
|
c = CourseFactory()
|
|
course_key = c.id # pylint: disable=no-member
|
|
GeneratedCertificateFactory.create(
|
|
status=CertificateStatuses.downloadable,
|
|
user=u,
|
|
course_id=course_key,
|
|
grade=1.0
|
|
)
|
|
CertificateWhitelistFactory(
|
|
user=u,
|
|
course_id=course_key
|
|
)
|
|
success = self.service.invalidate_certificate(u.id, course_key)
|
|
assert not success
|
|
|
|
cert = GeneratedCertificate.objects.get(user=u.id, course_id=course_key)
|
|
assert cert.status == CertificateStatuses.downloadable
|