Merge pull request #26918 from edx/aakbar/PROD-1136
[Support Tool] Update the Enrollments to take Entitlements into account
This commit is contained in:
@@ -21,6 +21,7 @@ from social_django.models import UserSocialAuth
|
||||
|
||||
from common.djangoapps.course_modes.models import CourseMode
|
||||
from common.djangoapps.course_modes.tests.factories import CourseModeFactory
|
||||
from common.djangoapps.entitlements.tests.factories import CourseEntitlementFactory
|
||||
from common.djangoapps.student.models import (
|
||||
ENROLLED_TO_ENROLLED,
|
||||
CourseEnrollment,
|
||||
@@ -320,6 +321,39 @@ class SupportViewEnrollmentsTests(SharedModuleStoreTestCase, SupportViewTestCase
|
||||
assert ManualEnrollmentAudit.get_manual_enrollment_by_email(self.student.email) is not None
|
||||
self.assert_enrollment(CourseMode.VERIFIED)
|
||||
|
||||
@disable_signal(signals, 'post_save')
|
||||
@ddt.data('username', 'email')
|
||||
@patch("common.djangoapps.entitlements.models.get_course_uuid_for_course")
|
||||
def test_change_enrollment_mode_fullfills_entitlement(self, search_string_type, mock_get_course_uuid):
|
||||
"""
|
||||
Assert that changing student's enrollment fulfills it's respective entitlement if it exists.
|
||||
"""
|
||||
assert ManualEnrollmentAudit.get_manual_enrollment_by_email(self.student.email) is None
|
||||
enrollment = CourseEnrollment.get_enrollment(self.student, self.course.id)
|
||||
entitlement = CourseEntitlementFactory.create(
|
||||
user=self.user,
|
||||
mode=CourseMode.VERIFIED,
|
||||
enrollment_course_run=enrollment
|
||||
)
|
||||
mock_get_course_uuid.return_value = entitlement.course_uuid
|
||||
|
||||
url = reverse(
|
||||
'support:enrollment_list',
|
||||
kwargs={'username_or_email': getattr(self.student, search_string_type)}
|
||||
)
|
||||
response = self.client.post(url, data={
|
||||
'course_id': str(self.course.id),
|
||||
'old_mode': CourseMode.AUDIT,
|
||||
'new_mode': CourseMode.VERIFIED,
|
||||
'reason': 'Financial Assistance'
|
||||
})
|
||||
entitlement.refresh_from_db()
|
||||
assert response.status_code == 200
|
||||
assert ManualEnrollmentAudit.get_manual_enrollment_by_email(self.student.email) is not None
|
||||
assert entitlement.enrollment_course_run is not None
|
||||
assert entitlement.is_entitlement_redeemable() is False
|
||||
self.assert_enrollment(CourseMode.VERIFIED)
|
||||
|
||||
@ddt.data(
|
||||
({}, r"The field \w+ is required."),
|
||||
({'course_id': 'bad course key'}, 'Could not parse course key.'),
|
||||
|
||||
@@ -22,6 +22,7 @@ from common.djangoapps.student.models import (
|
||||
ManualEnrollmentAudit
|
||||
)
|
||||
from common.djangoapps.util.json_request import JsonResponse
|
||||
from common.djangoapps.entitlements.models import CourseEntitlement
|
||||
from lms.djangoapps.support.decorators import require_support_permission
|
||||
from lms.djangoapps.support.serializers import ManualEnrollmentSerializer
|
||||
from lms.djangoapps.verify_student.models import VerificationDeadline
|
||||
@@ -130,6 +131,11 @@ class EnrollmentSupportListView(GenericAPIView):
|
||||
CourseEnrollmentAttribute.add_enrollment_attr(
|
||||
enrollment=enrollment, data_list=[credit_provider_attr]
|
||||
)
|
||||
entitlement = CourseEntitlement.get_fulfillable_entitlement_for_user_course_run(
|
||||
user=user, course_run_key=course_id
|
||||
)
|
||||
if entitlement is not None and entitlement.mode == new_mode:
|
||||
entitlement.set_enrollment(CourseEnrollment.get_enrollment(user, course_id))
|
||||
return JsonResponse(ManualEnrollmentSerializer(instance=manual_enrollment).data)
|
||||
except CourseModeNotFoundError as err:
|
||||
return HttpResponseBadRequest(str(err))
|
||||
|
||||
Reference in New Issue
Block a user