Deprecate ExperimentWaffleFlag.override method

This is part of a removal of the many override methods of toggle
flag/namespace classes. This allows us to remove imports of test modules
from production code.
This commit is contained in:
Régis Behmo
2020-10-23 11:19:41 +02:00
parent 64a162f69c
commit 16ce16e85e
12 changed files with 117 additions and 99 deletions

View File

@@ -10,12 +10,14 @@ import waffle
from django.contrib.messages.middleware import MessageMiddleware
from django.test import RequestFactory
from django.urls import reverse
from freezegun import freeze_time
from mock import patch
from pytz import utc
from course_modes.models import CourseMode
from course_modes.tests.factories import CourseModeFactory
from freezegun import freeze_time
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.courseware.courses import get_course_date_blocks
from lms.djangoapps.courseware.date_summary import (
CertificateAvailableDate,
@@ -32,8 +34,7 @@ from lms.djangoapps.courseware.models import (
DynamicUpgradeDeadlineConfiguration,
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.experiments.testutils import override_experiment_waffle_flag
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
@@ -44,7 +45,10 @@ from openedx.core.djangoapps.user_api.preferences.api import set_user_preference
from openedx.core.djangoapps.waffle_utils.testutils import override_waffle_flag
from openedx.features.course_duration_limits.models import CourseDurationLimitConfig
from openedx.features.course_experience import (
RELATIVE_DATES_FLAG, DISABLE_UNIFIED_COURSE_TAB_FLAG, UPGRADE_DEADLINE_MESSAGE, CourseHomeMessages
DISABLE_UNIFIED_COURSE_TAB_FLAG,
RELATIVE_DATES_FLAG,
UPGRADE_DEADLINE_MESSAGE,
CourseHomeMessages
)
from student.tests.factories import TEST_PASSWORD, CourseEnrollmentFactory, UserFactory
from xmodule.modulestore import ModuleStoreEnum
@@ -145,7 +149,7 @@ class CourseDateSummaryTest(SharedModuleStoreTestCase):
CourseEnrollmentFactory(course_id=course.id, user=user, mode=CourseMode.VERIFIED)
self.assert_block_types(course, user, expected_blocks)
@RELATIVE_DATES_FLAG.override(active=True)
@override_experiment_waffle_flag(RELATIVE_DATES_FLAG, active=True)
def test_enabled_block_types_with_assignments(self): # pylint: disable=too-many-statements
"""
Creates a course with multiple subsections to test all of the different
@@ -300,7 +304,7 @@ class CourseDateSummaryTest(SharedModuleStoreTestCase):
for html_tag in assignment_title_html:
self.assertIn(html_tag, assignment_title)
@RELATIVE_DATES_FLAG.override(active=True)
@override_experiment_waffle_flag(RELATIVE_DATES_FLAG, active=True)
@ddt.data(
([], 3),
([{
@@ -366,7 +370,7 @@ class CourseDateSummaryTest(SharedModuleStoreTestCase):
blocks = get_course_date_blocks(course, user, request, include_past_dates=True)
self.assertEqual(len(blocks), date_block_count)
@RELATIVE_DATES_FLAG.override(active=True)
@override_experiment_waffle_flag(RELATIVE_DATES_FLAG, active=True)
def test_enabled_block_types_with_expired_course(self):
course = create_course_run(days_till_start=-100)
user = create_user()
@@ -543,7 +547,7 @@ class CourseDateSummaryTest(SharedModuleStoreTestCase):
{'weeks_to_complete': 7}, # Weeks to complete > time til end (end date shown)
{'weeks_to_complete': 4}, # Weeks to complete < time til end (end date not shown)
)
@RELATIVE_DATES_FLAG.override(active=True)
@override_experiment_waffle_flag(RELATIVE_DATES_FLAG, active=True)
def test_course_end_date_self_paced(self, cr_details):
"""
In self-paced courses, the end date will now only show up if the learner
@@ -733,7 +737,7 @@ class CourseDateSummaryTest(SharedModuleStoreTestCase):
)
@ddt.unpack
@override_waffle_flag(DISABLE_UNIFIED_COURSE_TAB_FLAG, active=False)
@RELATIVE_DATES_FLAG.override(active=True)
@override_experiment_waffle_flag(RELATIVE_DATES_FLAG, 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()
@@ -751,7 +755,7 @@ class CourseDateSummaryTest(SharedModuleStoreTestCase):
def assert_html_elements(assert_function, user):
self.client.login(username=user.username, password=TEST_PASSWORD)
if mfe_active:
with COURSE_HOME_MICROFRONTEND.override(active=True), \
with override_experiment_waffle_flag(COURSE_HOME_MICROFRONTEND, active=True), \
COURSE_HOME_MICROFRONTEND_DATES_TAB.override(active=True):
response = self.client.get(url, follow=True)
else:

View File

@@ -11,17 +11,10 @@ import unittest
from datetime import datetime, timedelta
from uuid import uuid4
import ddt
import six
from markupsafe import escape
from mock import MagicMock, PropertyMock, call, create_autospec, patch
from pytz import UTC, utc
from six import text_type
from six.moves import range
from six.moves.urllib.parse import quote, urlencode
from completion.test_utils import CompletionWaffleTestMixin
from crum import set_current_request
import ddt
from django.conf import settings
from django.contrib.auth.models import AnonymousUser
from django.http import Http404, HttpResponseBadRequest
@@ -30,17 +23,24 @@ from django.test.client import Client
from django.test.utils import override_settings
from django.urls import reverse, reverse_lazy
from freezegun import freeze_time
from markupsafe import escape
from milestones.tests.utils import MilestonesTestCaseMixin
from mock import MagicMock, PropertyMock, call, create_autospec, patch
from opaque_keys.edx.keys import CourseKey, UsageKey
from opaque_keys.edx.locator import BlockUsageLocator, CourseLocator
from pytz import UTC, utc
from six import text_type
from six.moves import range
from six.moves.urllib.parse import quote, urlencode
from web_fragments.fragment import Fragment
from xblock.core import XBlock
from xblock.fields import Scope, String
import lms.djangoapps.courseware.views.views as views
import lms.djangoapps.courseware.views.views as views
from capa.tests.response_xml_factory import MultipleChoiceResponseXMLFactory
from course_modes.models import CourseMode
from course_modes.tests.factories import CourseModeFactory
from edx_toggles.toggles.testutils import override_waffle_flag
from lms.djangoapps.certificates import api as certs_api
from lms.djangoapps.certificates.models import (
CertificateGenerationConfiguration,
@@ -63,6 +63,7 @@ from lms.djangoapps.courseware.toggles import (
from lms.djangoapps.courseware.url_helpers import get_microfrontend_url, get_redirect_url
from lms.djangoapps.courseware.user_state_client import DjangoXBlockUserStateClient
from lms.djangoapps.courseware.views.index import show_courseware_mfe_link
from lms.djangoapps.experiments.testutils import override_experiment_waffle_flag
from lms.djangoapps.grades.config.waffle import ASSUME_ZERO_GRADE_IF_ABSENT
from lms.djangoapps.grades.config.waffle import waffle as grades_waffle
from lms.djangoapps.verify_student.models import VerificationDeadline
@@ -1445,7 +1446,7 @@ class ProgressPageTests(ProgressPageBaseTests):
def test_progress_queries(self, enable_waffle, initial, subsequent):
ContentTypeGatingConfig.objects.create(enabled=True, enabled_as_of=datetime(2018, 1, 1))
self.setup_course()
with grades_waffle().override(ASSUME_ZERO_GRADE_IF_ABSENT, active=enable_waffle):
with override_waffle_flag(ASSUME_ZERO_GRADE_IF_ABSENT, active=enable_waffle):
with self.assertNumQueries(
initial, table_blacklist=QUERY_COUNT_TABLE_BLACKLIST
), check_mongo_calls(1):
@@ -3135,7 +3136,7 @@ class DatesTabTestCase(ModuleStoreTestCase):
response = self._get_response(self.course)
self.assertEqual(response.status_code, 200)
@RELATIVE_DATES_FLAG.override(active=True)
@override_experiment_waffle_flag(RELATIVE_DATES_FLAG, active=True)
@patch('edx_django_utils.monitoring.set_custom_attribute')
def test_defaults(self, mock_set_custom_attribute):
enrollment = CourseEnrollmentFactory(course_id=self.course.id, user=self.user, mode=CourseMode.VERIFIED)
@@ -3196,7 +3197,7 @@ class DatesTabTestCase(ModuleStoreTestCase):
# Make sure the assignment type is rendered
self.assertContains(response, 'Homework:')
@RELATIVE_DATES_FLAG.override(active=True)
@override_experiment_waffle_flag(RELATIVE_DATES_FLAG, active=True)
def test_reset_deadlines_banner_displays(self):
CourseEnrollmentFactory(course_id=self.course.id, user=self.user, mode=CourseMode.VERIFIED)
now = datetime.now(utc)
@@ -3250,7 +3251,7 @@ class TestShowCoursewareMFE(TestCase):
)
for user, course_key, is_course_staff, preview_active, redirect_active in combos:
with override_waffle_flag(COURSEWARE_MICROFRONTEND_COURSE_TEAM_PREVIEW, preview_active):
with REDIRECT_TO_COURSEWARE_MICROFRONTEND.override(active=redirect_active):
with override_experiment_waffle_flag(REDIRECT_TO_COURSEWARE_MICROFRONTEND, active=redirect_active):
assert show_courseware_mfe_link(user, is_course_staff, course_key) is False
@patch.dict(settings.FEATURES, {'ENABLE_COURSEWARE_MICROFRONTEND': True})
@@ -3270,14 +3271,14 @@ class TestShowCoursewareMFE(TestCase):
)
for user, is_course_staff, preview_active, redirect_active in old_mongo_combos:
with override_waffle_flag(COURSEWARE_MICROFRONTEND_COURSE_TEAM_PREVIEW, preview_active):
with REDIRECT_TO_COURSEWARE_MICROFRONTEND.override(active=redirect_active):
with override_experiment_waffle_flag(REDIRECT_TO_COURSEWARE_MICROFRONTEND, active=redirect_active):
assert show_courseware_mfe_link(user, is_course_staff, old_course_key) is False
# We've checked all old-style course keys now, so we can test only the
# new ones going forward. Now we check combinations of waffle flags and
# user permissions...
with override_waffle_flag(COURSEWARE_MICROFRONTEND_COURSE_TEAM_PREVIEW, True):
with REDIRECT_TO_COURSEWARE_MICROFRONTEND.override(active=True):
with override_experiment_waffle_flag(REDIRECT_TO_COURSEWARE_MICROFRONTEND, active=True):
# (preview=on, redirect=on)
# Global and Course Staff can see the link.
self.assertTrue(show_courseware_mfe_link(global_staff_user, True, new_course_key))
@@ -3286,7 +3287,7 @@ class TestShowCoursewareMFE(TestCase):
# Regular users don't see the link.
self.assertFalse(show_courseware_mfe_link(regular_user, False, new_course_key))
with REDIRECT_TO_COURSEWARE_MICROFRONTEND.override(active=False):
with override_experiment_waffle_flag(REDIRECT_TO_COURSEWARE_MICROFRONTEND, active=False):
# (preview=on, redirect=off)
# Global and Course Staff can see the link.
self.assertTrue(show_courseware_mfe_link(global_staff_user, True, new_course_key))
@@ -3297,7 +3298,7 @@ class TestShowCoursewareMFE(TestCase):
self.assertFalse(show_courseware_mfe_link(regular_user, False, new_course_key))
with override_waffle_flag(COURSEWARE_MICROFRONTEND_COURSE_TEAM_PREVIEW, False):
with REDIRECT_TO_COURSEWARE_MICROFRONTEND.override(active=True):
with override_experiment_waffle_flag(REDIRECT_TO_COURSEWARE_MICROFRONTEND, active=True):
# (preview=off, redirect=on)
# Global staff see the link anyway
self.assertTrue(show_courseware_mfe_link(global_staff_user, True, new_course_key))
@@ -3309,7 +3310,7 @@ class TestShowCoursewareMFE(TestCase):
# Regular users don't see the link.
self.assertFalse(show_courseware_mfe_link(regular_user, False, new_course_key))
with REDIRECT_TO_COURSEWARE_MICROFRONTEND.override(active=False):
with override_experiment_waffle_flag(REDIRECT_TO_COURSEWARE_MICROFRONTEND, active=False):
# (preview=off, redirect=off)
# Global staff see the link anyway
self.assertTrue(show_courseware_mfe_link(global_staff_user, True, new_course_key))
@@ -3368,7 +3369,7 @@ class MFERedirectTests(BaseViewsTestCase):
# learners will be redirected when the waffle flag is set
lms_url, mfe_url = self._get_urls()
with REDIRECT_TO_COURSEWARE_MICROFRONTEND.override(active=True):
with override_experiment_waffle_flag(REDIRECT_TO_COURSEWARE_MICROFRONTEND, active=True):
assert self.client.get(lms_url).url == mfe_url
def test_staff_no_redirect(self):
@@ -3380,14 +3381,14 @@ class MFERedirectTests(BaseViewsTestCase):
self.client.login(username=course_staff.username, password='test')
assert self.client.get(lms_url).status_code == 200
with REDIRECT_TO_COURSEWARE_MICROFRONTEND.override(active=True):
with override_experiment_waffle_flag(REDIRECT_TO_COURSEWARE_MICROFRONTEND, active=True):
assert self.client.get(lms_url).status_code == 200
# global staff will never be redirected
self._create_global_staff_user()
assert self.client.get(lms_url).status_code == 200
with REDIRECT_TO_COURSEWARE_MICROFRONTEND.override(active=True):
with override_experiment_waffle_flag(REDIRECT_TO_COURSEWARE_MICROFRONTEND, active=True):
assert self.client.get(lms_url).status_code == 200
def test_exam_no_redirect(self):
@@ -3397,5 +3398,5 @@ class MFERedirectTests(BaseViewsTestCase):
lms_url, mfe_url = self._get_urls()
with REDIRECT_TO_COURSEWARE_MICROFRONTEND.override(active=True):
with override_experiment_waffle_flag(REDIRECT_TO_COURSEWARE_MICROFRONTEND, active=True):
assert self.client.get(lms_url).status_code == 200