Skip to content
Snippets Groups Projects
Unverified Commit d8ac4621 authored by Nick's avatar Nick Committed by GitHub
Browse files

Merge pull request #24090 from edx/ndalfonso/AA-117-mfe-dates-tab-waffle-flag

AA-117 mfe date tab waffle flag
parents 01f56ba5 07099777
No related branches found
No related tags found
No related merge requests found
...@@ -9,6 +9,7 @@ from django.urls import reverse ...@@ -9,6 +9,7 @@ from django.urls import reverse
from course_modes.models import CourseMode from course_modes.models import CourseMode
from lms.djangoapps.course_home_api.tests.utils import BaseCourseHomeTests 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 student.models import CourseEnrollment from student.models import CourseEnrollment
...@@ -22,6 +23,8 @@ class DatesTabTestViews(BaseCourseHomeTests): ...@@ -22,6 +23,8 @@ class DatesTabTestViews(BaseCourseHomeTests):
BaseCourseHomeTests.setUpClass() BaseCourseHomeTests.setUpClass()
cls.url = reverse('course-home-dates-tab', args=[cls.course.id]) cls.url = reverse('course-home-dates-tab', args=[cls.course.id])
@COURSE_HOME_MICROFRONTEND.override(active=True)
@COURSE_HOME_MICROFRONTEND_DATES_TAB.override(active=True)
@ddt.data(CourseMode.AUDIT, CourseMode.VERIFIED) @ddt.data(CourseMode.AUDIT, CourseMode.VERIFIED)
def test_get_authenticated_enrolled_user(self, enrollment_mode): def test_get_authenticated_enrolled_user(self, enrollment_mode):
CourseEnrollment.enroll(self.user, self.course.id, enrollment_mode) CourseEnrollment.enroll(self.user, self.course.id, enrollment_mode)
...@@ -38,6 +41,8 @@ class DatesTabTestViews(BaseCourseHomeTests): ...@@ -38,6 +41,8 @@ class DatesTabTestViews(BaseCourseHomeTests):
self.assertTrue(response.data.get('learner_is_verified')) self.assertTrue(response.data.get('learner_is_verified'))
self.assertTrue(all(block.get('learner_has_access') for block in date_blocks)) self.assertTrue(all(block.get('learner_has_access') for block in date_blocks))
@COURSE_HOME_MICROFRONTEND.override(active=True)
@COURSE_HOME_MICROFRONTEND_DATES_TAB.override(active=True)
def test_get_authenticated_user_not_enrolled(self): def test_get_authenticated_user_not_enrolled(self):
response = self.client.get(self.url) response = self.client.get(self.url)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
...@@ -48,6 +53,8 @@ class DatesTabTestViews(BaseCourseHomeTests): ...@@ -48,6 +53,8 @@ class DatesTabTestViews(BaseCourseHomeTests):
response = self.client.get(self.url) response = self.client.get(self.url)
self.assertEqual(response.status_code, 403) self.assertEqual(response.status_code, 403)
@COURSE_HOME_MICROFRONTEND.override(active=True)
@COURSE_HOME_MICROFRONTEND_DATES_TAB.override(active=True)
def test_get_unknown_course(self): def test_get_unknown_course(self):
url = reverse('course-home-dates-tab', args=['course-v1:unknown+course+2T2020']) url = reverse('course-home-dates-tab', args=['course-v1:unknown+course+2T2020'])
response = self.client.get(url) response = self.client.get(url)
......
...@@ -3,6 +3,7 @@ Dates Tab Views ...@@ -3,6 +3,7 @@ Dates Tab Views
""" """
from rest_framework import status
from rest_framework.generics import RetrieveAPIView from rest_framework.generics import RetrieveAPIView
from rest_framework.permissions import IsAuthenticated from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response from rest_framework.response import Response
...@@ -14,6 +15,7 @@ from lms.djangoapps.courseware.context_processor import user_timezone_locale_pre ...@@ -14,6 +15,7 @@ from lms.djangoapps.courseware.context_processor import user_timezone_locale_pre
from lms.djangoapps.courseware.courses import get_course_date_blocks, get_course_with_access from lms.djangoapps.courseware.courses import get_course_date_blocks, get_course_with_access
from lms.djangoapps.courseware.date_summary import TodaysDate, verified_upgrade_deadline_link from lms.djangoapps.courseware.date_summary import TodaysDate, verified_upgrade_deadline_link
from lms.djangoapps.course_home_api.dates.v1.serializers import DatesTabSerializer from lms.djangoapps.course_home_api.dates.v1.serializers import DatesTabSerializer
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.core.djangoapps.enrollments.api import get_enrollment
from openedx.features.course_experience.utils import dates_banner_should_display from openedx.features.course_experience.utils import dates_banner_should_display
...@@ -58,13 +60,16 @@ class DatesTabView(RetrieveAPIView): ...@@ -58,13 +60,16 @@ class DatesTabView(RetrieveAPIView):
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
course_key_string = kwargs.get('course_key_string') course_key_string = kwargs.get('course_key_string')
course_key = CourseKey.from_string(course_key_string)
if not course_home_mfe_dates_tab_is_active(course_key):
return Response(status=status.HTTP_404_NOT_FOUND)
# Enable NR tracing for this view based on course # Enable NR tracing for this view based on course
monitoring_utils.set_custom_metric('course_id', course_key_string) monitoring_utils.set_custom_metric('course_id', course_key_string)
monitoring_utils.set_custom_metric('user_id', request.user.id) monitoring_utils.set_custom_metric('user_id', request.user.id)
monitoring_utils.set_custom_metric('is_staff', request.user.is_staff) monitoring_utils.set_custom_metric('is_staff', request.user.is_staff)
course_key = CourseKey.from_string(course_key_string)
course = get_course_with_access(request.user, 'load', course_key, check_if_enrolled=False) course = get_course_with_access(request.user, 'load', course_key, check_if_enrolled=False)
blocks = get_course_date_blocks(course, request.user, request, include_access=True, include_past_dates=True) 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) display_reset_dates_text, _ = dates_banner_should_display(course_key, request)
......
"""
Toggles for course home experience.
"""
from lms.djangoapps.experiments.flags import ExperimentWaffleFlag
from openedx.core.djangoapps.waffle_utils import CourseWaffleFlag, WaffleFlagNamespace
WAFFLE_FLAG_NAMESPACE = WaffleFlagNamespace(name='course_home')
COURSE_HOME_MICROFRONTEND = ExperimentWaffleFlag(WAFFLE_FLAG_NAMESPACE, 'course_home_mfe')
COURSE_HOME_MICROFRONTEND_DATES_TAB = CourseWaffleFlag(WAFFLE_FLAG_NAMESPACE, 'course_home_mfe_dates_tab')
def course_home_mfe_dates_tab_is_active(course_key):
return (
COURSE_HOME_MICROFRONTEND.is_enabled(course_key) and
COURSE_HOME_MICROFRONTEND_DATES_TAB.is_enabled(course_key)
)
"""Utility functions for course home"""
from django.conf import settings
def get_microfrontend_url(course_key, view_name=None):
"""
Takes in a course key and view name, returns the appropriate course home mfe route
"""
mfe_link = '{}/course/{}'.format(settings.LEARNING_MICROFRONTEND_URL, course_key)
if view_name:
mfe_link += '/{}'.format(view_name)
return mfe_link
...@@ -11,6 +11,8 @@ from django.utils.translation import ugettext_noop ...@@ -11,6 +11,8 @@ from django.utils.translation import ugettext_noop
from lms.djangoapps.courseware.access import has_access from lms.djangoapps.courseware.access import has_access
from lms.djangoapps.courseware.entrance_exams import user_can_skip_entrance_exam from lms.djangoapps.courseware.entrance_exams import user_can_skip_entrance_exam
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.content.course_overviews.models import CourseOverview from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
from openedx.core.lib.course_tabs import CourseTabPluginManager from openedx.core.lib.course_tabs import CourseTabPluginManager
from openedx.features.course_experience import RELATIVE_DATES_FLAG, UNIFIED_COURSE_TAB_FLAG, default_course_url_name from openedx.features.course_experience import RELATIVE_DATES_FLAG, UNIFIED_COURSE_TAB_FLAG, default_course_url_name
...@@ -318,6 +320,16 @@ class DatesTab(CourseTab): ...@@ -318,6 +320,16 @@ class DatesTab(CourseTab):
view_name = "dates" view_name = "dates"
is_dynamic = True is_dynamic = True
def __init__(self, tab_dict):
def link_func(course, reverse_func):
if course_home_mfe_dates_tab_is_active(course.id):
return get_microfrontend_url(course_key=course.id, view_name=self.view_name)
else:
return reverse_func(self.view_name, args=[six.text_type(course.id)])
tab_dict['link_func'] = link_func
super(DatesTab, self).__init__(tab_dict)
@classmethod @classmethod
def is_enabled(cls, course, user=None): def is_enabled(cls, course, user=None):
"""Returns true if this tab is enabled.""" """Returns true if this tab is enabled."""
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment