import os from django.test import TestCase from django.test.utils import override_settings from labs.models import ( User, CertificateIssuance, ) from labs.certificate.issue import issue_certificate from labs.certificate.exceptions import CertificateIssuanceError @override_settings( CERTIFICATE_STORAGE_PROVIDER="local", CELERY_TASK_ALWAYS_EAGER=True, CELERY_TASK_EAGER_PROPAGATES=True, ) class TestIssueCertificate(TestCase): fixtures = [ "labs/tests/fixtures/cert0.json", ] def setUp(self): self.user = User.objects.get(email="test.user1@example.com") def test_issue_certificate_success(self): cert_short_name = "PCTP_v6" self.assertQuerySetEqual( CertificateIssuance.objects.filter( recipient__user=self.user, cert_type__short_name=cert_short_name, source=CertificateIssuance.Source.LAB, ), [], ) issuance = issue_certificate( self.user, cert_short_name, source=CertificateIssuance.Source.LAB ) issuance.refresh_from_db() self.assertIsNotNone(issuance) self.assertEqual(issuance.recipient.user, self.user) self.assertEqual(issuance.cert_type.short_name, cert_short_name) self.assertEqual(issuance.source, CertificateIssuance.Source.LAB) self.assertEqual(issuance.file_storage_provider, "local") self.assertEqual(issuance.file_bucket, "") self.assertTrue(os.path.exists(issuance.file_object_key)) def test_issue_certificate_already_exists(self): cert_short_name = "PCTP_v6" first_issuance = issue_certificate( self.user, cert_short_name, source=CertificateIssuance.Source.LAB ) self.assertIsNotNone(first_issuance) self.assertEqual(first_issuance.recipient.user, self.user) self.assertEqual(first_issuance.cert_type.short_name, cert_short_name) self.assertEqual(first_issuance.source, CertificateIssuance.Source.LAB) second_issuance = issue_certificate( self.user, cert_short_name, source=CertificateIssuance.Source.LAB ) self.assertIsNotNone(second_issuance) self.assertEqual(second_issuance.id, first_issuance.id) self.assertEqual(second_issuance.cert_number, first_issuance.cert_number) def test_issue_certificate_without_user_first_name_or_last_name(self): self.user.first_name = "" self.user.last_name = "" self.user.save() cert_short_name = "PCTP_v6" with self.assertRaises(CertificateIssuanceError): issue_certificate( self.user, cert_short_name, source=CertificateIssuance.Source.LAB )