AA-234: Switch link in dates widget if Course Home MFE is active

This commit is contained in:
Dillon Dumesnil
2020-07-24 07:18:19 -07:00
parent 779fedb077
commit 39b66dcdbb
3 changed files with 34 additions and 12 deletions

View File

@@ -33,6 +33,7 @@ from lms.djangoapps.courseware.models import (
OrgDynamicUpgradeDeadlineConfiguration
)
from lms.djangoapps.commerce.models import CommerceConfiguration
from lms.djangoapps.course_home_api.toggles import COURSE_HOME_MICROFRONTEND, COURSE_HOME_MICROFRONTEND_DATES_TAB
from lms.djangoapps.verify_student.models import VerificationDeadline
from lms.djangoapps.verify_student.tests.factories import SoftwareSecurePhotoVerificationFactory
from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
@@ -60,6 +61,7 @@ class CourseDateSummaryTest(SharedModuleStoreTestCase):
SelfPacedConfiguration.objects.create(enable_course_home_improvements=True)
def make_request(self, user):
""" Creates a request """
request = RequestFactory().request()
request.user = user
self.addCleanup(crum.set_current_request, None)
@@ -658,22 +660,36 @@ class CourseDateSummaryTest(SharedModuleStoreTestCase):
self.assertEqual(block.relative_datestring, expected_date_string)
@ddt.data(
'info',
'openedx.course_experience.course_home',
('info', True),
('info', False),
('openedx.course_experience.course_home', True),
('openedx.course_experience.course_home', False),
)
@ddt.unpack
@override_waffle_flag(UNIFIED_COURSE_TAB_FLAG, active=True)
def test_dates_tab_link_render(self, url_name):
@RELATIVE_DATES_FLAG.override(active=True)
def test_dates_tab_link_render(self, url_name, mfe_active):
""" The dates tab link should only show for enrolled or staff users """
course = create_course_run()
html_elements = [
'class="dates-tab-link"',
'View all course dates</a>',
]
# The url should change based on the mfe being active.
if mfe_active:
html_elements.append('/course/' + str(course.id) + '/dates')
else:
html_elements.append('/courses/' + str(course.id) + '/dates')
url = reverse(url_name, args=(course.id,))
def assert_html_elements(assert_function, user):
self.client.login(username=user.username, password=TEST_PASSWORD)
response = self.client.get(url, follow=True)
if mfe_active:
with COURSE_HOME_MICROFRONTEND.override(active=True), \
COURSE_HOME_MICROFRONTEND_DATES_TAB.override(active=True):
response = self.client.get(url, follow=True)
else:
response = self.client.get(url, follow=True)
for html in html_elements:
assert_function(response, html)
self.client.logout()
@@ -809,6 +825,7 @@ class TestDateAlerts(SharedModuleStoreTestCase):
@ddt.ddt
class TestScheduleOverrides(SharedModuleStoreTestCase):
""" Tests for Schedule Overrides """
def setUp(self):
super(TestScheduleOverrides, self).setUp()
@@ -833,6 +850,7 @@ class TestScheduleOverrides(SharedModuleStoreTestCase):
self._check_text(block)
def _check_text(self, upgrade_date_summary):
""" Validates the text on an upgrade_date_summary """
self.assertEqual(upgrade_date_summary.title, 'Upgrade to Verified Certificate')
self.assertEqual(
upgrade_date_summary.description,

View File

@@ -13,7 +13,7 @@ from django.utils.translation import ugettext as _
% for course_date_block in course_date_blocks:
<%include file="dates-summary.html" args="course_date=course_date_block" />
% endfor
% if user_enrolled:
% if dates_tab_enabled:
<div class="dates-tab-link">
<a href="${dates_tab_link}">View all course dates</a>
</div>

View File

@@ -12,6 +12,9 @@ from web_fragments.fragment import Fragment
from lms.djangoapps.courseware.access import has_access
from lms.djangoapps.courseware.courses import get_course_date_blocks, get_course_with_access
from lms.djangoapps.courseware.tabs import DatesTab
from lms.djangoapps.course_home_api.toggles import course_home_mfe_dates_tab_is_active
from lms.djangoapps.course_home_api.utils import get_microfrontend_url
from openedx.core.djangoapps.plugin_api.views import EdxFragmentView
from student.models import CourseEnrollment
@@ -29,16 +32,17 @@ class CourseDatesFragmentView(EdxFragmentView):
course_key = CourseKey.from_string(course_id)
course = get_course_with_access(request.user, 'load', course_key, check_if_enrolled=False)
course_date_blocks = get_course_date_blocks(course, request.user, request, num_assignments=1)
# We will use this boolean to gate if we show a link to the dates tab. This same logic
# dictates if we show the tab at all.
user_enrolled = (request.user and request.user.is_authenticated and
(bool(CourseEnrollment.is_enrolled(request.user, course.id) or
has_access(request.user, 'staff', course, course.id))))
dates_tab_enabled = DatesTab.is_enabled(course, request.user)
if course_home_mfe_dates_tab_is_active(course_key):
dates_tab_link = get_microfrontend_url(course_key=course.id, view_name='dates')
else:
dates_tab_link = reverse('dates', args=[course.id])
context = {
'course_date_blocks': [block for block in course_date_blocks if block.title != 'current_datetime'],
'dates_tab_link': reverse('dates', args=[course.id]),
'user_enrolled': user_enrolled,
'dates_tab_link': dates_tab_link,
'dates_tab_enabled': dates_tab_enabled,
}
html = render_to_string(self.template_name, context)
dates_fragment = Fragment(html)