From 39b66dcdbb79da10f42bd102e27da4d15e373263 Mon Sep 17 00:00:00 2001 From: Dillon Dumesnil Date: Fri, 24 Jul 2020 07:18:19 -0700 Subject: [PATCH] AA-234: Switch link in dates widget if Course Home MFE is active --- .../courseware/tests/test_date_summary.py | 26 ++++++++++++++++--- .../course-dates-fragment.html | 2 +- .../course_experience/views/course_dates.py | 18 ++++++++----- 3 files changed, 34 insertions(+), 12 deletions(-) diff --git a/lms/djangoapps/courseware/tests/test_date_summary.py b/lms/djangoapps/courseware/tests/test_date_summary.py index 36e821a739..020f809db3 100644 --- a/lms/djangoapps/courseware/tests/test_date_summary.py +++ b/lms/djangoapps/courseware/tests/test_date_summary.py @@ -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', ] + # 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, diff --git a/openedx/features/course_experience/templates/course_experience/course-dates-fragment.html b/openedx/features/course_experience/templates/course_experience/course-dates-fragment.html index 5787fde1e0..3e85751e26 100644 --- a/openedx/features/course_experience/templates/course_experience/course-dates-fragment.html +++ b/openedx/features/course_experience/templates/course_experience/course-dates-fragment.html @@ -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: diff --git a/openedx/features/course_experience/views/course_dates.py b/openedx/features/course_experience/views/course_dates.py index 3fc0ac270c..e1c64fa9b6 100644 --- a/openedx/features/course_experience/views/course_dates.py +++ b/openedx/features/course_experience/views/course_dates.py @@ -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)