示例#1
0
    def test_realize_course_access_roles(self):
        program_enrollment = self._create_waiting_enrollment(
            self.program, '0001')
        active_enrollment_1 = self._create_waiting_course_enrollment(
            program_enrollment, self.fruit_course, status='active')
        active_enrollment_2 = self._create_waiting_course_enrollment(
            program_enrollment, self.animal_course, status='active')
        CourseAccessRoleAssignmentFactory(enrollment=active_enrollment_1)
        CourseAccessRoleAssignmentFactory(enrollment=active_enrollment_2)
        link_program_enrollments(self.program, {'0001': self.user_1.username})

        # assert that staff CourseAccessRoles are created for the user in the courses
        fruit_course_staff_role = get_course_access_role(
            self.user_1, self.fruit_course.org, self.fruit_course,
            CourseStaffRole.ROLE)
        assert fruit_course_staff_role is not None

        animal_course_staff_role = get_course_access_role(
            self.user_1, self.animal_course.org, self.animal_course,
            CourseStaffRole.ROLE)
        assert animal_course_staff_role is not None

        # assert that all CourseAccessRoleAssignment objects are deleted
        assert not active_enrollment_1.courseaccessroleassignment_set.all(
        ).exists()
        assert not active_enrollment_2.courseaccessroleassignment_set.all(
        ).exists()
示例#2
0
    def test_realize_course_access_roles_user_with_existing_course_access_role(self):
        """
        This test asserts that, given a user that already has a staff CourseAccessRole in a course,
        if that user has a CourseAccessRoleAssignment that describes a staff role in that same course,
        that we do not mistakenly violate the unique_together constraint on the CourseAccessRole model by
        creating a duplicate. As of now, this is handled by the CourseStaffRole code itself, which silently
        ignores such duplicates, but this test is to ensure we do not regress.
        """
        program_enrollment = self._create_waiting_enrollment(self.program, '0001')
        active_enrollment_1 = self._create_waiting_course_enrollment(
            program_enrollment,
            self.fruit_course,
            status='active'
        )
        # create an CourseAccessRole for the user
        CourseAccessRoleFactory(user=self.user_1, course_id=self.fruit_course, role=CourseStaffRole.ROLE)

        # create a corresponding CourseAccessRoleAssignmentFactory that would, theoretically, cause a
        # duplicate object to be created, violating the CourseAccessRole integrity constraints
        CourseAccessRoleAssignmentFactory(enrollment=active_enrollment_1)
        link_program_enrollments(self.program, {'0001': self.user_1.username})

        # assert that staff CourseAccessRoles remains
        fruit_course_staff_role = get_course_access_role(
            self.user_1,
            self.fruit_course.org,
            self.fruit_course,
            CourseStaffRole.ROLE
        )
        assert fruit_course_staff_role is not None

        # assert that all CourseAccessRoleAssignment objects are deleted
        assert not active_enrollment_1.courseaccessroleassignment_set.all().exists()
示例#3
0
    def setUpTestData(cls):
        super().setUpTestData()
        cls.user_0 = UserFactory(username=cls.username_0)  # No enrollments
        CourseOverviewFactory(id=cls.course_key_p)
        CourseOverviewFactory(id=cls.course_key_q)
        enrollment_test_data = [  # ID
            (cls.user_0, None, cls.program_uuid_x, cls.curriculum_uuid_a,
             PEStatuses.ENROLLED),  # 1
            (None, cls.ext_3, cls.program_uuid_x, cls.curriculum_uuid_b,
             PEStatuses.PENDING),  # 2
            (None, cls.ext_4, cls.program_uuid_y, cls.curriculum_uuid_a,
             PEStatuses.ENROLLED),  # 3
            (cls.user_0, None, cls.program_uuid_y, cls.curriculum_uuid_b,
             PEStatuses.SUSPENDED),  # 4
        ]
        for user, external_user_key, program_uuid, curriculum_uuid, status in enrollment_test_data:
            ProgramEnrollmentFactory(
                user=user,
                external_user_key=external_user_key,
                program_uuid=program_uuid,
                curriculum_uuid=curriculum_uuid,
                status=status,
            )
        course_enrollment_test_data = [  # ID
            (1, cls.course_key_p, PCEStatuses.ACTIVE, True),  # 1
            (2, cls.course_key_q, PCEStatuses.ACTIVE, False),  # 2
            (3, cls.course_key_p, PCEStatuses.ACTIVE, True),  # 3
            (4, cls.course_key_q, PCEStatuses.ACTIVE, False),  # 4
        ]
        for program_enrollment_id, course_key, status, course_staff in course_enrollment_test_data:
            program_enrollment = ProgramEnrollment.objects.get(
                id=program_enrollment_id)
            course_enrollment = (CourseEnrollmentFactory(
                course_id=course_key,
                user=program_enrollment.user,
                mode=CourseMode.MASTERS,
            ) if program_enrollment.user else None)

            program_course_enrollment = ProgramCourseEnrollmentFactory(
                program_enrollment=program_enrollment,
                course_enrollment=course_enrollment,
                course_key=course_key,
                status=status,
            )
            if course_staff:
                if program_enrollment.user:
                    CourseStaffRole(course_key).add_users(
                        program_enrollment.user)
                else:
                    CourseAccessRoleAssignmentFactory(
                        enrollment=program_course_enrollment)