Esempio n. 1
0
    def _set_up_invited_student(self,
                                course,
                                active=False,
                                enrolled=True,
                                course_mode=''):
        """
        Helper function to create a user in the right state, invite them into the course, and update their
        course mode if needed.
        """
        email = '*****@*****.**'
        user = UserFactory(username='******',
                           first_name='Student',
                           last_name='Person',
                           email=email,
                           is_active=active)

        # invite the user to the course
        cea = CourseEnrollmentAllowed(email=email,
                                      course_id=course.id,
                                      auto_enroll=True)
        cea.save()

        if enrolled:
            CourseEnrollment.enroll(user, course.id)

            if course_mode:
                course_enrollment = CourseEnrollment.objects.get(
                    user=user, course_id=self.course.id)
                course_enrollment.mode = course_mode
                course_enrollment.save()

        return user
Esempio n. 2
0
    def __init__(self, course_id, email):
        # N.B. retired users are not a concern here because they should be
        # handled at a higher level (i.e. in enroll_email).  Besides, this
        # class creates readonly objects.
        exists_user = User.objects.filter(email=email).exists()
        if exists_user:
            user = User.objects.get(email=email)
            mode, is_active = CourseEnrollment.enrollment_mode_for_user(user, course_id)
            # is_active is `None` if the user is not enrolled in the course
            exists_ce = is_active is not None and is_active
            full_name = user.profile.name
            ceas = CourseEnrollmentAllowed.for_user(user).filter(course_id=course_id).all()
        else:
            mode = None
            exists_ce = False
            full_name = None
            ceas = CourseEnrollmentAllowed.objects.filter(email=email, course_id=course_id).all()
        exists_allowed = ceas.exists()
        state_auto_enroll = exists_allowed and ceas[0].auto_enroll

        self.user = exists_user
        self.enrollment = exists_ce
        self.allowed = exists_allowed
        self.auto_enroll = bool(state_auto_enroll)
        self.full_name = full_name
        self.mode = mode
Esempio n. 3
0
def list_may_enroll(course_key, features):
    """
    Return info about students who may enroll in a course as a dict.

    list_may_enroll(course_key, ['email'])
    would return [
        {'email': 'email1'}
        {'email': 'email2'}
        {'email': 'email3'}
    ]

    Note that result does not include students who may enroll and have
    already done so.
    """
    may_enroll_and_unenrolled = CourseEnrollmentAllowed.may_enroll_and_unenrolled(
        course_key)

    def extract_student(student, features):
        """
        Build dict containing information about a single student.
        """
        return dict(
            (feature, getattr(student, feature)) for feature in features)

    return [
        extract_student(student, features)
        for student in may_enroll_and_unenrolled
    ]
Esempio n. 4
0
 def test_retiring_nonexistent_user_doesnt_modify_records(self):
     is_successful = CourseEnrollmentAllowed.delete_by_user_value(
         value='*****@*****.**', field='email')
     assert not is_successful
     user_search_results = CourseEnrollmentAllowed.objects.filter(
         email=self.email)
     assert user_search_results.exists()
Esempio n. 5
0
 def test_retiring_user_deletes_record(self):
     is_successful = CourseEnrollmentAllowed.delete_by_user_value(
         value=self.email, field='email')
     assert is_successful
     user_search_results = CourseEnrollmentAllowed.objects.filter(
         email=self.email)
     assert not user_search_results
Esempio n. 6
0
    def test_unenroll_non_user_student(
            self, view_name, send_email, outbox_count, student_form_input_name, button_tuple, identifier):
        """
        Unenroll a list of students who are not users yet
        """
        self.make_coach()
        course = CourseFactory.create()
        ccx = self.make_ccx()
        course_key = CCXLocator.from_course_locator(course.id, ccx.id)
        outbox = self.get_outbox()
        CourseEnrollmentAllowed(course_id=course_key, email=identifier)
        assert outbox == []

        url = reverse(
            view_name,
            kwargs={'course_id': course_key}
        )
        data = {
            button_tuple[0]: button_tuple[1],
            student_form_input_name: ','.join([identifier, ]),
        }
        if send_email:
            data['email-students'] = 'Notify-students-by-email'
        response = self.client.post(url, data=data, follow=True)
        assert response.status_code == 200
        # we were redirected to our current location
        assert len(response.redirect_chain) == 1
        assert 302 in response.redirect_chain[0]
        assert len(outbox) == outbox_count
        assert not CourseEnrollmentAllowed.objects.filter(course_id=course_key, email=identifier).exists()