From bfe6494e9d71f42513885b83afae2664cc52a4cc Mon Sep 17 00:00:00 2001 From: Nathan Sprenkle Date: Tue, 1 Nov 2022 13:40:02 -0400 Subject: [PATCH] fix: get audit expiration from correct data source (#31238) --- lms/djangoapps/learner_home/serializers.py | 6 +---- .../learner_home/test_serializers.py | 2 +- lms/djangoapps/learner_home/views.py | 23 +++++++++++++++++++ 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/lms/djangoapps/learner_home/serializers.py b/lms/djangoapps/learner_home/serializers.py index 2492ac25d8..ddb761478b 100644 --- a/lms/djangoapps/learner_home/serializers.py +++ b/lms/djangoapps/learner_home/serializers.py @@ -195,11 +195,7 @@ class EnrollmentSerializer(serializers.Serializer): isEnrolled = serializers.BooleanField(source="is_active") def get_accessExpirationDate(self, instance): - return ( - self.context.get("course_mode_info", {}) - .get(instance.course_id) - .get("expiration_datetime") - ) + return self.context.get("audit_access_deadlines", {}).get(instance.course_id) def get_isAudit(self, enrollment): return enrollment.mode in CourseMode.AUDIT_MODES diff --git a/lms/djangoapps/learner_home/test_serializers.py b/lms/djangoapps/learner_home/test_serializers.py index 44a72ebb2b..0afb45f68c 100644 --- a/lms/djangoapps/learner_home/test_serializers.py +++ b/lms/djangoapps/learner_home/test_serializers.py @@ -321,9 +321,9 @@ class TestEnrollmentSerializer(LearnerDashboardBaseTest): def create_test_context(self, course): """Get a test context object""" return { + "audit_access_deadlines": {course.id: random_date()}, "course_mode_info": { course.id: { - "expiration_datetime": random_date(), "show_upsell": True, } }, diff --git a/lms/djangoapps/learner_home/views.py b/lms/djangoapps/learner_home/views.py index 80a6cf4dc4..5322c62250 100644 --- a/lms/djangoapps/learner_home/views.py +++ b/lms/djangoapps/learner_home/views.py @@ -21,6 +21,9 @@ from edx_rest_framework_extensions.auth.session.authentication import ( SessionAuthenticationAllowInactiveUser, ) from opaque_keys.edx.keys import CourseKey +from openedx.features.course_duration_limits.access import ( + get_user_course_expiration_date, +) from rest_framework.exceptions import PermissionDenied, NotFound from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response @@ -389,6 +392,22 @@ def get_course_share_urls(course_enrollments): } +@exec_time_logged +def get_audit_access_deadlines(user, course_enrollments): + """ + Get audit access deadlines for each course enrollment + + Returns: + - Dict {course_id: } + """ + return { + course_enrollment.course_id: get_user_course_expiration_date( + user, course_enrollment.course + ) + for course_enrollment in course_enrollments + } + + class InitializeView(RetrieveAPIView): # pylint: disable=unused-argument """List of courses a user is enrolled in or entitled to""" @@ -457,6 +476,9 @@ class InitializeView(RetrieveAPIView): # pylint: disable=unused-argument user, site_org_whitelist, site_org_blacklist ) + # Get audit access deadlines + audit_access_deadlines = get_audit_access_deadlines(user, course_enrollments) + # Get email opt-outs for student show_email_settings_for, course_optouts = get_email_settings_info( user, course_enrollments @@ -496,6 +518,7 @@ class InitializeView(RetrieveAPIView): # pylint: disable=unused-argument } context = { + "audit_access_deadlines": audit_access_deadlines, "ecommerce_payment_page": ecommerce_payment_page, "cert_statuses": cert_statuses, "course_mode_info": course_mode_info,