From 0fd91f07398717d5bb252d4284709ae6eec71a6e Mon Sep 17 00:00:00 2001
From: Anthony Mangano <amangano@edx.org>
Date: Wed, 21 Dec 2016 15:37:34 -0500
Subject: [PATCH] add course_name to enrollment api reponse

ECOM-5936
---
 common/djangoapps/enrollment/api.py              | 16 +++++++++++-----
 common/djangoapps/enrollment/serializers.py      |  1 +
 common/djangoapps/enrollment/tests/test_data.py  |  1 +
 common/djangoapps/enrollment/tests/test_views.py | 13 ++++++++++---
 common/djangoapps/enrollment/views.py            |  4 ++++
 .../source/enrollment/enrollment.rst             |  4 ++++
 6 files changed, 31 insertions(+), 8 deletions(-)

diff --git a/common/djangoapps/enrollment/api.py b/common/djangoapps/enrollment/api.py
index 46ea7562e81..d97e31111f9 100644
--- a/common/djangoapps/enrollment/api.py
+++ b/common/djangoapps/enrollment/api.py
@@ -37,8 +37,9 @@ def get_enrollments(user_id):
                 "mode": "honor",
                 "is_active": True,
                 "user": "Bob",
-                "course": {
+                "course_details": {
                     "course_id": "edX/DemoX/2014T2",
+                    "course_name": "edX Demonstration Course",
                     "enrollment_end": "2014-12-20T20:18:00Z",
                     "enrollment_start": "2014-10-15T20:18:00Z",
                     "course_start": "2015-02-03T00:00:00Z",
@@ -64,8 +65,9 @@ def get_enrollments(user_id):
                 "mode": "verified",
                 "is_active": True,
                 "user": "Bob",
-                "course": {
+                "course_details": {
                     "course_id": "edX/edX-Insider/2014T2",
+                    "course_name": "edX Insider Course",
                     "enrollment_end": "2014-12-20T20:18:00Z",
                     "enrollment_start": "2014-10-15T20:18:00Z",
                     "course_start": "2015-02-03T00:00:00Z",
@@ -111,8 +113,9 @@ def get_enrollment(user_id, course_id):
             "mode": "honor",
             "is_active": True,
             "user": "Bob",
-            "course": {
+            "course_details": {
                 "course_id": "edX/DemoX/2014T2",
+                "course_name": "edX Demonstration Course",
                 "enrollment_end": "2014-12-20T20:18:00Z",
                 "enrollment_start": "2014-10-15T20:18:00Z",
                 "course_start": "2015-02-03T00:00:00Z",
@@ -163,8 +166,9 @@ def add_enrollment(user_id, course_id, mode=None, is_active=True):
             "mode": "audit",
             "is_active": True,
             "user": "Bob",
-            "course": {
+            "course_details": {
                 "course_id": "edX/DemoX/2014T2",
+                "course_name": "edX Demonstration Course",
                 "enrollment_end": "2014-12-20T20:18:00Z",
                 "enrollment_start": "2014-10-15T20:18:00Z",
                 "course_start": "2015-02-03T00:00:00Z",
@@ -217,8 +221,9 @@ def update_enrollment(user_id, course_id, mode=None, is_active=None, enrollment_
             "mode": "honor",
             "is_active": True,
             "user": "Bob",
-            "course": {
+            "course_details": {
                 "course_id": "edX/DemoX/2014T2",
+                "course_name": "edX Demonstration Course",
                 "enrollment_end": "2014-12-20T20:18:00Z",
                 "enrollment_start": "2014-10-15T20:18:00Z",
                 "course_start": "2015-02-03T00:00:00Z",
@@ -282,6 +287,7 @@ def get_course_enrollment_details(course_id, include_expired=False):
         >>> get_course_enrollment_details("edX/DemoX/2014T2")
         {
             "course_id": "edX/DemoX/2014T2",
+            "course_name": "edX Demonstration Course",
             "enrollment_end": "2014-12-20T20:18:00Z",
             "enrollment_start": "2014-10-15T20:18:00Z",
             "course_start": "2015-02-03T00:00:00Z",
diff --git a/common/djangoapps/enrollment/serializers.py b/common/djangoapps/enrollment/serializers.py
index 1e894f210d8..8f4d5357c92 100644
--- a/common/djangoapps/enrollment/serializers.py
+++ b/common/djangoapps/enrollment/serializers.py
@@ -36,6 +36,7 @@ class CourseSerializer(serializers.Serializer):  # pylint: disable=abstract-meth
     """
 
     course_id = serializers.CharField(source="id")
+    course_name = serializers.CharField(source="display_name_with_default")
     enrollment_start = serializers.DateTimeField(format=None)
     enrollment_end = serializers.DateTimeField(format=None)
     course_start = serializers.DateTimeField(source="start", format=None)
diff --git a/common/djangoapps/enrollment/tests/test_data.py b/common/djangoapps/enrollment/tests/test_data.py
index a8143488f46..36185cbb6d9 100644
--- a/common/djangoapps/enrollment/tests/test_data.py
+++ b/common/djangoapps/enrollment/tests/test_data.py
@@ -71,6 +71,7 @@ class EnrollmentDataTest(ModuleStoreTestCase):
         # Confirm the returned enrollment and the data match up.
         self.assertEqual(course_mode, enrollment['mode'])
         self.assertEqual(is_active, enrollment['is_active'])
+        self.assertEqual(self.course.display_name_with_default, enrollment['course_details']['course_name'])
 
     def test_unenroll(self):
         # Enroll the user in the course
diff --git a/common/djangoapps/enrollment/tests/test_views.py b/common/djangoapps/enrollment/tests/test_views.py
index 8639480c1ab..88bc30c398a 100644
--- a/common/djangoapps/enrollment/tests/test_views.py
+++ b/common/djangoapps/enrollment/tests/test_views.py
@@ -191,8 +191,13 @@ class EnrollmentTest(EnrollmentTestMixin, ModuleStoreTestCase, APITestCase):
             )
 
         # Create an enrollment
-        self.assert_enrollment_status()
+        resp = self.assert_enrollment_status()
+
+        # Verify that the response contains the correct course_name
+        data = json.loads(resp.content)
+        self.assertEqual(self.course.display_name_with_default, data['course_details']['course_name'])
 
+        # Verify that the enrollment was created correctly
         self.assertTrue(CourseEnrollment.is_enrolled(self.user, self.course.id))
         course_mode, is_active = CourseEnrollment.enrollment_mode_for_user(self.user, self.course.id)
         self.assertTrue(is_active)
@@ -212,6 +217,7 @@ class EnrollmentTest(EnrollmentTestMixin, ModuleStoreTestCase, APITestCase):
         self.assertEqual(resp.status_code, status.HTTP_200_OK)
         data = json.loads(resp.content)
         self.assertEqual(unicode(self.course.id), data['course_details']['course_id'])
+        self.assertEqual(self.course.display_name_with_default, data['course_details']['course_name'])
         self.assertEqual(CourseMode.DEFAULT_MODE_SLUG, data['mode'])
         self.assertTrue(data['is_active'])
 
@@ -329,8 +335,8 @@ class EnrollmentTest(EnrollmentTestMixin, ModuleStoreTestCase, APITestCase):
         self.assertEqual(response.status_code, status.HTTP_200_OK)
         data = json.loads(response.content)
         self.assertItemsEqual(
-            [enrollment['course_details']['course_id'] for enrollment in data],
-            [unicode(course.id) for course in courses]
+            [(datum['course_details']['course_id'], datum['course_details']['course_name']) for datum in data],
+            [(unicode(course.id), course.display_name_with_default) for course in courses]
         )
 
     def test_enrollment_list_permissions(self):
@@ -411,6 +417,7 @@ class EnrollmentTest(EnrollmentTestMixin, ModuleStoreTestCase, APITestCase):
 
         data = json.loads(resp.content)
         self.assertEqual(unicode(self.course.id), data['course_id'])
+        self.assertEqual(self.course.display_name_with_default, data['course_name'])
         mode = data['course_modes'][0]
         self.assertEqual(mode['slug'], CourseMode.HONOR)
         self.assertEqual(mode['sku'], '123')
diff --git a/common/djangoapps/enrollment/views.py b/common/djangoapps/enrollment/views.py
index 776a5b8bbe4..9f61346e4da 100644
--- a/common/djangoapps/enrollment/views.py
+++ b/common/djangoapps/enrollment/views.py
@@ -99,6 +99,7 @@ class EnrollmentView(APIView, ApiKeyPermissionMixIn):
                 * course_end: The date and time when the course closes. If
                   null, the course never ends.
                 * course_id: The unique identifier for the course.
+                * course_name: The name of the course.
                 * course_modes: An array of data about the enrollment modes
                   supported for the course. If the request uses the parameter
                   include_expired=1, the array also includes expired
@@ -216,6 +217,7 @@ class EnrollmentCourseDetailView(APIView):
                 * course_end: The date and time when the course closes. If
                   null, the course never ends.
                 * course_id: The unique identifier for the course.
+                * course_name: The name of the course.
                 * course_modes: An array of data about the enrollment modes
                   supported for the course. If the request uses the parameter
                   include_expired=1, the array also includes expired
@@ -400,6 +402,8 @@ class EnrollmentListView(APIView, ApiKeyPermissionMixIn):
 
                 * course_id: The unique identifier for the course.
 
+                * course_name: The name of the course.
+
                 * course_modes: An array of data about the enrollment modes
                   supported for the course. If the request uses the parameter
                   include_expired=1, the array also includes expired
diff --git a/docs/en_us/platform_api/source/enrollment/enrollment.rst b/docs/en_us/platform_api/source/enrollment/enrollment.rst
index 271f1979cde..f4dc8bfba30 100644
--- a/docs/en_us/platform_api/source/enrollment/enrollment.rst
+++ b/docs/en_us/platform_api/source/enrollment/enrollment.rst
@@ -33,6 +33,7 @@ Get the User's Enrollment Status in a Course
         "is_active": true,
         "course_details": {
             "course_id": "edX/DemoX/Demo_Course",
+            "course_name": "edX Demonstration Course",
             "enrollment_end": null,
             "course_modes": [
                 {
@@ -70,6 +71,7 @@ Get the User's Enrollment Information for a Course
 
     {
         "course_id": "edX/DemoX/Demo_Course",
+        "course_name": "edX Demonstration Course",
         "enrollment_end": null,
         "course_modes": [
             {
@@ -112,6 +114,7 @@ View a User's Enrollments or Enroll a User in a Course
             "is_active": true,
             "course_details": {
                 "course_id": "edX/DemoX/Demo_Course",
+                "course_name": "edX Demonstration Course",
                 "enrollment_end": null,
                 "course_modes": [
                     {
@@ -135,6 +138,7 @@ View a User's Enrollments or Enroll a User in a Course
             "is_active": true,
             "course_details": {
                 "course_id": "ArbisoftX/BulkyEmail101/2014-15",
+                "course_name": "Course Name Here",
                 "enrollment_end": null,
                 "course_modes": [
                     {
-- 
GitLab