Merge pull request #24122 from edx/ndalfonso/AA-133-mfe-dates-banner

AA-133 mfe dates banner
This commit is contained in:
Nick
2020-06-15 15:08:02 -04:00
committed by GitHub
11 changed files with 146 additions and 2 deletions

View File

@@ -35,3 +35,4 @@ class CourseHomeMetadataSerializer(serializers.Serializer):
org = serializers.CharField()
tabs = CourseTabSerializer(many=True)
title = serializers.CharField()
is_self_paced = serializers.BooleanField()

View File

@@ -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

View File

@@ -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
"""

View File

@@ -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')

View 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