Exemplo n.º 1
0
    def test_generate_enrollment_status_hash(self):
        """ Verify the method returns a hash of a user's current enrollments. """
        # Return None for anonymous users
        self.assertIsNone(
            CourseEnrollment.generate_enrollment_status_hash(AnonymousUser()))

        # No enrollments
        expected = hashlib.md5(self.user.username.encode('utf-8')).hexdigest()  # lint-amnesty, pylint: disable=no-member
        self.assertEqual(
            CourseEnrollment.generate_enrollment_status_hash(self.user),
            expected)
        self.assert_enrollment_status_hash_cached(self.user, expected)

        # No active enrollments
        enrollment_mode = 'verified'
        course_id = self.course.id  # pylint: disable=no-member
        enrollment = CourseEnrollmentFactory.create(user=self.user,
                                                    course_id=course_id,
                                                    mode=enrollment_mode,
                                                    is_active=False)
        self.assertEqual(
            CourseEnrollment.generate_enrollment_status_hash(self.user),
            expected)
        self.assert_enrollment_status_hash_cached(self.user, expected)

        # One active enrollment
        enrollment.is_active = True
        enrollment.save()
        expected = '{username}&{course_id}={mode}'.format(
            username=self.user.username,
            course_id=str(course_id).lower(),
            mode=enrollment_mode.lower())
        expected = hashlib.md5(expected.encode('utf-8')).hexdigest()
        self.assertEqual(
            CourseEnrollment.generate_enrollment_status_hash(self.user),
            expected)
        self.assert_enrollment_status_hash_cached(self.user, expected)

        # Multiple enrollments
        CourseEnrollmentFactory.create(user=self.user)
        enrollments = CourseEnrollment.enrollments_for_user(
            self.user).order_by(Lower('course_id'))
        hash_elements = [self.user.username]
        hash_elements += [
            '{course_id}={mode}'.format(
                course_id=str(enrollment.course_id).lower(),
                mode=enrollment.mode.lower()) for enrollment in enrollments
        ]
        expected = hashlib.md5(
            '&'.join(hash_elements).encode('utf-8')).hexdigest()
        self.assertEqual(
            CourseEnrollment.generate_enrollment_status_hash(self.user),
            expected)
        self.assert_enrollment_status_hash_cached(self.user, expected)
Exemplo n.º 2
0
    def test_save_deletes_cached_enrollment_status_hash(self):
        """ Verify the method deletes the cached enrollment status hash for the user. """
        # There should be no cached value for a new user with no enrollments.
        self.assertIsNone(cache.get(CourseEnrollment.enrollment_status_hash_cache_key(self.user)))

        # Generating a status hash should cache the generated value.
        status_hash = CourseEnrollment.generate_enrollment_status_hash(self.user)
        self.assert_enrollment_status_hash_cached(self.user, status_hash)

        # Modifying enrollments should delete the cached value.
        CourseEnrollmentFactory.create(user=self.user)
        self.assertIsNone(cache.get(CourseEnrollment.enrollment_status_hash_cache_key(self.user)))