From 003a9453ac23add195c4c07f2e4f1d6e82167bba Mon Sep 17 00:00:00 2001 From: Akiva Leffert Date: Fri, 20 Feb 2015 15:02:10 -0500 Subject: [PATCH] Convert enrollment already exists errors to success. JIRA: https://openedx.atlassian.net/browse/MA-290 --- common/djangoapps/enrollment/data.py | 3 ++- common/djangoapps/enrollment/errors.py | 6 +++++- common/djangoapps/enrollment/tests/test_views.py | 5 +++++ common/djangoapps/enrollment/views.py | 6 +++++- 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/common/djangoapps/enrollment/data.py b/common/djangoapps/enrollment/data.py index 3efbb70e46..3315570883 100644 --- a/common/djangoapps/enrollment/data.py +++ b/common/djangoapps/enrollment/data.py @@ -97,7 +97,8 @@ def create_course_enrollment(username, course_id, mode, is_active): except CourseFullError as err: raise CourseEnrollmentFullError(err.message) except AlreadyEnrolledError as err: - raise CourseEnrollmentExistsError(err.message) + enrollment = get_course_enrollment(username, course_id) + raise CourseEnrollmentExistsError(err.message, enrollment) def update_course_enrollment(username, course_id, mode=None, is_active=None): diff --git a/common/djangoapps/enrollment/errors.py b/common/djangoapps/enrollment/errors.py index 9ea5c41542..c35e02d280 100644 --- a/common/djangoapps/enrollment/errors.py +++ b/common/djangoapps/enrollment/errors.py @@ -30,7 +30,11 @@ class CourseEnrollmentFullError(CourseEnrollmentError): class CourseEnrollmentExistsError(CourseEnrollmentError): - pass + enrollment = None + + def __init__(self, message, enrollment): + super(CourseEnrollmentExistsError, self).__init__(message) + self.enrollment = enrollment class CourseModeNotFoundError(CourseEnrollmentError): diff --git a/common/djangoapps/enrollment/tests/test_views.py b/common/djangoapps/enrollment/tests/test_views.py index f353dd8ff0..a21c8940ef 100644 --- a/common/djangoapps/enrollment/tests/test_views.py +++ b/common/djangoapps/enrollment/tests/test_views.py @@ -255,6 +255,11 @@ class EnrollmentTest(ModuleStoreTestCase, APITestCase): self.assertTrue(data['is_active']) return resp + def test_enrollment_already_enrolled(self): + response = self._create_enrollment() + repeat_response = self._create_enrollment() + self.assertEqual(json.loads(response.content), json.loads(repeat_response.content)) + def test_get_enrollment_with_invalid_key(self): resp = self.client.post( reverse('courseenrollments'), diff --git a/common/djangoapps/enrollment/views.py b/common/djangoapps/enrollment/views.py index a1f655c5b8..e48e9dac10 100644 --- a/common/djangoapps/enrollment/views.py +++ b/common/djangoapps/enrollment/views.py @@ -17,7 +17,9 @@ from rest_framework.views import APIView from opaque_keys.edx.keys import CourseKey from opaque_keys import InvalidKeyError from enrollment import api -from enrollment.errors import CourseNotFoundError, CourseEnrollmentError, CourseModeNotFoundError +from enrollment.errors import ( + CourseNotFoundError, CourseEnrollmentError, CourseModeNotFoundError, CourseEnrollmentExistsError +) from embargo import api as embargo_api from util.authentication import SessionAuthenticationAllowInactiveUser from util.disable_rate_limit import can_disable_rate_limit @@ -339,6 +341,8 @@ class EnrollmentListView(APIView): "message": u"No course '{course_id}' found for enrollment".format(course_id=course_id) } ) + except CourseEnrollmentExistsError as error: + return Response(data=error.enrollment) except CourseEnrollmentError: return Response( status=status.HTTP_400_BAD_REQUEST,