diff --git a/common/djangoapps/enrollment/tests/test_views.py b/common/djangoapps/enrollment/tests/test_views.py index 7409923bd4..b65b61b30d 100644 --- a/common/djangoapps/enrollment/tests/test_views.py +++ b/common/djangoapps/enrollment/tests/test_views.py @@ -92,15 +92,15 @@ class EnrollmentTestMixin(object): if expected_status == status.HTTP_200_OK: data = json.loads(response.content) - self.assertEqual(course_id, data['course_details']['course_id']) + self.assertEqual(course_id, data['enrollment_detail']['course_details']['course_id']) if mode is not None: - self.assertEqual(mode, data['mode']) + self.assertEqual(mode, data['enrollment_detail']['mode']) if is_active is not None: - self.assertEqual(is_active, data['is_active']) + self.assertEqual(is_active, data['enrollment_detail']['is_active']) else: - self.assertTrue(data['is_active']) + self.assertTrue(data['enrollment_detail']['is_active']) if as_server: # Verify that an audit message was logged. @@ -503,7 +503,11 @@ class EnrollmentTest(EnrollmentTestMixin, ModuleStoreTestCase, APITestCase): def test_enrollment_already_enrolled(self): response = self.assert_enrollment_status() repeat_response = self.assert_enrollment_status(expected_status=status.HTTP_200_OK) - self.assertEqual(json.loads(response.content), json.loads(repeat_response.content)) + response_enrollment_detail = json.loads(response.content) + repeat_response_enrollment_detail = json.loads(repeat_response.content) + self.assertEqual( + response_enrollment_detail['enrollment_detail'], repeat_response_enrollment_detail['enrollment_detail'] + ) def test_get_enrollment_with_invalid_key(self): resp = self.client.post( diff --git a/common/djangoapps/enrollment/views.py b/common/djangoapps/enrollment/views.py index ec84e5ee8c..1952b8346d 100644 --- a/common/djangoapps/enrollment/views.py +++ b/common/djangoapps/enrollment/views.py @@ -600,7 +600,7 @@ class EnrollmentListView(APIView, ApiKeyPermissionMixIn): log.warning(msg) return Response(status=status.HTTP_400_BAD_REQUEST, data={"message": msg}) - response = api.update_enrollment( + enrollment_detail = api.update_enrollment( username, unicode(course_id), mode=mode, @@ -609,20 +609,28 @@ class EnrollmentListView(APIView, ApiKeyPermissionMixIn): ) else: # Will reactivate inactive enrollments. - response = api.add_enrollment(username, unicode(course_id), mode=mode, is_active=is_active) + enrollment_detail = api.add_enrollment(username, unicode(course_id), mode=mode, is_active=is_active) email_opt_in = request.data.get('email_opt_in', None) if email_opt_in is not None: org = course_id.org update_email_opt_in(request.user, org, email_opt_in) - return Response(response) + return Response( + status=status.HTTP_200_OK, + data={ + "message": ( + u"The user [{username}] has already been enrolled in course run [{course_id}]." + ).format(username=username, course_id=course_id), + "enrollment_detail": enrollment_detail + } + ) except CourseModeNotFoundError as error: return Response( status=status.HTTP_400_BAD_REQUEST, data={ "message": ( - u"The course mode '{mode}' is not available for course '{course_id}'." + u"The [{mode}] course mode is expired or otherwise unavailable for course run [{course_id}]." ).format(mode=mode, course_id=course_id), "course_details": error.data }) @@ -634,7 +642,15 @@ class EnrollmentListView(APIView, ApiKeyPermissionMixIn): } ) except CourseEnrollmentExistsError as error: - return Response(data=error.enrollment) + return Response( + status=status.HTTP_200_OK, + data={ + "message": ( + u"An enrollment already exists for user [{username}] in course run [{course_id}]." + ).format(username=username, course_id=course_id), + "enrollment_detail": error.enrollment + } + ) except CourseEnrollmentError: return Response( status=status.HTTP_400_BAD_REQUEST,