def send_notifications(self, certs, grades, delay=0, page_size=0):
        """ Run actual handler commands for the provided certs and grades. """

        # First, do certs
        for i, cert in paged_query(certs, delay, page_size):
            log.info(
                "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,
            }
            handle_course_cert_changed(**signal_args)
            handle_cert_change(**signal_args)

        # Then do grades
        for i, grade in paged_query(grades, delay, page_size):
            log.info(
                "Handling grade changes %d for grade %s",
                i,
                gradestr(grade),
            )

            user = User.objects.get(id=grade.user_id)
            send_grade_if_interesting(user, grade.course_id, None, None,
                                      grade.letter_grade, grade.percent_grade)
Ejemplo n.º 2
0
 def test_send_grade_if_in_a_program(self, in_program,
                                     mock_is_course_run_in_a_program,
                                     mock_send_grade_to_credentials):
     mock_is_course_run_in_a_program.return_value = in_program
     send_grade_if_interesting(self.user, self.key, 'verified',
                               'downloadable', 'A', 1.0)
     self.assertIs(mock_send_grade_to_credentials.delay.called, in_program)
Ejemplo n.º 3
0
    def send_notifications(self, certs, grades, delay=0, page_size=0):
        """ Run actual handler commands for the provided certs and grades. """

        # First, do certs
        for i, cert in paged_query(certs, delay, page_size):
            log.info(
                "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,
            }
            handle_course_cert_changed(**signal_args)
            handle_cert_change(**signal_args)

        # Then do grades
        for i, grade in paged_query(grades, delay, page_size):
            log.info(
                "Handling grade changes %d for grade %s",
                i, gradestr(grade),
            )

            user = User.objects.get(id=grade.user_id)
            send_grade_if_interesting(user, grade.course_id, None, None, grade.letter_grade, grade.percent_grade)
Ejemplo n.º 4
0
 def test_send_grade_without_grade(self, mock_is_course_run_in_a_program,
                                   mock_send_grade_to_credentials,
                                   _mock_is_learner_issuance_enabled):
     mock_is_course_run_in_a_program.return_value = True
     send_grade_if_interesting(self.user, self.key, 'verified',
                               'downloadable', None, None)
     self.assertFalse(mock_send_grade_to_credentials.delay.called)
Ejemplo n.º 5
0
 def test_send_grade_if_in_a_program(self, in_program,
                                     mock_is_course_run_in_a_program,
                                     mock_send_grade_to_credentials,
                                     _mock_is_learner_issuance_enabled):
     mock_is_course_run_in_a_program.return_value = in_program
     send_grade_if_interesting(self.user, self.key, 'verified',
                               'downloadable', 'A', 1.0)
     assert mock_send_grade_to_credentials.delay.called is in_program
Ejemplo n.º 6
0
    def test_send_grade_queries_grade(self, mock_is_course_run_in_a_program, mock_send_grade_to_credentials):
        mock_is_course_run_in_a_program.return_value = True

        with mock_passing_grade('B', 0.81):
            send_grade_if_interesting(self.user, self.key, 'verified', 'downloadable', None, None)
        self.assertTrue(mock_send_grade_to_credentials.delay.called)
        self.assertEqual(mock_send_grade_to_credentials.delay.call_args[0],
                         (self.user.username, str(self.key), True, 'B', 0.81))
        mock_send_grade_to_credentials.delay.reset_mock()
Ejemplo n.º 7
0
 def test_send_grade_records_disabled_globally(
         self, _mock_is_course_run_in_a_program,
         mock_send_grade_to_credentials, _mock_is_learner_issuance_enabled):
     assert is_learner_records_enabled()
     with override_settings(FEATURES={"ENABLE_LEARNER_RECORDS": False}):
         assert not is_learner_records_enabled()
         send_grade_if_interesting(self.user, self.key, 'verified',
                                   'downloadable', None, None)
     assert not mock_send_grade_to_credentials.delay.called
Ejemplo n.º 8
0
    def test_send_grade_queries_grade(self, mock_is_course_run_in_a_program, mock_send_grade_to_credentials,
                                      _mock_is_learner_issuance_enabled):
        mock_is_course_run_in_a_program.return_value = True

        with mock_passing_grade('B', 0.81):
            send_grade_if_interesting(self.user, self.key, 'verified', 'downloadable', None, None)
        self.assertTrue(mock_send_grade_to_credentials.delay.called)
        self.assertEqual(mock_send_grade_to_credentials.delay.call_args[0],
                         (self.user.username, str(self.key), True, 'B', 0.81))
        mock_send_grade_to_credentials.delay.reset_mock()
Ejemplo n.º 9
0
    def test_send_grade_records_enabled(self, _mock_is_course_run_in_a_program, mock_send_grade_to_credentials,
                                        _mock_is_learner_issuance_enabled):
        site_config = SiteConfigurationFactory.create(
            values={'course_org_filter': [self.key.org]},
        )

        # Correctly sent
        send_grade_if_interesting(self.user, self.key, 'verified', 'downloadable', None, None)
        self.assertTrue(mock_send_grade_to_credentials.delay.called)
        mock_send_grade_to_credentials.delay.reset_mock()

        # Correctly not sent
        site_config.values['ENABLE_LEARNER_RECORDS'] = False
        site_config.save()
        send_grade_if_interesting(self.user, self.key, 'verified', 'downloadable', None, None)
        self.assertFalse(mock_send_grade_to_credentials.delay.called)
Ejemplo n.º 10
0
    def test_send_grade_records_enabled(self, _mock_is_course_run_in_a_program, mock_send_grade_to_credentials,
                                        _mock_is_learner_issuance_enabled):
        site_config = SiteConfigurationFactory.create(
            site_values={'course_org_filter': [self.key.org]},
            values={'course_org_filter': [self.key.org]},
        )

        # Correctly sent
        send_grade_if_interesting(self.user, self.key, 'verified', 'downloadable', None, None)
        self.assertTrue(mock_send_grade_to_credentials.delay.called)
        mock_send_grade_to_credentials.delay.reset_mock()

        # Correctly not sent
        site_config.values['ENABLE_LEARNER_RECORDS'] = False
        site_config.save()
        send_grade_if_interesting(self.user, self.key, 'verified', 'downloadable', None, None)
        self.assertFalse(mock_send_grade_to_credentials.delay.called)
Ejemplo n.º 11
0
    def test_send_grade_if_right_cert(self, called, mode, status,
                                      mock_is_course_run_in_a_program,
                                      mock_send_grade_to_credentials):
        mock_is_course_run_in_a_program.return_value = True

        # Test direct send
        send_grade_if_interesting(self.user, self.key, mode, status, 'A', 1.0)
        self.assertIs(mock_send_grade_to_credentials.delay.called, called)
        mock_send_grade_to_credentials.delay.reset_mock()

        # Test query
        GeneratedCertificateFactory(user=self.user,
                                    course_id=self.key,
                                    status=status,
                                    mode=mode)
        send_grade_if_interesting(self.user, self.key, None, None, 'A', 1.0)
        self.assertIs(mock_send_grade_to_credentials.delay.called, called)
Ejemplo n.º 12
0
    def test_send_grade_if_right_cert(self, called, mode, status, mock_is_course_run_in_a_program,
                                      mock_send_grade_to_credentials, _mock_is_learner_issuance_enabled):
        mock_is_course_run_in_a_program.return_value = True

        # Test direct send
        send_grade_if_interesting(self.user, self.key, mode, status, 'A', 1.0)
        self.assertIs(mock_send_grade_to_credentials.delay.called, called)
        mock_send_grade_to_credentials.delay.reset_mock()

        # Test query
        GeneratedCertificateFactory(
            user=self.user,
            course_id=self.key,
            status=status,
            mode=mode
        )
        send_grade_if_interesting(self.user, self.key, None, None, 'A', 1.0)
        self.assertIs(mock_send_grade_to_credentials.delay.called, called)
Ejemplo n.º 13
0
 def test_send_grade_if_in_a_program(self, in_program, mock_is_course_run_in_a_program,
                                     mock_send_grade_to_credentials, _mock_is_learner_issuance_enabled):
     mock_is_course_run_in_a_program.return_value = in_program
     send_grade_if_interesting(self.user, self.key, 'verified', 'downloadable', 'A', 1.0)
     self.assertIs(mock_send_grade_to_credentials.delay.called, in_program)
Ejemplo n.º 14
0
    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)
Ejemplo n.º 15
0
 def test_send_grade_missing_cert(self, _, mock_send_grade_to_credentials,
                                  _mock_is_learner_issuance_enabled):
     send_grade_if_interesting(self.user, self.key, None, None, 'A', 1.0)
     self.assertFalse(mock_send_grade_to_credentials.delay.called)
Ejemplo n.º 16
0
 def test_send_grade_missing_cert(self, _, mock_send_grade_to_credentials, _mock_is_learner_issuance_enabled):
     send_grade_if_interesting(self.user, self.key, None, None, 'A', 1.0)
     self.assertFalse(mock_send_grade_to_credentials.delay.called)
Ejemplo n.º 17
0
 def test_send_grade_without_grade(self, mock_is_course_run_in_a_program, mock_send_grade_to_credentials,
                                   _mock_is_learner_issuance_enabled):
     mock_is_course_run_in_a_program.return_value = True
     send_grade_if_interesting(self.user, self.key, 'verified', 'downloadable', None, None)
     self.assertFalse(mock_send_grade_to_credentials.delay.called)