def test_programs_disabled(self, mock_is_learner_issuance_enabled, mock_task): """ Ensures that the receiver function does nothing when the credentials API configuration is not enabled. """ handle_course_cert_awarded(**self.signal_kwargs) self.assertEqual(mock_is_learner_issuance_enabled.call_count, 1) self.assertEqual(mock_task.call_count, 0)
def test_programs_enabled(self, mock_is_certification_enabled, mock_task): """ Ensures that the receiver function invokes the expected celery task when the programs API configuration is enabled. """ mock_is_certification_enabled.return_value = True handle_course_cert_awarded(**self.signal_kwargs) self.assertEqual(mock_is_certification_enabled.call_count, 1) self.assertEqual(mock_task.call_count, 1) self.assertEqual(mock_task.call_args[0], (TEST_USERNAME,))
def test_programs_enabled(self, mock_is_certification_enabled, mock_task): """ Ensures that the receiver function invokes the expected celery task when the programs API configuration is enabled. """ mock_is_certification_enabled.return_value = True handle_course_cert_awarded(**self.signal_kwargs) self.assertEqual(mock_is_certification_enabled.call_count, 1) self.assertEqual(mock_task.call_count, 1) self.assertEqual(mock_task.call_args[0], (TEST_USERNAME, ))
def test_programs_enabled(self, mock_is_learner_issuance_enabled, mock_task): """ Ensures that the receiver function invokes the expected celery task when the credentials API configuration is enabled. """ mock_is_learner_issuance_enabled.return_value = True handle_course_cert_awarded(**self.signal_kwargs) assert mock_is_learner_issuance_enabled.call_count == 1 assert mock_task.call_count == 1 assert mock_task.call_args[0] == (TEST_USERNAME,)
def send_notifications(self, certs, grades, delay=0): """ Run actual handler commands for the provided certs and grades. """ # First, do certs for i, cert in enumerate(certs, start=1): log.info( "Handling credential changes %d for certificate %s", i, certstr(cert), ) if delay: time.sleep(delay) signal_args = { 'sender': None, 'user': cert.user, 'course_key': cert.course_id, 'mode': cert.mode, 'status': cert.status, } handle_course_cert_awarded(**signal_args) handle_course_cert_changed(**signal_args) handle_cert_change(**signal_args) # Then do grades for i, grade in enumerate(grades, start=1): log.info( "Handling grade changes %d for grade %s", i, gradestr(grade), ) if delay: time.sleep(delay) user = User.objects.get(id=grade.user_id) send_grade_if_interesting(user, grade.course_id, None, None, grade.letter_grade, grade.percent_grade)
def send_notifications(self, certs, grades, site_config=None, delay=0, page_size=0, verbose=False, notify_programs=False): """ Run actual handler commands for the provided certs and grades. """ course_cert_info = {} # First, do certs for i, cert in paged_query(certs, delay, page_size): if site_config and not site_config.has_org(cert.course_id.org): log.info(u"Skipping credential changes %d for certificate %s", i, certstr(cert)) continue log.info( u"Handling credential changes %d for certificate %s", i, certstr(cert), ) signal_args = { 'sender': None, 'user': cert.user, 'course_key': cert.course_id, 'mode': cert.mode, 'status': cert.status, 'verbose': verbose, } data = {'mode': cert.mode, 'status': cert.status} course_cert_info[(cert.user.id, str(cert.course_id))] = data handle_course_cert_changed(**signal_args) if notify_programs and CertificateStatuses.is_passing_status( cert.status): handle_course_cert_awarded(**signal_args) # Then do grades for i, grade in paged_query(grades, delay, page_size): if site_config and not site_config.has_org(grade.course_id.org): log.info(u"Skipping grade changes %d for grade %s", i, gradestr(grade)) continue log.info( u"Handling grade changes %d for grade %s", i, gradestr(grade), ) user = User.objects.get(id=grade.user_id) # Grab mode/status from cert call key = (user.id, str(grade.course_id)) cert_info = course_cert_info.get(key, {}) mode = cert_info.get('mode', None) status = cert_info.get('status', None) send_grade_if_interesting(user, grade.course_id, mode, status, grade.letter_grade, grade.percent_grade, verbose=verbose)