- % if enrollment_mode and relative_dates_flag_is_enabled and self_paced and not is_course_staff: + % if relative_dates_flag_is_enabled and self_paced and not is_course_staff: <%include file="/dates_banner.html" /> % endif
diff --git a/openedx/features/course_experience/tests/views/test_course_outline.py b/openedx/features/course_experience/tests/views/test_course_outline.py index 709bd8ef56..de86b37cbb 100644 --- a/openedx/features/course_experience/tests/views/test_course_outline.py +++ b/openedx/features/course_experience/tests/views/test_course_outline.py @@ -25,6 +25,7 @@ from waffle.models import Switch from waffle.testutils import override_switch from course_modes.models import CourseMode +from course_modes.tests.factories import CourseModeFactory from lms.djangoapps.courseware.tests.factories import StaffFactory from lms.urls import RESET_COURSE_DEADLINES_NAME from gating import api as lms_gating_api @@ -33,6 +34,7 @@ from openedx.core.djangoapps.schedules.models import Schedule from openedx.core.djangoapps.schedules.tests.factories import ScheduleFactory from openedx.core.lib.gating import api as gating_api from openedx.features.course_experience import RELATIVE_DATES_FLAG +from openedx.features.content_type_gating.models import ContentTypeGatingConfig from openedx.features.course_experience.views.course_outline import ( DEFAULT_COMPLETION_TRACKING_START, CourseOutlineFragmentView @@ -170,20 +172,29 @@ class TestCourseOutlinePage(SharedModuleStoreTestCase): @RELATIVE_DATES_FLAG.override(active=True) @ddt.data( - (CourseMode.AUDIT, False, True), - (CourseMode.VERIFIED, False, True), - (CourseMode.MASTERS, False, False), - (CourseMode.VERIFIED, True, False), + ([CourseMode.AUDIT, CourseMode.VERIFIED], CourseMode.AUDIT, False, True), + ([CourseMode.AUDIT, CourseMode.VERIFIED], CourseMode.VERIFIED, False, True), + ([CourseMode.AUDIT, CourseMode.VERIFIED, CourseMode.MASTERS], CourseMode.MASTERS, False, True), + ([CourseMode.PROFESSIONAL], CourseMode.PROFESSIONAL, False, True), + ([CourseMode.AUDIT, CourseMode.VERIFIED], CourseMode.VERIFIED, True, False), ) @ddt.unpack def test_reset_course_deadlines_banner_shows_for_self_paced_course( self, + course_modes, enrollment_mode, is_course_staff, should_display ): + ContentTypeGatingConfig.objects.create( + enabled=True, + enabled_as_of=datetime.datetime(2018, 1, 1), + ) course = self.courses[0] - enrollment = CourseEnrollment.objects.get(course_id=course.id) + for mode in course_modes: + CourseModeFactory.create(course_id=course.id, mode_slug=mode) + + enrollment = CourseEnrollment.objects.get(course_id=course.id, user=self.user) enrollment.mode = enrollment_mode enrollment.save() self.user.is_staff = is_course_staff diff --git a/openedx/features/course_experience/views/course_outline.py b/openedx/features/course_experience/views/course_outline.py index 8005a74f25..750b40e832 100644 --- a/openedx/features/course_experience/views/course_outline.py +++ b/openedx/features/course_experience/views/course_outline.py @@ -31,6 +31,7 @@ from openedx.core.djangoapps.content.course_overviews.models import CourseOvervi from openedx.core.djangoapps.plugin_api.views import EdxFragmentView from openedx.core.djangoapps.schedules.utils import reset_self_paced_schedule from openedx.features.course_experience import RELATIVE_DATES_FLAG +from openedx.features.content_type_gating.models import ContentTypeGatingConfig from student.models import CourseEnrollment from util.milestones_helpers import get_course_content_milestones from xmodule.course_module import COURSE_VISIBILITY_PUBLIC @@ -96,17 +97,18 @@ class CourseOutlineFragmentView(EdxFragmentView): reset_deadlines_url = reverse(RESET_COURSE_DEADLINES_NAME) reset_deadlines_redirect_url_base = COURSE_HOME_VIEW_NAME - course_enrollment = None - if not request.user.is_anonymous: - course_enrollment = CourseEnrollment.objects.filter(course=course_overview, user=request.user).filter( - Q(mode=CourseMode.AUDIT) | Q(mode=CourseMode.VERIFIED)).first() - context['reset_deadlines_url'] = reset_deadlines_url context['reset_deadlines_redirect_url_base'] = reset_deadlines_redirect_url_base context['reset_deadlines_redirect_url_id_dict'] = {'course_id': str(course.id)} - context['enrollment_mode'] = getattr(course_enrollment, 'mode', None) - context['verified_upgrade_link'] = verified_upgrade_deadline_link(request.user, course=course), - context['on_course_outline_page'] = True, + context['verified_upgrade_link'] = verified_upgrade_deadline_link(request.user, course=course) + context['on_course_outline_page'] = True + context['content_type_gating_enabled'] = ContentTypeGatingConfig.enabled_for_enrollment( + user=request.user, + course_key=course_key + ) + # We use javascript to check whether to actually display this banner, so we let the banner assume + # that deadlines have been missed. + context['missed_deadlines'] = True html = render_to_string('course_experience/course-outline-fragment.html', context) return Fragment(html)