Change content_type_gating enabled_for_enrollment to return false if a course has no verified mode or a user is not enrolled in the audit mode
This commit is contained in:
@@ -20,7 +20,11 @@ from lms.djangoapps.courseware.masquerade import (
|
||||
)
|
||||
from openedx.core.djangoapps.config_model_utils.models import StackedConfigurationModel
|
||||
from openedx.core.djangoapps.config_model_utils.utils import is_in_holdback
|
||||
from openedx.features.content_type_gating.helpers import CONTENT_GATING_PARTITION_ID, CONTENT_TYPE_GATE_GROUP_IDS
|
||||
from openedx.features.content_type_gating.helpers import (
|
||||
CONTENT_GATING_PARTITION_ID,
|
||||
CONTENT_TYPE_GATE_GROUP_IDS,
|
||||
correct_modes_for_fbe
|
||||
)
|
||||
from student.models import CourseEnrollment
|
||||
from student.role_helpers import has_staff_roles
|
||||
from xmodule.partitions.partitions import ENROLLMENT_TRACK_PARTITION_ID
|
||||
@@ -136,10 +140,14 @@ class CourseDurationLimitConfig(StackedConfigurationModel):
|
||||
# When masquerading as a specific learner, course duration limits
|
||||
# will be on if they are currently on for the learner.
|
||||
if enrollment is None or not_student_masquerade:
|
||||
return cls.enabled_for_course(course_key=course_key, target_datetime=timezone.now())
|
||||
# we bypass enabled_for_course here and use enabled_as_of_datetime directly
|
||||
# because the correct_modes_for_fbe for FBE check contained in enabled_for_course
|
||||
# is redundant with checks done upstream of this code
|
||||
target_datetime = timezone.now()
|
||||
else:
|
||||
current_config = cls.current(course_key=enrollment.course_id)
|
||||
return current_config.enabled_as_of_datetime(target_datetime=enrollment.created)
|
||||
target_datetime = enrollment.created
|
||||
current_config = cls.current(course_key=course_key)
|
||||
return current_config.enabled_as_of_datetime(target_datetime=target_datetime)
|
||||
|
||||
@classmethod
|
||||
def enabled_for_course(cls, course_key, target_datetime=None):
|
||||
@@ -156,6 +164,8 @@ class CourseDurationLimitConfig(StackedConfigurationModel):
|
||||
course_key: The CourseKey of the course being queried.
|
||||
target_datetime: The datetime to checked enablement as of. Defaults to the current date and time.
|
||||
"""
|
||||
if not correct_modes_for_fbe(course_key):
|
||||
return False
|
||||
|
||||
if target_datetime is None:
|
||||
target_datetime = timezone.now()
|
||||
|
||||
@@ -11,6 +11,7 @@ from mock import Mock
|
||||
import pytz
|
||||
|
||||
from edx_django_utils.cache import RequestCache
|
||||
from course_modes.tests.factories import CourseModeFactory
|
||||
from opaque_keys.edx.locator import CourseLocator
|
||||
from openedx.core.djangoapps.config_model_utils.models import Provenance
|
||||
from openedx.core.djangoapps.site_configuration.tests.factories import SiteConfigurationFactory
|
||||
@@ -31,6 +32,8 @@ class TestCourseDurationLimitConfig(CacheIsolationTestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.course_overview = CourseOverviewFactory.create()
|
||||
CourseModeFactory.create(course_id=self.course_overview.id, mode_slug='audit')
|
||||
CourseModeFactory.create(course_id=self.course_overview.id, mode_slug='verified')
|
||||
self.user = UserFactory.create()
|
||||
super(TestCourseDurationLimitConfig, self).setUp()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user