Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion lms/djangoapps/instructor/enrollment.py
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ def enroll_email(course_id, student_email, auto_enroll=False, email_students=Fal
"""
previous_state = EmailEnrollmentState(course_id, student_email)
enrollment_obj = None
if previous_state.user:
if previous_state.user and User.objects.get(email=student_email).is_active:
Comment thread
bradenmacdonald marked this conversation as resolved.
Outdated
# if the student is currently unenrolled, don't enroll them in their
# previous mode

Expand Down
70 changes: 68 additions & 2 deletions lms/djangoapps/instructor/tests/test_enrollment.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,7 @@ def _run_state_change_test(self, before_ideal, after_ideal, action):
self.assertEqual(after, after_ideal)


@ddt.ddt
class TestInstructorEnrollDB(TestEnrollmentChangeBase):
""" Test instructor.enrollment.enroll_email """
def test_enroll(self):
Expand Down Expand Up @@ -222,6 +223,71 @@ def test_enroll_nouser_change_autoenroll(self):

return self._run_state_change_test(before_ideal, after_ideal, action)

@ddt.data(True, False)
def test_enroll_inactive_user(self, auto_enroll):
before_ideal = SettableEnrollmentState(
user=True,
enrollment=False,
allowed=False,
auto_enroll=False,
)
print("checking initialization...")
Comment thread
lgp171188 marked this conversation as resolved.
Outdated
eobjs = before_ideal.create_user(self.course_key, is_active=False)
before = EmailEnrollmentState(self.course_key, eobjs.email)
self.assertEqual(before, before_ideal)

print('running action...')
enroll_email(self.course_key, eobjs.email, auto_enroll=auto_enroll)

print('checking effects...')

after_ideal = SettableEnrollmentState(
user=True,
enrollment=False,
allowed=True,
auto_enroll=auto_enroll,
)
after = EmailEnrollmentState(self.course_key, eobjs.email)
self.assertEqual(after, after_ideal)

@ddt.data(True, False)
def test_enroll_inactive_user_again(self, auto_enroll):
course_key = CourseLocator('Robot', 'fAKE', 'C--se--ID')
before_ideal = SettableEnrollmentState(
user=True,
enrollment=False,
allowed=True,
auto_enroll=auto_enroll,
)
print("checking initialization...")
user = UserFactory()
user.is_active = False
user.save()
eobjs = EnrollmentObjects(
user.email,
None,
None,
CourseEnrollmentAllowed.objects.create(
email=user.email, course_id=course_key, auto_enroll=auto_enroll
)
)
before = EmailEnrollmentState(course_key, eobjs.email)
self.assertEqual(before, before_ideal)

print('running action...')
enroll_email(self.course_key, eobjs.email, auto_enroll=auto_enroll)

print('checking effects...')

after_ideal = SettableEnrollmentState(
user=True,
enrollment=False,
allowed=True,
auto_enroll=auto_enroll,
)
after = EmailEnrollmentState(self.course_key, eobjs.email)
self.assertEqual(after, after_ideal)


class TestInstructorUnenrollDB(TestEnrollmentChangeBase):
""" Test instructor.enrollment.unenroll_email """
Expand Down Expand Up @@ -756,7 +822,7 @@ def __eq__(self, other):
def __neq__(self, other):
return not self == other

def create_user(self, course_id=None):
def create_user(self, course_id=None, is_active=True):
"""
Utility method to possibly create and possibly enroll a user.
Creates a state matching the SettableEnrollmentState properties.
Expand All @@ -770,7 +836,7 @@ def create_user(self, course_id=None):
# if self.user=False, then this will just be used to generate an email.
email = "robot_no_user_exists_with_this_email@edx.org"
if self.user:
user = UserFactory()
user = UserFactory(is_active=is_active)
email = user.email
if self.enrollment:
cenr = CourseEnrollment.enroll(user, course_id)
Expand Down