diff --git a/lms/djangoapps/learner_home/mock_data.json b/lms/djangoapps/learner_home/mock_data.json index b0cd5986c9..c9ef43c346 100644 --- a/lms/djangoapps/learner_home/mock_data.json +++ b/lms/djangoapps/learner_home/mock_data.json @@ -17,7 +17,7 @@ "accessExpirationDate": "11/11/3030", "canUpgrade": true, "hasStarted": false, - "hasAccess": { + "coursewareAccess": { "hasUnmetPrerequisites": false, "isTooEarly": false, "isStaff": false @@ -106,7 +106,7 @@ "accessExpirationDate": "11/11/3030", "canUpgrade": true, "hasStarted": false, - "hasAccess": { + "coursewareAccess": { "hasUnmetPrerequisites": false, "isTooEarly": false, "isStaff": false @@ -164,7 +164,7 @@ "accessExpirationDate": "11/11/2000", "canUpgrade": true, "hasStarted": false, - "hasAccess": { + "coursewareAccess": { "hasUnmetPrerequisites": false, "isTooEarly": false, "isStaff": false @@ -215,7 +215,7 @@ "accessExpirationDate": "11/11/2000", "canUpgrade": false, "hasStarted": false, - "hasAccess": { + "coursewareAccess": { "hasUnmetPrerequisites": false, "isTooEarly": false, "isStaff": false @@ -290,7 +290,7 @@ "accessExpirationDate": "11/11/2000", "canUpgrade": true, "hasStarted": false, - "hasAccess": { + "coursewareAccess": { "hasUnmetPrerequisites": false, "isTooEarly": false, "isStaff": false @@ -355,7 +355,7 @@ "accessExpirationDate": "11/11/2000", "canUpgrade": true, "hasStarted": false, - "hasAccess": { + "coursewareAccess": { "hasUnmetPrerequisites": false, "isTooEarly": false, "isStaff": false @@ -406,7 +406,7 @@ "accessExpirationDate": "11/11/3030", "canUpgrade": true, "hasStarted": false, - "hasAccess": { + "coursewareAccess": { "hasUnmetPrerequisites": false, "isTooEarly": false, "isStaff": false @@ -485,7 +485,7 @@ "accessExpirationDate": "11/11/2000", "canUpgrade": true, "hasStarted": false, - "hasAccess": { + "coursewareAccess": { "hasUnmetPrerequisites": false, "isTooEarly": true, "isStaff": false @@ -554,7 +554,7 @@ "accessExpirationDate": "11/11/2000", "canUpgrade": false, "hasStarted": false, - "hasAccess": { + "coursewareAccess": { "hasUnmetPrerequisites": false, "isTooEarly": true, "isStaff": false @@ -610,7 +610,7 @@ "accessExpirationDate": "11/11/2000", "canUpgrade": false, "hasStarted": false, - "hasAccess": { + "coursewareAccess": { "hasUnmetPrerequisites": false, "isTooEarly": true, "isStaff": false @@ -694,7 +694,7 @@ "accessExpirationDate": "11/11/2000", "canUpgrade": false, "hasStarted": false, - "hasAccess": { + "coursewareAccess": { "hasUnmetPrerequisites": false, "isTooEarly": true, "isStaff": false @@ -749,7 +749,7 @@ "accessExpirationDate": "11/11/3030", "canUpgrade": null, "hasStarted": false, - "hasAccess": { + "coursewareAccess": { "hasUnmetPrerequisites": false, "isTooEarly": true, "isStaff": false @@ -814,7 +814,7 @@ "accessExpirationDate": "11/11/3030", "canUpgrade": null, "hasStarted": false, - "hasAccess": { + "coursewareAccess": { "hasUnmetPrerequisites": false, "isTooEarly": false, "isStaff": false @@ -889,7 +889,7 @@ "accessExpirationDate": "11/11/3030", "canUpgrade": null, "hasStarted": true, - "hasAccess": { + "coursewareAccess": { "hasUnmetPrerequisites": false, "isTooEarly": false, "isStaff": false @@ -954,7 +954,7 @@ "accessExpirationDate": "11/11/3030", "canUpgrade": null, "hasStarted": true, - "hasAccess": { + "coursewareAccess": { "hasUnmetPrerequisites": false, "isTooEarly": false, "isStaff": false @@ -991,7 +991,7 @@ "accessExpirationDate": "11/11/3030", "canUpgrade": null, "hasStarted": true, - "hasAccess": { + "coursewareAccess": { "hasUnmetPrerequisites": false, "isTooEarly": false, "isStaff": false @@ -1066,7 +1066,7 @@ "accessExpirationDate": "11/11/3030", "canUpgrade": null, "hasStarted": true, - "hasAccess": { + "coursewareAccess": { "hasUnmetPrerequisites": false, "isTooEarly": false, "isStaff": false @@ -1132,7 +1132,7 @@ "accessExpirationDate": "11/11/3030", "canUpgrade": null, "hasStarted": true, - "hasAccess": { + "coursewareAccess": { "hasUnmetPrerequisites": false, "isTooEarly": false, "isStaff": false @@ -1183,7 +1183,7 @@ "accessExpirationDate": "11/11/3030", "canUpgrade": null, "hasStarted": true, - "hasAccess": { + "coursewareAccess": { "hasUnmetPrerequisites": false, "isTooEarly": false, "isStaff": false @@ -1259,7 +1259,7 @@ "accessExpirationDate": "11/11/3030", "canUpgrade": null, "hasStarted": true, - "hasAccess": { + "coursewareAccess": { "hasUnmetPrerequisites": false, "isTooEarly": false, "isStaff": false @@ -1325,7 +1325,7 @@ "accessExpirationDate": "11/11/3030", "canUpgrade": null, "hasStarted": true, - "hasAccess": { + "coursewareAccess": { "hasUnmetPrerequisites": false, "isTooEarly": false, "isStaff": false @@ -1413,7 +1413,7 @@ "accessExpirationDate": "11/11/3030", "canUpgrade": null, "hasStarted": false, - "hasAccess": { + "coursewareAccess": { "hasUnmetPrerequisites": false, "isTooEarly": false, "isStaff": false @@ -1524,7 +1524,7 @@ "accessExpirationDate": "11/11/3030", "canUpgrade": null, "hasStarted": false, - "hasAccess": { + "coursewareAccess": { "hasUnmetPrerequisites": false, "isTooEarly": false, "isStaff": false @@ -1625,7 +1625,7 @@ "accessExpirationDate": "11/11/3030", "canUpgrade": null, "hasStarted": true, - "hasAccess": { + "coursewareAccess": { "hasUnmetPrerequisites": false, "isTooEarly": false, "isStaff": false @@ -1712,7 +1712,7 @@ "accessExpirationDate": "11/11/3030", "canUpgrade": null, "hasStarted": true, - "hasAccess": { + "coursewareAccess": { "hasUnmetPrerequisites": false, "isTooEarly": false, "isStaff": false @@ -1797,7 +1797,7 @@ "accessExpirationDate": "11/11/3030", "canUpgrade": null, "hasStarted": false, - "hasAccess": { + "coursewareAccess": { "hasUnmetPrerequisites": false, "isTooEarly": false, "isStaff": false @@ -1872,7 +1872,7 @@ "accessExpirationDate": "11/11/3030", "canUpgrade": null, "hasStarted": false, - "hasAccess": { + "coursewareAccess": { "hasUnmetPrerequisites": false, "isTooEarly": false, "isStaff": false @@ -1934,7 +1934,7 @@ "accessExpirationDate": "11/11/3030", "canUpgrade": null, "hasStarted": false, - "hasAccess": { + "coursewareAccess": { "hasUnmetPrerequisites": false, "isTooEarly": false, "isStaff": false @@ -2019,7 +2019,7 @@ "accessExpirationDate": "11/11/3030", "canUpgrade": null, "hasStarted": false, - "hasAccess": { + "coursewareAccess": { "hasUnmetPrerequisites": false, "isTooEarly": false, "isStaff": false @@ -2081,7 +2081,7 @@ "accessExpirationDate": null, "canUpgrade": false, "hasStarted": false, - "hasAccess": { + "coursewareAccess": { "hasUnmetPrerequisites": false, "isTooEarly": false, "isStaff": false @@ -2172,7 +2172,7 @@ "accessExpirationDate": null, "canUpgrade": false, "hasStarted": false, - "hasAccess": { + "coursewareAccess": { "hasUnmetPrerequisites": false, "isTooEarly": false, "isStaff": false @@ -2253,7 +2253,7 @@ "accessExpirationDate": null, "canUpgrade": false, "hasStarted": false, - "hasAccess": { + "coursewareAccess": { "hasUnmetPrerequisites": false, "isTooEarly": false, "isStaff": false @@ -2320,7 +2320,7 @@ "accessExpirationDate": null, "canUpgrade": false, "hasStarted": false, - "hasAccess": { + "coursewareAccess": { "hasUnmetPrerequisites": false, "isTooEarly": false, "isStaff": false @@ -2378,6 +2378,292 @@ "numberOfCourses": 3 } ] + }, + { + "cardId": "card-id104", + "enrollment": { + "accessExpirationDate": null, + "canUpgrade": false, + "hasStarted": false, + "coursewareAccess": { + "hasUnmetPrerequisites": true, + "isTooEarly": false, + "isStaff": false + }, + "isAudit": false, + "isAuditAccessExpired": false, + "isEmailEnabled": false, + "hasOptedOutOfEmail": false, + "isEnrolled": false, + "isVerified": false, + "lastEnrolled": null + }, + "grades": null, + "certificates": null, + "courseRun": null, + "entitlement": { + "uuid": "entitlement-course-uuid-14", + "availableSessions": [], + "canViewCourse": false, + "changeDeadline": "11/11/2000", + "enrollmentUrl": "/entitlement-enrollment", + "isEntitlement": true, + "isExpired": true, + "isFulfilled": false, + "isRefundable": true + }, + "provider": { + "name": "edX Course Provider", + "website": "www.edx.com", + "email": "support@edx.com" + }, + "course": { + "courseNumber": "course-number104", + "title": "Course Name 104", + "bannerUrl": "https://edx-cdn.org/v3/prod/logo.svg" + }, + "relatedPrograms": [ + { + "provider": "HarvardX", + "bannerUrl": "https://prod-discovery.edx-cdn.org/media/course/image/327c8e4f-315a-417b-9857-046dfc90c243-677b97464958.small.jpg", + "logoUrl": "https://prod-discovery.edx-cdn.org/organization/certificate_logos/44022f13-20df-4666-9111-cede3e5dc5b6-770e00385e7e.png", + "title": "Relativity in Modern Mechanics", + "programUrl": "www.edx/my-program", + "programType": "MicroBachelors Program", + "numberOfCourses": 3 + }, + { + "provider": "University of Maryland", + "bannerUrl": "https://prod-discovery.edx-cdn.org/media/programs/banner_images/9a310b98-8f27-439e-be85-12d6460245c9-f2efca129273.small.jpg", + "logoUrl": "https://prod-discovery.edx-cdn.org/organization/certificate_logos/b9dc96da-b3fc-45a6-b6b7-b8e12eb79335-ac60112330e3.png", + "title": "Pandering for Modern Professionals", + "programUrl": "www.edx/my-program-2", + "programType": "MicroBachelors Program", + "programTypeUrl": "www.edx/my-program-type", + "numberOfCourses": 3 + } + ] + }, + { + "cardId": "card-id105", + "enrollment": { + "accessExpirationDate": null, + "canUpgrade": false, + "hasStarted": false, + "coursewareAccess": { + "hasUnmetPrerequisites": false, + "isTooEarly": true, + "isStaff": false + }, + "isAudit": false, + "isAuditAccessExpired": false, + "isEmailEnabled": false, + "hasOptedOutOfEmail": false, + "isEnrolled": false, + "isVerified": false, + "lastEnrolled": null + }, + "grades": null, + "certificates": null, + "courseRun": { + "isStarted": false, + "isArchived": false, + "startDate": "11/11/3030", + "endDate": "11/11/4040", + "minPassingGrade": 70, + "homeUrl": "edx.com/courses/my-course-url/home", + "marketingUrl": "edx.com/courses/my-course-url/marketing", + "progressUrl": "edx.com/courses/my-course-url/progress", + "unenrollUrl": "edx.com/courses/my-course-url/unenroll", + "resumeUrl": "edx.com/courses/my-course-url/resume", + "courseId": "course-number15-course-id15", + "lastEnrolled": "2022-09-06T15:20:57.513Z" + }, + "entitlement": { + "uuid": "entitlement-course-uuid-15", + "availableSessions": [], + "canViewCourse": false, + "changeDeadline": "11/11/2000", + "enrollmentUrl": "/entitlement-enrollment", + "isEntitlement": true, + "isExpired": true, + "isFulfilled": false, + "isRefundable": true + }, + "provider": { + "name": "edX Course Provider", + "website": "www.edx.com", + "email": "support@edx.com" + }, + "course": { + "courseNumber": "course-number105", + "title": "Course Name 105", + "bannerUrl": "https://edx-cdn.org/v3/prod/logo.svg" + }, + "relatedPrograms": [ + { + "provider": "HarvardX", + "bannerUrl": "https://prod-discovery.edx-cdn.org/media/course/image/327c8e4f-315a-417b-9857-046dfc90c243-677b97464958.small.jpg", + "logoUrl": "https://prod-discovery.edx-cdn.org/organization/certificate_logos/44022f13-20df-4666-9111-cede3e5dc5b6-770e00385e7e.png", + "title": "Relativity in Modern Mechanics", + "programUrl": "www.edx/my-program", + "programType": "MicroBachelors Program", + "numberOfCourses": 3 + }, + { + "provider": "University of Maryland", + "bannerUrl": "https://prod-discovery.edx-cdn.org/media/programs/banner_images/9a310b98-8f27-439e-be85-12d6460245c9-f2efca129273.small.jpg", + "logoUrl": "https://prod-discovery.edx-cdn.org/organization/certificate_logos/b9dc96da-b3fc-45a6-b6b7-b8e12eb79335-ac60112330e3.png", + "title": "Pandering for Modern Professionals", + "programUrl": "www.edx/my-program-2", + "programType": "MicroBachelors Program", + "programTypeUrl": "www.edx/my-program-type", + "numberOfCourses": 3 + } + ] + }, + { + "cardId": "card-id106", + "enrollment": { + "accessExpirationDate": null, + "canUpgrade": false, + "hasStarted": false, + "coursewareAccess": { + "hasUnmetPrerequisites": false, + "isTooEarly": false, + "isStaff": true + }, + "isAudit": false, + "isAuditAccessExpired": false, + "isEmailEnabled": false, + "hasOptedOutOfEmail": false, + "isEnrolled": false, + "isVerified": false, + "lastEnrolled": null + }, + "grades": null, + "certificates": null, + "courseRun": null, + "entitlement": { + "uuid": "entitlement-course-uuid-16", + "availableSessions": [], + "canViewCourse": false, + "changeDeadline": "11/11/2000", + "enrollmentUrl": "/entitlement-enrollment", + "isEntitlement": true, + "isExpired": true, + "isFulfilled": false, + "isRefundable": true + }, + "provider": { + "name": "edX Course Provider", + "website": "www.edx.com", + "email": "support@edx.com" + }, + "course": { + "courseNumber": "course-number106", + "title": "Course Name 106", + "bannerUrl": "https://edx-cdn.org/v3/prod/logo.svg" + }, + "relatedPrograms": [ + { + "provider": "HarvardX", + "bannerUrl": "https://prod-discovery.edx-cdn.org/media/course/image/327c8e4f-315a-417b-9857-046dfc90c243-677b97464958.small.jpg", + "logoUrl": "https://prod-discovery.edx-cdn.org/organization/certificate_logos/44022f13-20df-4666-9111-cede3e5dc5b6-770e00385e7e.png", + "title": "Relativity in Modern Mechanics", + "programUrl": "www.edx/my-program", + "programType": "MicroBachelors Program", + "numberOfCourses": 3 + }, + { + "provider": "University of Maryland", + "bannerUrl": "https://prod-discovery.edx-cdn.org/media/programs/banner_images/9a310b98-8f27-439e-be85-12d6460245c9-f2efca129273.small.jpg", + "logoUrl": "https://prod-discovery.edx-cdn.org/organization/certificate_logos/b9dc96da-b3fc-45a6-b6b7-b8e12eb79335-ac60112330e3.png", + "title": "Pandering for Modern Professionals", + "programUrl": "www.edx/my-program-2", + "programType": "MicroBachelors Program", + "programTypeUrl": "www.edx/my-program-type", + "numberOfCourses": 3 + } + ] + }, + { + "cardId": "card-id107", + "enrollment": { + "accessExpirationDate": null, + "canUpgrade": false, + "hasStarted": false, + "coursewareAccess": { + "hasUnmetPrerequisites": true, + "isTooEarly": true, + "isStaff": true + }, + "isAudit": false, + "isAuditAccessExpired": false, + "isEmailEnabled": false, + "hasOptedOutOfEmail": false, + "isEnrolled": false, + "isVerified": false, + "lastEnrolled": null + }, + "grades": null, + "certificates": null, + "courseRun": { + "isStarted": false, + "isArchived": false, + "startDate": "11/11/3030", + "endDate": "11/11/4040", + "minPassingGrade": 70, + "homeUrl": "edx.com/courses/my-course-url/home", + "marketingUrl": "edx.com/courses/my-course-url/marketing", + "progressUrl": "edx.com/courses/my-course-url/progress", + "unenrollUrl": "edx.com/courses/my-course-url/unenroll", + "resumeUrl": "edx.com/courses/my-course-url/resume", + "courseId": "course-number15-course-id15", + "lastEnrolled": "2022-09-06T15:20:57.513Z" + }, + "entitlement": { + "uuid": "entitlement-course-uuid-17", + "availableSessions": [], + "canViewCourse": false, + "changeDeadline": "11/11/2000", + "enrollmentUrl": "/entitlement-enrollment", + "isEntitlement": true, + "isExpired": true, + "isFulfilled": false, + "isRefundable": true + }, + "provider": { + "name": "edX Course Provider", + "website": "www.edx.com", + "email": "support@edx.com" + }, + "course": { + "courseNumber": "course-number107", + "title": "Course Name 107", + "bannerUrl": "https://edx-cdn.org/v3/prod/logo.svg" + }, + "relatedPrograms": [ + { + "provider": "HarvardX", + "bannerUrl": "https://prod-discovery.edx-cdn.org/media/course/image/327c8e4f-315a-417b-9857-046dfc90c243-677b97464958.small.jpg", + "logoUrl": "https://prod-discovery.edx-cdn.org/organization/certificate_logos/44022f13-20df-4666-9111-cede3e5dc5b6-770e00385e7e.png", + "title": "Relativity in Modern Mechanics", + "programUrl": "www.edx/my-program", + "programType": "MicroBachelors Program", + "numberOfCourses": 3 + }, + { + "provider": "University of Maryland", + "bannerUrl": "https://prod-discovery.edx-cdn.org/media/programs/banner_images/9a310b98-8f27-439e-be85-12d6460245c9-f2efca129273.small.jpg", + "logoUrl": "https://prod-discovery.edx-cdn.org/organization/certificate_logos/b9dc96da-b3fc-45a6-b6b7-b8e12eb79335-ac60112330e3.png", + "title": "Pandering for Modern Professionals", + "programUrl": "www.edx/my-program-2", + "programType": "MicroBachelors Program", + "programTypeUrl": "www.edx/my-program-type", + "numberOfCourses": 3 + } + ] } ], "emailConfirmation": { diff --git a/lms/djangoapps/learner_home/serializers.py b/lms/djangoapps/learner_home/serializers.py index f9073d9ecc..d17bb2590f 100644 --- a/lms/djangoapps/learner_home/serializers.py +++ b/lms/djangoapps/learner_home/serializers.py @@ -114,7 +114,7 @@ class CourseRunSerializer(serializers.Serializer): return self.context.get("resume_course_urls", {}).get(instance.course_id) -class HasAccessSerializer(serializers.Serializer): +class CoursewareAccessSerializer(serializers.Serializer): """ Info determining whether a user should be able to view course material. Mirrors logic in "show_courseware_links_for" from old dashboard.py @@ -167,7 +167,7 @@ class EnrollmentSerializer(serializers.Serializer): accessExpirationDate = serializers.SerializerMethodField() isAudit = serializers.SerializerMethodField() hasStarted = serializers.SerializerMethodField() - hasAccess = HasAccessSerializer(source="*") + coursewareAccess = CoursewareAccessSerializer(source="*") isVerified = serializers.SerializerMethodField() canUpgrade = serializers.SerializerMethodField() isAuditAccessExpired = serializers.SerializerMethodField() @@ -402,17 +402,21 @@ class UnfulfilledEntitlementSerializer(serializers.Serializer): # This is the static constant data returned as the 'enrollment' key for all unfulfilled enrollments. STATIC_ENTITLEMENT_ENROLLMENT_DATA = { - "accessExpirationDate": None, - "isAudit": False, - "hasStarted": False, - "hasAccess": True, - "isVerified": False, - "canUpgrade": False, - "isAuditAccessExpired": False, - "isEmailEnabled": False, - "hasOptedOutOfEmail": False, - "lastEnrolled": None, - "isEnrolled": False, + 'accessExpirationDate': None, + 'isAudit': False, + 'hasStarted': False, + 'coursewareAccess': { + "hasUnmetPrerequisites": False, + "isTooEarly": False, + "isStaff": False, + }, + 'isVerified': False, + 'canUpgrade': False, + 'isAuditAccessExpired': False, + 'isEmailEnabled': False, + 'hasOptedOutOfEmail': False, + 'lastEnrolled': None, + 'isEnrolled': False, } class _PseudoSessionCourseSerializer(serializers.Serializer): diff --git a/lms/djangoapps/learner_home/test_serializers.py b/lms/djangoapps/learner_home/test_serializers.py index 976a3e549e..d05ddb84de 100644 --- a/lms/djangoapps/learner_home/test_serializers.py +++ b/lms/djangoapps/learner_home/test_serializers.py @@ -35,7 +35,7 @@ from lms.djangoapps.learner_home.serializers import ( EnterpriseDashboardSerializer, EntitlementSerializer, GradeDataSerializer, - HasAccessSerializer, + CoursewareAccessSerializer, LearnerEnrollmentSerializer, PlatformSettingsSerializer, ProgramsSerializer, @@ -195,8 +195,8 @@ class TestCourseRunSerializer(LearnerDashboardBaseTest): @ddt.ddt -class TestHasAccessSerializer(LearnerDashboardBaseTest): - """Tests for the HasAccessSerializer""" +class TestCoursewareAccessSerializer(LearnerDashboardBaseTest): + """Tests for the CoursewareAccessSerializer""" def create_test_context(self, course): return { @@ -230,7 +230,7 @@ class TestHasAccessSerializer(LearnerDashboardBaseTest): ) # When I serialize - output_data = HasAccessSerializer(input_data, context=input_context).data + output_data = CoursewareAccessSerializer(input_data, context=input_context).data # Then "hasUnmetPrerequisites" is outputs correctly self.assertEqual(output_data["hasUnmetPrerequisites"], has_unmet_prerequisites) @@ -253,7 +253,7 @@ class TestHasAccessSerializer(LearnerDashboardBaseTest): ) # When I serialize - output_data = HasAccessSerializer(input_data, context=input_context).data + output_data = CoursewareAccessSerializer(input_data, context=input_context).data # Then "isStaff" serializes properly self.assertEqual(output_data["isStaff"], is_staff) @@ -276,7 +276,7 @@ class TestHasAccessSerializer(LearnerDashboardBaseTest): ) # When I serialize - output_data = HasAccessSerializer(input_data, context=input_context).data + output_data = CoursewareAccessSerializer(input_data, context=input_context).data # Then "isTooEarly" serializes properly self.assertEqual(output_data["isTooEarly"], is_too_early)