Exemple #1
0
    def setUp(self):
        super(CertificateStatsTestCase, self).setUp()

        # if we generate only one document for each, we won't know if we used a value in the wrong case
        GeneratedCertificateFactory(course_id=self.course.id,
                                    user=UserFactory(),
                                    status=CertificateStatuses.notpassing)

        for _ in range(2):
            GeneratedCertificateFactory(
                course_id=self.course.id,
                user=UserFactory(),
                status=CertificateStatuses.downloadable)

        for _ in range(3):
            GeneratedCertificateFactory(course_id=self.course.id,
                                        user=UserFactory(),
                                        status=CertificateStatuses.notpassing,
                                        mode="verified")

        for _ in range(4):
            GeneratedCertificateFactory(
                course_id=self.course.id,
                user=UserFactory(),
                status=CertificateStatuses.downloadable,
                mode="verified")

        self.response = self.get_response("course-dashboard:certificate-stats",
                                          self.course)
Exemple #2
0
 def test_certificate_honor_stats(self):
     GeneratedCertificateFactory(course_id=self.course.id,
                                 user=self.user,
                                 status=CertificateStatuses.notpassing)
     GeneratedCertificateFactory(course_id=self.course.id,
                                 user=UserFactory(),
                                 status=CertificateStatuses.downloadable)
     certificate_stats = stats.CertificateStats(unicode(self.course.id))
     self.assertEqual(certificate_stats.not_passing(), 1)
     self.assertEqual(certificate_stats.passing(), 1)
     self.assertEqual(certificate_stats.total(), 2)
Exemple #3
0
    def test_regen_audit_certs_eligibility(self, status, created_date, grade,
                                           expected_status):
        """
        Test that existing audit certificates remain eligible even if cert
        generation is re-run.
        """
        # Create an existing audit enrollment and certificate
        CourseEnrollmentFactory(
            user=self.user_2,
            course_id=self.course.id,
            is_active=True,
            mode=CourseMode.AUDIT,
        )
        with freezegun.freeze_time(created_date):
            GeneratedCertificateFactory(
                user=self.user_2,
                course_id=self.course.id,
                grade='1.0',
                status=status,
                mode=GeneratedCertificate.MODES.audit,
            )

        # Run grading/cert generation again
        with mock_passing_grade(grade_pass=grade):
            with patch.object(XQueueInterface, 'send_to_queue') as mock_send:
                mock_send.return_value = (0, None)
                self.xqueue.add_cert(self.user_2, self.course.id)

        self.assertEqual(
            GeneratedCertificate.objects.get(user=self.user_2,
                                             course_id=self.course.id).status,  # pylint: disable=no-member
            expected_status)
Exemple #4
0
    def test_regen_audit_certs_eligibility(self):
        """
        Test that existing audit certificates remain eligible even if cert
        generation is re-run.
        """
        # Create an existing audit enrollment and certificate
        CourseEnrollmentFactory(
            user=self.user_2,
            course_id=self.course.id,
            is_active=True,
            mode=CourseMode.AUDIT,
        )
        GeneratedCertificateFactory(
            user=self.user_2,
            course_id=self.course.id,
            grade='1.0',
            status=CertificateStatuses.downloadable,
            mode=GeneratedCertificate.MODES.audit,
        )

        # Run grading/cert generation again
        with patch('courseware.grades.grade', Mock(return_value={'grade': 'Pass', 'percent': 0.75})):
            with patch.object(XQueueInterface, 'send_to_queue') as mock_send:
                mock_send.return_value = (0, None)
                self.xqueue.add_cert(self.user_2, self.course.id)

        self.assertEqual(
            GeneratedCertificate.objects.get(user=self.user_2, course_id=self.course.id).status,  # pylint: disable=no-member
            CertificateStatuses.generating
        )
Exemple #5
0
 def _create_certificate(self, enrollment_mode):
     """Simulate that the user has a generated certificate. """
     CourseEnrollmentFactory.create(user=self.user, course_id=self.course.id, mode=enrollment_mode)
     return GeneratedCertificateFactory(
         user=self.user,
         course_id=self.course.id,
         mode=enrollment_mode,
         download_url=self.DOWNLOAD_URL,
         status="downloadable",
         grade=0.98,
     )
Exemple #6
0
    def test_certificate_verified_stats(self):
        GeneratedCertificateFactory(course_id=self.course.id,
                                    user=self.user,
                                    status=CertificateStatuses.notpassing)
        GeneratedCertificateFactory(course_id=self.course.id,
                                    user=UserFactory(),
                                    status=CertificateStatuses.downloadable)

        GeneratedCertificateFactory(course_id=self.course.id,
                                    user=UserFactory(),
                                    status=CertificateStatuses.notpassing,
                                    mode="verified")
        GeneratedCertificateFactory(course_id=self.course.id,
                                    user=UserFactory(),
                                    status=CertificateStatuses.downloadable,
                                    mode="verified")

        certificate_stats = stats.CertificateStats(unicode(self.course.id))
        self.assertEqual(certificate_stats.not_passing(), 2)
        self.assertEqual(certificate_stats.passing(), 2)

        self.assertEqual(certificate_stats.verified()["passing"], 1)
        self.assertEqual(certificate_stats.verified()["not_passing"], 1)

        self.assertEqual(certificate_stats.honor()["passing"], 1)
        self.assertEqual(certificate_stats.honor()["not_passing"], 1)

        total_passing = certificate_stats.passing()
        total_not_passing = certificate_stats.not_passing()
        self.assertEqual(
            certificate_stats.verified()["passing"] +
            certificate_stats.honor()["passing"], total_passing)
        self.assertEqual(
            certificate_stats.verified()["not_passing"] +
            certificate_stats.honor()["not_passing"], total_not_passing)

        self.assertEqual(certificate_stats.total(), 4)
Exemple #7
0
 def _create_certificate(self,
                         course_key=None,
                         enrollment_mode=CourseMode.HONOR,
                         status='downloadable'):
     """Simulate that the user has a generated certificate. """
     CourseEnrollmentFactory.create(user=self.user,
                                    course_id=self.course.id,
                                    mode=enrollment_mode)
     return GeneratedCertificateFactory(
         user=self.user,
         course_id=course_key or self.course.id,
         mode=enrollment_mode,
         download_url=self.DOWNLOAD_URL,
         status=status,
     )