def unenroll_email(course_id, student_email, email_students=False, email_params=None): """ Unenroll a student by email. `student_email` is student's emails e.g. "*****@*****.**" `email_students` determines if student should be notified of action by email. `email_params` parameters used while parsing email templates (a `dict`). returns two EmailEnrollmentState's representing state before and after the action. """ previous_state = EmailEnrollmentState(course_id, student_email) if previous_state.enrollment: CourseEnrollment.unenroll_by_email(student_email, course_id) if email_students: email_params['message'] = 'enrolled_unenroll' email_params['email_address'] = student_email email_params['full_name'] = previous_state.full_name send_mail_to_student(student_email, email_params) if previous_state.allowed: CourseEnrollmentAllowed.objects.get(course_id=course_id, email=student_email).delete() if email_students: email_params['message'] = 'allowed_unenroll' email_params['email_address'] = student_email # Since no User object exists for this student there is no "full_name" available. send_mail_to_student(student_email, email_params) after_state = EmailEnrollmentState(course_id, student_email) return previous_state, after_state
def unenroll_email(course_id, student_email, email_students=False, email_params=None, language=None): """ Unenroll a student by email. `student_email` is student's emails e.g. "*****@*****.**" `email_students` determines if student should be notified of action by email. `email_params` parameters used while parsing email templates (a `dict`). `language` is the language used to render the email. returns two EmailEnrollmentState's representing state before and after the action. """ previous_state = EmailEnrollmentState(course_id, student_email) if previous_state.enrollment: CourseEnrollment.unenroll_by_email(student_email, course_id) if email_students: email_params['message'] = 'enrolled_unenroll' email_params['email_address'] = student_email email_params['full_name'] = previous_state.full_name send_mail_to_student(student_email, email_params, language=language) if previous_state.allowed: CourseEnrollmentAllowed.objects.get(course_id=course_id, email=student_email).delete() if email_students: email_params['message'] = 'allowed_unenroll' email_params['email_address'] = student_email # Since no User object exists for this student there is no "full_name" available. send_mail_to_student(student_email, email_params, language=language) after_state = EmailEnrollmentState(course_id, student_email) return previous_state, after_state
def unenroll_email(course_id, student_email): """ Unenroll a student by email. `student_email` is student's emails e.g. "*****@*****.**" returns two EmailEnrollmentState's representing state before and after the action. """ previous_state = EmailEnrollmentState(course_id, student_email) if previous_state.enrollment: CourseEnrollment.unenroll_by_email(student_email, course_id) if previous_state.allowed: CourseEnrollmentAllowed.objects.get(course_id=course_id, email=student_email).delete() after_state = EmailEnrollmentState(course_id, student_email) return previous_state, after_state
def test_enrollment_by_email(self): user = User.objects.create(username="******", email="*****@*****.**") course_id = SlashSeparatedCourseKey("edX", "Test101", "2013") CourseEnrollment.enroll_by_email("*****@*****.**", course_id) self.assertTrue(CourseEnrollment.is_enrolled(user, course_id)) self.assert_enrollment_event_was_emitted(user, course_id) # This won't throw an exception, even though the user is not found self.assertIsNone( CourseEnrollment.enroll_by_email("*****@*****.**", course_id)) self.assert_no_events_were_emitted() self.assertRaises(User.DoesNotExist, CourseEnrollment.enroll_by_email, "*****@*****.**", course_id, ignore_errors=False) self.assert_no_events_were_emitted() # Now unenroll them by email CourseEnrollment.unenroll_by_email("*****@*****.**", course_id) self.assertFalse(CourseEnrollment.is_enrolled(user, course_id)) self.assert_unenrollment_event_was_emitted(user, course_id) # Harmless second unenroll CourseEnrollment.unenroll_by_email("*****@*****.**", course_id) self.assertFalse(CourseEnrollment.is_enrolled(user, course_id)) self.assert_no_events_were_emitted() # Unenroll on non-existent user shouldn't throw an error CourseEnrollment.unenroll_by_email("*****@*****.**", course_id) self.assert_no_events_were_emitted()
def test_enrollment_by_email(self): user = User.objects.create(username="******", email="*****@*****.**") course_id = SlashSeparatedCourseKey("edX", "Test101", "2013") CourseEnrollment.enroll_by_email("*****@*****.**", course_id) self.assertTrue(CourseEnrollment.is_enrolled(user, course_id)) self.assert_enrollment_event_was_emitted(user, course_id) # This won't throw an exception, even though the user is not found self.assertIsNone(CourseEnrollment.enroll_by_email("*****@*****.**", course_id)) self.assert_no_events_were_emitted() self.assertRaises( User.DoesNotExist, CourseEnrollment.enroll_by_email, "*****@*****.**", course_id, ignore_errors=False ) self.assert_no_events_were_emitted() # Now unenroll them by email CourseEnrollment.unenroll_by_email("*****@*****.**", course_id) self.assertFalse(CourseEnrollment.is_enrolled(user, course_id)) self.assert_unenrollment_event_was_emitted(user, course_id) # Harmless second unenroll CourseEnrollment.unenroll_by_email("*****@*****.**", course_id) self.assertFalse(CourseEnrollment.is_enrolled(user, course_id)) self.assert_no_events_were_emitted() # Unenroll on non-existent user shouldn't throw an error CourseEnrollment.unenroll_by_email("*****@*****.**", course_id) self.assert_no_events_were_emitted()