Files
edx-platform/lms/djangoapps/certificates/tests/test_services.py

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