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.models import CourseMode
|
||||||
from common.djangoapps.course_modes.tests.factories import CourseModeFactory
|
from common.djangoapps.course_modes.tests.factories import CourseModeFactory
|
||||||
|
from common.djangoapps.entitlements.tests.factories import CourseEntitlementFactory
|
||||||
from common.djangoapps.student.models import (
|
from common.djangoapps.student.models import (
|
||||||
ENROLLED_TO_ENROLLED,
|
ENROLLED_TO_ENROLLED,
|
||||||
CourseEnrollment,
|
CourseEnrollment,
|
||||||
@@ -320,6 +321,39 @@ class SupportViewEnrollmentsTests(SharedModuleStoreTestCase, SupportViewTestCase
|
|||||||
assert ManualEnrollmentAudit.get_manual_enrollment_by_email(self.student.email) is not None
|
assert ManualEnrollmentAudit.get_manual_enrollment_by_email(self.student.email) is not None
|
||||||
self.assert_enrollment(CourseMode.VERIFIED)
|
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(
|
@ddt.data(
|
||||||
({}, r"The field \w+ is required."),
|
({}, r"The field \w+ is required."),
|
||||||
({'course_id': 'bad course key'}, 'Could not parse course key.'),
|
({'course_id': 'bad course key'}, 'Could not parse course key.'),
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ from common.djangoapps.student.models import (
|
|||||||
ManualEnrollmentAudit
|
ManualEnrollmentAudit
|
||||||
)
|
)
|
||||||
from common.djangoapps.util.json_request import JsonResponse
|
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.decorators import require_support_permission
|
||||||
from lms.djangoapps.support.serializers import ManualEnrollmentSerializer
|
from lms.djangoapps.support.serializers import ManualEnrollmentSerializer
|
||||||
from lms.djangoapps.verify_student.models import VerificationDeadline
|
from lms.djangoapps.verify_student.models import VerificationDeadline
|
||||||
@@ -130,6 +131,11 @@ class EnrollmentSupportListView(GenericAPIView):
|
|||||||
CourseEnrollmentAttribute.add_enrollment_attr(
|
CourseEnrollmentAttribute.add_enrollment_attr(
|
||||||
enrollment=enrollment, data_list=[credit_provider_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)
|
return JsonResponse(ManualEnrollmentSerializer(instance=manual_enrollment).data)
|
||||||
except CourseModeNotFoundError as err:
|
except CourseModeNotFoundError as err:
|
||||||
return HttpResponseBadRequest(str(err))
|
return HttpResponseBadRequest(str(err))
|
||||||
|
|||||||
Reference in New Issue
Block a user