Skip to content
Snippets Groups Projects
Unverified Commit 5fbc501b authored by David Ormsbee's avatar David Ormsbee Committed by GitHub
Browse files

Merge pull request #21594 from...

Merge pull request #21594 from open-craft/guruprasad/fix-non-activated-users-can-access-enrolled-courses

[BB-1504] Fix the automatic enrollment issue for inactive user
parents 8b2b9b5c ba5c5e09
No related branches found
No related tags found
No related merge requests found
......@@ -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:
# if the student is currently unenrolled, don't enroll them in their
# previous mode
......
......@@ -106,6 +106,7 @@ class TestEnrollmentChangeBase(six.with_metaclass(ABCMeta, CacheIsolationTestCas
self.assertEqual(after, after_ideal)
@ddt.ddt
class TestInstructorEnrollDB(TestEnrollmentChangeBase):
""" Test instructor.enrollment.enroll_email """
def test_enroll(self):
......@@ -222,6 +223,71 @@ class TestInstructorEnrollDB(TestEnrollmentChangeBase):
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...")
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 """
......@@ -756,7 +822,7 @@ class SettableEnrollmentState(EmailEnrollmentState):
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.
......@@ -770,7 +836,7 @@ class SettableEnrollmentState(EmailEnrollmentState):
# 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)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment