Merge pull request #24122 from edx/ndalfonso/AA-133-mfe-dates-banner
AA-133 mfe dates banner
This commit is contained in:
@@ -35,3 +35,4 @@ class CourseHomeMetadataSerializer(serializers.Serializer):
|
||||
org = serializers.CharField()
|
||||
tabs = CourseTabSerializer(many=True)
|
||||
title = serializers.CharField()
|
||||
is_self_paced = serializers.BooleanField()
|
||||
|
||||
@@ -50,7 +50,6 @@ class CourseHomeMetadataView(RetrieveAPIView):
|
||||
course_key_string = kwargs.get('course_key_string')
|
||||
course_key = CourseKey.from_string(course_key_string)
|
||||
course = course_detail(request, request.user.username, course_key)
|
||||
|
||||
data = {
|
||||
'course_id': course.id,
|
||||
'is_staff': has_access(request.user, 'staff', course_key).has_access,
|
||||
@@ -58,6 +57,7 @@ class CourseHomeMetadataView(RetrieveAPIView):
|
||||
'org': course.display_org_with_default,
|
||||
'tabs': get_course_tab_list(request.user, course),
|
||||
'title': course.display_name_with_default,
|
||||
'is_self_paced': getattr(course, 'self_paced', False),
|
||||
}
|
||||
context = self.get_serializer_context()
|
||||
context['course'] = course
|
||||
|
||||
@@ -7,6 +7,7 @@ Dates Tab Serializers. Represents the relevant dates for a Course.
|
||||
from rest_framework import serializers
|
||||
|
||||
from lms.djangoapps.courseware.date_summary import VerificationDeadlineDate
|
||||
from lms.djangoapps.course_home_api.mixins import DatesBannerSerializerMixin
|
||||
|
||||
|
||||
class DateSummarySerializer(serializers.Serializer):
|
||||
@@ -33,7 +34,7 @@ class DateSummarySerializer(serializers.Serializer):
|
||||
return ''
|
||||
|
||||
|
||||
class DatesTabSerializer(serializers.Serializer):
|
||||
class DatesTabSerializer(DatesBannerSerializerMixin, serializers.Serializer):
|
||||
"""
|
||||
Serializer for the Dates Tab
|
||||
"""
|
||||
|
||||
@@ -56,3 +56,13 @@ class DatesTabTestViews(BaseCourseHomeTests):
|
||||
url = reverse('course-home-dates-tab', args=['course-v1:unknown+course+2T2020'])
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 404)
|
||||
|
||||
@COURSE_HOME_MICROFRONTEND.override(active=True)
|
||||
@COURSE_HOME_MICROFRONTEND_DATES_TAB.override(active=True)
|
||||
def test_banner_data_is_returned(self):
|
||||
response = self.client.get(self.url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertContains(response, 'missed_deadlines')
|
||||
self.assertContains(response, 'missed_gated_content')
|
||||
self.assertContains(response, 'content_type_gating_enabled')
|
||||
self.assertContains(response, 'verified_upgrade_link')
|
||||
|
||||
45
lms/djangoapps/course_home_api/mixins.py
Normal file
45
lms/djangoapps/course_home_api/mixins.py
Normal file
@@ -0,0 +1,45 @@
|
||||
# pylint: disable=abstract-method
|
||||
"""
|
||||
Course Home Mixins.
|
||||
"""
|
||||
|
||||
|
||||
from rest_framework import serializers
|
||||
|
||||
from opaque_keys.edx.keys import CourseKey
|
||||
|
||||
from lms.djangoapps.courseware.date_summary import verified_upgrade_deadline_link
|
||||
from openedx.features.content_type_gating.models import ContentTypeGatingConfig
|
||||
from openedx.features.course_experience.utils import dates_banner_should_display
|
||||
|
||||
|
||||
class DatesBannerSerializerMixin(serializers.Serializer):
|
||||
"""
|
||||
Serializer Mixin for displaying the dates banner.
|
||||
Can be added to any serializer who's tab wants to display it.
|
||||
"""
|
||||
dates_banner_info = serializers.SerializerMethodField()
|
||||
|
||||
def get_dates_banner_info(self, _):
|
||||
"""
|
||||
Serializer mixin for returning date banner info. Gets its input from
|
||||
the views course_key_string url parameter and the request's user object.
|
||||
"""
|
||||
info = {
|
||||
'missed_deadlines': False,
|
||||
'content_type_gating_enabled': False,
|
||||
}
|
||||
course_key_string = self.context['view'].kwargs.get('course_key_string')
|
||||
if course_key_string:
|
||||
course_key = CourseKey.from_string(course_key_string)
|
||||
request = self.context['request']
|
||||
missed_deadlines, missed_gated_content = dates_banner_should_display(course_key, request.user)
|
||||
info['missed_deadlines'] = missed_deadlines
|
||||
info['missed_gated_content'] = missed_gated_content
|
||||
info['content_type_gating_enabled'] = ContentTypeGatingConfig.enabled_for_enrollment(
|
||||
user=request.user,
|
||||
course_key=course_key,
|
||||
)
|
||||
if info['content_type_gating_enabled']:
|
||||
info['verified_upgrade_link'] = verified_upgrade_deadline_link(request.user, course_id=course_key)
|
||||
return info
|
||||
Reference in New Issue
Block a user