Commit 05cb2a07 by Renzo Lucioni

Prohibit automatic enrollment in prof ed courses when user authenticates via third-party auth

parent 3775efae
...@@ -116,6 +116,26 @@ class EnrollmentTest(ModuleStoreTestCase): ...@@ -116,6 +116,26 @@ class EnrollmentTest(ModuleStoreTestCase):
change_enrollment_third_party(is_register=True, strategy=strategy, user=self.user) change_enrollment_third_party(is_register=True, strategy=strategy, user=self.user)
self.assertTrue(CourseEnrollment.is_enrolled(self.user, self.course.id)) self.assertTrue(CourseEnrollment.is_enrolled(self.user, self.course.id))
def test_no_prof_ed_third_party_autoenroll(self):
"""
Test that a user authenticating via third party auth while attempting to enroll
in a professional education course is not automatically enrolled in the course.
"""
self.client.logout()
# Create the course mode required for this test case
CourseModeFactory(course_id=self.course.id, mode_slug='professional')
self.client.get(reverse('register_user'), {'course_id': self.course.id})
self.client.login(username=self.USERNAME, password=self.PASSWORD)
self.dummy_request = RequestFactory().request()
self.dummy_request.session = self.client.session
strategy = DjangoStrategy(RequestFactory, request=self.dummy_request)
change_enrollment_third_party(is_register=True, strategy=strategy, user=self.user)
# Verify that the user has not been enrolled in the course
self.assertFalse(CourseEnrollment.is_enrolled(self.user, self.course.id))
def test_unenroll(self): def test_unenroll(self):
# Enroll the student in the course # Enroll the student in the course
CourseEnrollment.enroll(self.user, self.course.id, mode="honor") CourseEnrollment.enroll(self.user, self.course.id, mode="honor")
......
...@@ -69,8 +69,8 @@ from social.apps.django_app.default import models ...@@ -69,8 +69,8 @@ from social.apps.django_app.default import models
from social.exceptions import AuthException from social.exceptions import AuthException
from social.pipeline import partial from social.pipeline import partial
from student.models import CourseEnrollment, CourseEnrollmentException from student.models import CourseMode, CourseEnrollment, CourseEnrollmentException
from opaque_keys.edx.locations import SlashSeparatedCourseKey from opaque_keys.edx.keys import CourseKey
from logging import getLogger from logging import getLogger
...@@ -420,14 +420,15 @@ def change_enrollment(*args, **kwargs): ...@@ -420,14 +420,15 @@ def change_enrollment(*args, **kwargs):
a course, we automatically log them into that course. a course, we automatically log them into that course.
""" """
if kwargs['strategy'].session_get('registration_course_id'): if kwargs['strategy'].session_get('registration_course_id'):
try: course_id = CourseKey.from_string(
CourseEnrollment.enroll( kwargs['strategy'].session_get('registration_course_id')
kwargs['user'], )
SlashSeparatedCourseKey.from_deprecated_string( available_modes = CourseMode.modes_for_course_dict(course_id)
kwargs['strategy'].session_get('registration_course_id')
) if 'honor' in available_modes:
) try:
except CourseEnrollmentException: CourseEnrollment.enroll(kwargs['user'], course_id)
pass except CourseEnrollmentException:
except Exception, e: pass
logger.exception(e) except Exception, e:
logger.exception(e)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment