Use content_type_gating to determine whether a learner has access to content on the dates page
This commit is contained in:
@@ -21,10 +21,10 @@ class DateSummarySerializer(serializers.Serializer):
|
||||
title = serializers.CharField()
|
||||
|
||||
def get_learner_has_access(self, block):
|
||||
learner_is_verified = self.context.get('learner_is_verified', False)
|
||||
learner_is_full_access = self.context.get('learner_is_full_access', False)
|
||||
block_is_verified = (getattr(block, 'contains_gated_content', False) or
|
||||
isinstance(block, VerificationDeadlineDate))
|
||||
return (not block_is_verified) or learner_is_verified
|
||||
return (not block_is_verified) or learner_is_full_access
|
||||
|
||||
def get_link(self, block):
|
||||
if block.link:
|
||||
@@ -39,6 +39,6 @@ class DatesTabSerializer(serializers.Serializer):
|
||||
"""
|
||||
course_date_blocks = DateSummarySerializer(many=True)
|
||||
display_reset_dates_text = serializers.BooleanField()
|
||||
learner_is_verified = serializers.BooleanField()
|
||||
learner_is_full_access = serializers.BooleanField()
|
||||
user_timezone = serializers.CharField()
|
||||
verified_upgrade_link = serializers.URLField()
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Tests for Dates Tab API in the Course Home API
|
||||
"""
|
||||
|
||||
|
||||
from datetime import datetime
|
||||
import ddt
|
||||
|
||||
from django.urls import reverse
|
||||
@@ -10,6 +10,7 @@ from django.urls import reverse
|
||||
from course_modes.models import CourseMode
|
||||
from lms.djangoapps.course_home_api.tests.utils import BaseCourseHomeTests
|
||||
from lms.djangoapps.course_home_api.toggles import COURSE_HOME_MICROFRONTEND, COURSE_HOME_MICROFRONTEND_DATES_TAB
|
||||
from openedx.features.content_type_gating.models import ContentTypeGatingConfig
|
||||
from student.models import CourseEnrollment
|
||||
|
||||
|
||||
@@ -22,6 +23,7 @@ class DatesTabTestViews(BaseCourseHomeTests):
|
||||
def setUpClass(cls):
|
||||
BaseCourseHomeTests.setUpClass()
|
||||
cls.url = reverse('course-home-dates-tab', args=[cls.course.id])
|
||||
ContentTypeGatingConfig.objects.create(enabled=True, enabled_as_of=datetime(2017, 1, 1))
|
||||
|
||||
@COURSE_HOME_MICROFRONTEND.override(active=True)
|
||||
@COURSE_HOME_MICROFRONTEND_DATES_TAB.override(active=True)
|
||||
@@ -33,7 +35,7 @@ class DatesTabTestViews(BaseCourseHomeTests):
|
||||
|
||||
# Pulling out the date blocks to check learner has access.
|
||||
date_blocks = response.data.get('course_date_blocks')
|
||||
self.assertEqual(response.data.get('learner_is_verified'), enrollment_mode == CourseMode.VERIFIED)
|
||||
self.assertEqual(response.data.get('learner_is_full_access'), enrollment_mode == CourseMode.VERIFIED)
|
||||
self.assertTrue(all(block.get('learner_has_access') for block in date_blocks))
|
||||
|
||||
@COURSE_HOME_MICROFRONTEND.override(active=True)
|
||||
@@ -41,7 +43,7 @@ class DatesTabTestViews(BaseCourseHomeTests):
|
||||
def test_get_authenticated_user_not_enrolled(self):
|
||||
response = self.client.get(self.url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertFalse(response.data.get('learner_is_verified'))
|
||||
self.assertFalse(response.data.get('learner_is_full_access'))
|
||||
|
||||
def test_get_unauthenticated_user(self):
|
||||
self.client.logout()
|
||||
|
||||
@@ -18,6 +18,7 @@ from lms.djangoapps.course_home_api.dates.v1.serializers import DatesTabSerializ
|
||||
from lms.djangoapps.course_home_api.toggles import course_home_mfe_dates_tab_is_active
|
||||
from openedx.core.djangoapps.enrollments.api import get_enrollment
|
||||
from openedx.features.course_experience.utils import dates_banner_should_display
|
||||
from openedx.features.content_type_gating.models import ContentTypeGatingConfig
|
||||
|
||||
|
||||
class DatesTabView(RetrieveAPIView):
|
||||
@@ -44,7 +45,7 @@ class DatesTabView(RetrieveAPIView):
|
||||
title: (str) The title of the date event
|
||||
display_reset_dates_text: (bool) Indicates whether the reset dates banner should be shown
|
||||
for the given user
|
||||
learner_is_verified: (bool) Indicates if the user is verified in the course
|
||||
learner_is_full_access: (bool) Indicates if the user is verified in the course
|
||||
user_timezone: (str) The user's preferred timezone
|
||||
verified_upgrade_link: (str) The link for upgrading to the Verified track in a course
|
||||
|
||||
@@ -74,10 +75,10 @@ class DatesTabView(RetrieveAPIView):
|
||||
blocks = get_course_date_blocks(course, request.user, request, include_access=True, include_past_dates=True)
|
||||
display_reset_dates_text = dates_banner_should_display(course_key, request)
|
||||
|
||||
learner_is_verified = False
|
||||
enrollment = get_enrollment(request.user.username, course_key_string)
|
||||
if enrollment:
|
||||
learner_is_verified = enrollment.get('mode') == 'verified'
|
||||
learner_is_full_access = not ContentTypeGatingConfig.enabled_for_enrollment(
|
||||
user=request.user,
|
||||
course_key=course_key,
|
||||
)
|
||||
|
||||
# User locale settings
|
||||
user_timezone_locale = user_timezone_locale_prefs(request)
|
||||
@@ -86,12 +87,12 @@ class DatesTabView(RetrieveAPIView):
|
||||
data = {
|
||||
'course_date_blocks': [block for block in blocks if not isinstance(block, TodaysDate)],
|
||||
'display_reset_dates_text': display_reset_dates_text,
|
||||
'learner_is_verified': learner_is_verified,
|
||||
'learner_is_full_access': learner_is_full_access,
|
||||
'user_timezone': user_timezone,
|
||||
'verified_upgrade_link': verified_upgrade_deadline_link(request.user, course=course),
|
||||
}
|
||||
context = self.get_serializer_context()
|
||||
context['learner_is_verified'] = learner_is_verified
|
||||
context['learner_is_full_access'] = learner_is_full_access
|
||||
serializer = self.get_serializer_class()(data, context=context)
|
||||
|
||||
return Response(serializer.data)
|
||||
|
||||
@@ -3097,6 +3097,7 @@ class DatesTabTestCase(ModuleStoreTestCase):
|
||||
|
||||
self.user = UserFactory()
|
||||
self.client.login(username=self.user.username, password=TEST_PASSWORD)
|
||||
ContentTypeGatingConfig.objects.create(enabled=True, enabled_as_of=datetime(2017, 1, 1))
|
||||
|
||||
def _get_response(self, course):
|
||||
""" Returns the HTML for the progress page """
|
||||
|
||||
@@ -1053,10 +1053,7 @@ def dates(request, course_id):
|
||||
course_date_blocks = get_course_date_blocks(course, request.user, request,
|
||||
include_access=True, include_past_dates=True)
|
||||
|
||||
learner_is_verified = False
|
||||
enrollment = get_enrollment(request.user.username, course_id)
|
||||
if enrollment:
|
||||
learner_is_verified = enrollment.get('mode') == 'verified'
|
||||
learner_is_full_access = not ContentTypeGatingConfig.enabled_for_enrollment(request.user, course_key)
|
||||
|
||||
# User locale settings
|
||||
user_timezone_locale = user_timezone_locale_prefs(request)
|
||||
@@ -1069,7 +1066,7 @@ def dates(request, course_id):
|
||||
'course': course,
|
||||
'course_date_blocks': course_date_blocks,
|
||||
'verified_upgrade_link': verified_upgrade_deadline_link(request.user, course=course),
|
||||
'learner_is_verified': learner_is_verified,
|
||||
'learner_is_full_access': learner_is_full_access,
|
||||
'user_timezone': user_timezone,
|
||||
'user_language': user_language,
|
||||
'supports_preview_menu': True,
|
||||
|
||||
@@ -30,15 +30,15 @@ from openedx.core.djangolib.markup import HTML, Text
|
||||
<% due_next_set = False %>
|
||||
% for block in course_date_blocks:
|
||||
<% block_is_verified = (hasattr(block, 'contains_gated_content') and block.contains_gated_content) or isinstance(block, VerificationDeadlineDate) %>
|
||||
<% learner_has_access = not block_is_verified or learner_is_verified %>
|
||||
<% learner_has_access = not block_is_verified or learner_is_full_access %>
|
||||
<% access_class = '' if learner_has_access else 'no-access' %>
|
||||
<% is_assignment = isinstance(block, CourseAssignmentDate) %>
|
||||
<% todays_date = 'todays-date' if isinstance(block, TodaysDate) else '' %>
|
||||
<% past_date = 'past-date' if block.date and block.date < block.current_time else '' %>
|
||||
<% past_due = 'past-due' if learner_is_verified and is_assignment and block.past_due else '' %>
|
||||
<% due_in_future = True if learner_is_verified and is_assignment and block.date and block.date >= block.current_time else False %>
|
||||
<% not_released = 'not-released' if learner_is_verified and is_assignment and not block.title_html else '' %>
|
||||
% if not (learner_is_verified and isinstance(block, VerifiedUpgradeDeadlineDate)):
|
||||
<% past_due = 'past-due' if learner_is_full_access and is_assignment and block.past_due else '' %>
|
||||
<% due_in_future = True if learner_is_full_access and is_assignment and block.date and block.date >= block.current_time else False %>
|
||||
<% not_released = 'not-released' if learner_is_full_access and is_assignment and not block.title_html else '' %>
|
||||
% if not (learner_is_full_access and isinstance(block, VerifiedUpgradeDeadlineDate)):
|
||||
<div class="timeline-item">
|
||||
<div class="date-circle ${todays_date} ${past_date} ${past_due}"></div>
|
||||
<div class="date-content ${todays_date}">
|
||||
|
||||
Reference in New Issue
Block a user