diff --git a/openedx/features/content_type_gating/tests/test_access.py b/openedx/features/content_type_gating/tests/test_access.py index 6cbf1b3314..60c3d464e1 100644 --- a/openedx/features/content_type_gating/tests/test_access.py +++ b/openedx/features/content_type_gating/tests/test_access.py @@ -20,7 +20,7 @@ from django_comment_common.models import ( ) from django_comment_client.tests.factories import RoleFactory from course_modes.tests.factories import CourseModeFactory -from experiments.models import ExperimentKeyValue +from experiments.models import ExperimentData, ExperimentKeyValue from xmodule.partitions.partitions import ENROLLMENT_TRACK_PARTITION_ID from lms.djangoapps.courseware.module_render import load_single_xblock @@ -39,6 +39,7 @@ from openedx.features.content_type_gating.helpers import CONTENT_GATING_PARTITIO from openedx.features.content_type_gating.partitions import ContentTypeGatingPartition from openedx.features.content_type_gating.models import ContentTypeGatingConfig from openedx.features.course_duration_limits.config import ( + EXPERIMENT_DATA_HOLDBACK_KEY, EXPERIMENT_ID, ) from student.models import CourseEnrollment @@ -532,14 +533,15 @@ class TestProblemTypeAccess(SharedModuleStoreTestCase): """ Test that putting a user in the content gating holdback disables content gating. """ - if put_user_in_holdback: - ExperimentKeyValue.objects.create( - experiment_id=EXPERIMENT_ID, - key="content_type_gating_holdback_percentage", - value="100" - ).value - user = UserFactory.create() + if put_user_in_holdback: + ExperimentData.objects.create( + user=user, + experiment_id=EXPERIMENT_ID, + key=EXPERIMENT_DATA_HOLDBACK_KEY, + value='True' + ) + CourseEnrollment.enroll(user, self.course.id) graded, has_score, weight = True, True, 1 diff --git a/openedx/features/course_duration_limits/config.py b/openedx/features/course_duration_limits/config.py index 90e528258d..91c988e5b9 100644 --- a/openedx/features/course_duration_limits/config.py +++ b/openedx/features/course_duration_limits/config.py @@ -28,36 +28,3 @@ FEATURE_BASED_ENROLLMENT_GLOBAL_KILL_FLAG = WaffleFlag( EXPERIMENT_ID = 11 EXPERIMENT_DATA_HOLDBACK_KEY = 'holdback' - - -@receiver(ENROLL_STATUS_CHANGE) -def set_value_for_content_type_gating_holdback(sender, event=None, user=None, **kwargs): # pylint: disable=unused-argument - if event == EnrollStatusChange.enroll: - user_holdback_data = ExperimentData.objects.filter( - user=user, - experiment_id=EXPERIMENT_ID, - key=EXPERIMENT_DATA_HOLDBACK_KEY, - ) - user_holdback_data_already_set = user_holdback_data.exists() - if not user_holdback_data_already_set: - try: - content_type_gating_holdback_percentage_value = ExperimentKeyValue.objects.get( - experiment_id=EXPERIMENT_ID, - key="content_type_gating_holdback_percentage" - ).value - content_type_gating_holdback_percentage = float(content_type_gating_holdback_percentage_value) / 100 - is_in_holdback = str(random.random() < content_type_gating_holdback_percentage) - - ExperimentData.objects.create( - user=user, - experiment_id=EXPERIMENT_ID, - key=EXPERIMENT_DATA_HOLDBACK_KEY, - value=is_in_holdback - ) - except (ExperimentKeyValue.DoesNotExist, AttributeError): - pass - except IntegrityError: - # There is a race condition when multiple enrollments happen at the same time where the ExperimentData - # row for one enrollment is created between the duplicate check and creation for the other enrollment. - # Since we're ignoring skipping duplicate entries anyway, this is safe to ignore. - pass diff --git a/openedx/features/course_experience/tests/views/test_course_home.py b/openedx/features/course_experience/tests/views/test_course_home.py index 1f9fa34f98..0fb2f77597 100644 --- a/openedx/features/course_experience/tests/views/test_course_home.py +++ b/openedx/features/course_experience/tests/views/test_course_home.py @@ -25,7 +25,7 @@ from django_comment_client.tests.factories import RoleFactory from course_modes.models import CourseMode from course_modes.tests.factories import CourseModeFactory from courseware.tests.helpers import get_expiration_banner_text -from experiments.models import ExperimentKeyValue +from experiments.models import ExperimentData from lms.djangoapps.commerce.models import CommerceConfiguration from lms.djangoapps.commerce.utils import EcommerceService from lms.djangoapps.course_goals.api import add_course_goal, remove_course_goal @@ -41,7 +41,7 @@ from openedx.core.djangoapps.content.course_overviews.models import CourseOvervi from openedx.core.djangoapps.dark_lang.models import DarkLangConfig from openedx.core.djangoapps.schedules.tests.factories import ScheduleFactory from openedx.core.djangoapps.waffle_utils.testutils import WAFFLE_TABLES, override_waffle_flag -from openedx.features.course_duration_limits.config import EXPERIMENT_ID +from openedx.features.course_duration_limits.config import EXPERIMENT_DATA_HOLDBACK_KEY, EXPERIMENT_ID from openedx.features.course_duration_limits.models import CourseDurationLimitConfig from openedx.features.course_experience import ( SHOW_REVIEWS_TOOL_FLAG, @@ -589,18 +589,18 @@ class TestCourseHomePageAccess(CourseHomePageTestCase): for mode in [CourseMode.AUDIT, CourseMode.VERIFIED]: CourseModeFactory.create(course_id=course.id, mode_slug=mode) - ExperimentKeyValue.objects.create( - experiment_id=EXPERIMENT_ID, - key="content_type_gating_holdback_percentage", - value="100" - ) - # assert that an if an expired audit user in the holdback tries to access the course # they are not redirected to the dashboard audit_user = UserFactory(password=self.TEST_PASSWORD) self.client.login(username=audit_user.username, password=self.TEST_PASSWORD) audit_enrollment = CourseEnrollment.enroll(audit_user, course.id, mode=CourseMode.AUDIT) ScheduleFactory(start=THREE_YEARS_AGO, enrollment=audit_enrollment) + ExperimentData.objects.create( + user=audit_user, + experiment_id=EXPERIMENT_ID, + key=EXPERIMENT_DATA_HOLDBACK_KEY, + value='True' + ) response = self.client.get(url)