Files
edx-platform/lms/djangoapps/certificates/tests/test_tasks.py
Christie Rice 8b362f11b5 fix: Unify required parameter checks
MICROBA-1373
2021-07-19 14:48:08 -04:00

102 lines
3.2 KiB
Python

"""
Tests for course certificate tasks.
"""
from unittest import mock
from unittest.mock import patch
import ddt
from django.test import TestCase
from opaque_keys.edx.keys import CourseKey
from common.djangoapps.course_modes.models import CourseMode
from common.djangoapps.student.tests.factories import UserFactory
from lms.djangoapps.certificates.data import CertificateStatuses
from lms.djangoapps.certificates.tasks import generate_certificate
@ddt.ddt
class GenerateUserCertificateTest(TestCase):
"""
Tests for course certificate tasks
"""
def setUp(self):
super().setUp()
self.user = UserFactory()
self.course_key = 'course-v1:edX+DemoX+Demo_Course'
@ddt.data('student', 'course_key', 'enrollment_mode')
def test_missing_args(self, missing_arg):
kwargs = {
'student': self.user.id,
'course_key': self.course_key,
'other_arg': 'shiny',
'enrollment_mode': CourseMode.MASTERS
}
del kwargs[missing_arg]
with patch('lms.djangoapps.certificates.tasks.User.objects.get'):
with self.assertRaisesRegex(KeyError, missing_arg):
generate_certificate.apply_async(kwargs=kwargs).get()
def test_generation(self):
"""
Verify the task handles certificate generation
"""
enrollment_mode = CourseMode.VERIFIED
with mock.patch(
'lms.djangoapps.certificates.tasks.generate_course_certificate',
return_value=None
) as mock_generate_cert:
kwargs = {
'student': self.user.id,
'course_key': self.course_key,
'enrollment_mode': enrollment_mode
}
generate_certificate.apply_async(kwargs=kwargs)
mock_generate_cert.assert_called_with(
user=self.user,
course_key=CourseKey.from_string(self.course_key),
status=CertificateStatuses.downloadable,
enrollment_mode=enrollment_mode,
course_grade='',
generation_mode='batch'
)
def test_generation_custom(self):
"""
Verify the task handles certificate generation custom params
"""
gen_mode = 'self'
status = CertificateStatuses.notpassing
enrollment_mode = CourseMode.AUDIT
course_grade = '0.89'
with mock.patch(
'lms.djangoapps.certificates.tasks.generate_course_certificate',
return_value=None
) as mock_generate_cert:
kwargs = {
'status': status,
'student': self.user.id,
'course_key': self.course_key,
'course_grade': course_grade,
'enrollment_mode': enrollment_mode,
'generation_mode': gen_mode,
'what_about': 'dinosaurs'
}
generate_certificate.apply_async(kwargs=kwargs)
mock_generate_cert.assert_called_with(
user=self.user,
course_key=CourseKey.from_string(self.course_key),
status=status,
enrollment_mode=enrollment_mode,
course_grade=course_grade,
generation_mode=gen_mode
)