delete old holdback code
This commit is contained in:
@@ -244,7 +244,7 @@ class TestFieldOverrideMongoPerformance(FieldOverridePerformanceTestCase):
|
||||
__test__ = True
|
||||
|
||||
# TODO: decrease query count as part of REVO-28
|
||||
QUERY_COUNT = 36
|
||||
QUERY_COUNT = 32
|
||||
TEST_DATA = {
|
||||
# (providers, course_width, enable_ccx, view_as_ccx): (
|
||||
# # of sql queries to default,
|
||||
@@ -273,7 +273,7 @@ class TestFieldOverrideSplitPerformance(FieldOverridePerformanceTestCase):
|
||||
__test__ = True
|
||||
|
||||
# TODO: decrease query count as part of REVO-28
|
||||
QUERY_COUNT = 36
|
||||
QUERY_COUNT = 32
|
||||
|
||||
TEST_DATA = {
|
||||
('no_overrides', 1, True, False): (QUERY_COUNT, 3),
|
||||
|
||||
@@ -244,7 +244,7 @@ class TestGetBlocksQueryCounts(TestGetBlocksQueryCountsBase):
|
||||
self._get_blocks(
|
||||
course,
|
||||
expected_mongo_queries=0,
|
||||
expected_sql_queries=14 if with_storage_backing else 13,
|
||||
expected_sql_queries=13 if with_storage_backing else 12,
|
||||
)
|
||||
|
||||
@ddt.data(
|
||||
@@ -261,9 +261,9 @@ class TestGetBlocksQueryCounts(TestGetBlocksQueryCountsBase):
|
||||
clear_course_from_cache(course.id)
|
||||
|
||||
if with_storage_backing:
|
||||
num_sql_queries = 24
|
||||
num_sql_queries = 23
|
||||
else:
|
||||
num_sql_queries = 14
|
||||
num_sql_queries = 13
|
||||
|
||||
self._get_blocks(
|
||||
course,
|
||||
|
||||
@@ -849,7 +849,7 @@ class CourseOverviewAccessTestCase(ModuleStoreTestCase):
|
||||
num_queries = 1
|
||||
elif user_attr_name == 'user_normal' and action == 'see_exists':
|
||||
if course_attr_name == 'course_started':
|
||||
num_queries = 7
|
||||
num_queries = 6
|
||||
else:
|
||||
# checks staff role and enrollment data
|
||||
num_queries = 2
|
||||
|
||||
@@ -431,8 +431,8 @@ class SelfPacedCourseInfoTestCase(LoginEnrollmentTestCase, SharedModuleStoreTest
|
||||
|
||||
def test_num_queries_instructor_paced(self):
|
||||
# TODO: decrease query count as part of REVO-28
|
||||
self.fetch_course_info_with_queries(self.instructor_paced_course, 45, 3)
|
||||
self.fetch_course_info_with_queries(self.instructor_paced_course, 43, 3)
|
||||
|
||||
def test_num_queries_self_paced(self):
|
||||
# TODO: decrease query count as part of REVO-28
|
||||
self.fetch_course_info_with_queries(self.self_paced_course, 45, 3)
|
||||
self.fetch_course_info_with_queries(self.self_paced_course, 43, 3)
|
||||
|
||||
@@ -225,8 +225,8 @@ class IndexQueryTestCase(ModuleStoreTestCase):
|
||||
NUM_PROBLEMS = 20
|
||||
|
||||
@ddt.data(
|
||||
(ModuleStoreEnum.Type.mongo, 10, 186),
|
||||
(ModuleStoreEnum.Type.split, 4, 180),
|
||||
(ModuleStoreEnum.Type.mongo, 10, 179),
|
||||
(ModuleStoreEnum.Type.split, 4, 175),
|
||||
)
|
||||
@ddt.unpack
|
||||
def test_index_query_counts(self, store_type, expected_mongo_query_count, expected_mysql_query_count):
|
||||
@@ -1459,8 +1459,8 @@ class ProgressPageTests(ProgressPageBaseTests):
|
||||
self.assertContains(resp, u"Download Your Certificate")
|
||||
|
||||
@ddt.data(
|
||||
(True, 56),
|
||||
(False, 55)
|
||||
(True, 52),
|
||||
(False, 51)
|
||||
)
|
||||
@ddt.unpack
|
||||
def test_progress_queries_paced_courses(self, self_paced, query_count):
|
||||
@@ -1473,8 +1473,8 @@ class ProgressPageTests(ProgressPageBaseTests):
|
||||
|
||||
@patch.dict(settings.FEATURES, {'ASSUME_ZERO_GRADE_IF_ABSENT_FOR_ALL_TESTS': False})
|
||||
@ddt.data(
|
||||
(False, 64, 44),
|
||||
(True, 55, 39)
|
||||
(False, 60, 40),
|
||||
(True, 51, 35)
|
||||
)
|
||||
@ddt.unpack
|
||||
def test_progress_queries(self, enable_waffle, initial, subsequent):
|
||||
|
||||
@@ -404,8 +404,8 @@ class ViewsQueryCountTestCase(
|
||||
return inner
|
||||
|
||||
@ddt.data(
|
||||
(ModuleStoreEnum.Type.mongo, 3, 4, 41),
|
||||
(ModuleStoreEnum.Type.split, 3, 13, 41),
|
||||
(ModuleStoreEnum.Type.mongo, 3, 4, 40),
|
||||
(ModuleStoreEnum.Type.split, 3, 13, 40),
|
||||
)
|
||||
@ddt.unpack
|
||||
@count_queries
|
||||
@@ -413,8 +413,8 @@ class ViewsQueryCountTestCase(
|
||||
self.create_thread_helper(mock_request)
|
||||
|
||||
@ddt.data(
|
||||
(ModuleStoreEnum.Type.mongo, 3, 3, 37),
|
||||
(ModuleStoreEnum.Type.split, 3, 10, 37),
|
||||
(ModuleStoreEnum.Type.mongo, 3, 3, 36),
|
||||
(ModuleStoreEnum.Type.split, 3, 10, 36),
|
||||
)
|
||||
@ddt.unpack
|
||||
@count_queries
|
||||
|
||||
@@ -464,18 +464,18 @@ class SingleThreadQueryCountTestCase(ForumsEnableMixin, ModuleStoreTestCase):
|
||||
# course is outside the context manager that is verifying the number of queries,
|
||||
# and with split mongo, that method ends up querying disabled_xblocks (which is then
|
||||
# cached and hence not queried as part of call_single_thread).
|
||||
(ModuleStoreEnum.Type.mongo, False, 1, 5, 2, 24, 9),
|
||||
(ModuleStoreEnum.Type.mongo, False, 50, 5, 2, 24, 9),
|
||||
(ModuleStoreEnum.Type.mongo, False, 1, 5, 2, 23, 8),
|
||||
(ModuleStoreEnum.Type.mongo, False, 50, 5, 2, 23, 8),
|
||||
# split mongo: 3 queries, regardless of thread response size.
|
||||
(ModuleStoreEnum.Type.split, False, 1, 3, 3, 24, 9),
|
||||
(ModuleStoreEnum.Type.split, False, 50, 3, 3, 24, 9),
|
||||
(ModuleStoreEnum.Type.split, False, 1, 3, 3, 23, 8),
|
||||
(ModuleStoreEnum.Type.split, False, 50, 3, 3, 23, 8),
|
||||
|
||||
# Enabling Enterprise integration should have no effect on the number of mongo queries made.
|
||||
(ModuleStoreEnum.Type.mongo, True, 1, 5, 2, 24, 9),
|
||||
(ModuleStoreEnum.Type.mongo, True, 50, 5, 2, 24, 9),
|
||||
(ModuleStoreEnum.Type.mongo, True, 1, 5, 2, 23, 8),
|
||||
(ModuleStoreEnum.Type.mongo, True, 50, 5, 2, 23, 8),
|
||||
# split mongo: 3 queries, regardless of thread response size.
|
||||
(ModuleStoreEnum.Type.split, True, 1, 3, 3, 24, 9),
|
||||
(ModuleStoreEnum.Type.split, True, 50, 3, 3, 24, 9),
|
||||
(ModuleStoreEnum.Type.split, True, 1, 3, 3, 23, 8),
|
||||
(ModuleStoreEnum.Type.split, True, 50, 3, 3, 23, 8),
|
||||
)
|
||||
@ddt.unpack
|
||||
def test_number_of_mongo_queries(
|
||||
|
||||
@@ -97,35 +97,35 @@ class TestCourseGradeFactory(GradeTestBase):
|
||||
[self.sequence.display_name, self.sequence2.display_name]
|
||||
)
|
||||
|
||||
with self.assertNumQueries(4), mock_get_score(1, 2):
|
||||
with self.assertNumQueries(3), mock_get_score(1, 2):
|
||||
_assert_read(expected_pass=False, expected_percent=0) # start off with grade of 0
|
||||
|
||||
num_queries = 47
|
||||
num_queries = 46
|
||||
with self.assertNumQueries(num_queries), mock_get_score(1, 2):
|
||||
grade_factory.update(self.request.user, self.course, force_update_subsections=True)
|
||||
|
||||
with self.assertNumQueries(5):
|
||||
with self.assertNumQueries(4):
|
||||
_assert_read(expected_pass=True, expected_percent=0.5) # updated to grade of .5
|
||||
|
||||
num_queries = 9
|
||||
num_queries = 8
|
||||
with self.assertNumQueries(num_queries), mock_get_score(1, 4):
|
||||
grade_factory.update(self.request.user, self.course, force_update_subsections=False)
|
||||
|
||||
with self.assertNumQueries(5):
|
||||
with self.assertNumQueries(4):
|
||||
_assert_read(expected_pass=True, expected_percent=0.5) # NOT updated to grade of .25
|
||||
|
||||
num_queries = 26
|
||||
num_queries = 25
|
||||
with self.assertNumQueries(num_queries), mock_get_score(2, 2):
|
||||
grade_factory.update(self.request.user, self.course, force_update_subsections=True)
|
||||
|
||||
with self.assertNumQueries(5):
|
||||
with self.assertNumQueries(4):
|
||||
_assert_read(expected_pass=True, expected_percent=1.0) # updated to grade of 1.0
|
||||
|
||||
num_queries = 30
|
||||
num_queries = 29
|
||||
with self.assertNumQueries(num_queries), mock_get_score(0, 0): # the subsection now is worth zero
|
||||
grade_factory.update(self.request.user, self.course, force_update_subsections=True)
|
||||
|
||||
with self.assertNumQueries(5):
|
||||
with self.assertNumQueries(4):
|
||||
_assert_read(expected_pass=False, expected_percent=0.0) # updated to grade of 0.0
|
||||
|
||||
@patch.dict(settings.FEATURES, {'ASSUME_ZERO_GRADE_IF_ABSENT_FOR_ALL_TESTS': False})
|
||||
|
||||
@@ -165,10 +165,10 @@ class RecalculateSubsectionGradeTest(HasCourseWithProblemsMixin, ModuleStoreTest
|
||||
self.assertEquals(mock_block_structure_create.call_count, 1)
|
||||
|
||||
@ddt.data(
|
||||
(ModuleStoreEnum.Type.mongo, 1, 38, True),
|
||||
(ModuleStoreEnum.Type.mongo, 1, 38, False),
|
||||
(ModuleStoreEnum.Type.split, 3, 38, True),
|
||||
(ModuleStoreEnum.Type.split, 3, 38, False),
|
||||
(ModuleStoreEnum.Type.mongo, 1, 37, True),
|
||||
(ModuleStoreEnum.Type.mongo, 1, 37, False),
|
||||
(ModuleStoreEnum.Type.split, 3, 37, True),
|
||||
(ModuleStoreEnum.Type.split, 3, 37, False),
|
||||
)
|
||||
@ddt.unpack
|
||||
def test_query_counts(self, default_store, num_mongo_calls, num_sql_calls, create_multiple_subsections):
|
||||
@@ -180,8 +180,8 @@ class RecalculateSubsectionGradeTest(HasCourseWithProblemsMixin, ModuleStoreTest
|
||||
self._apply_recalculate_subsection_grade()
|
||||
|
||||
@ddt.data(
|
||||
(ModuleStoreEnum.Type.mongo, 1, 38),
|
||||
(ModuleStoreEnum.Type.split, 3, 38),
|
||||
(ModuleStoreEnum.Type.mongo, 1, 37),
|
||||
(ModuleStoreEnum.Type.split, 3, 37),
|
||||
)
|
||||
@ddt.unpack
|
||||
def test_query_counts_dont_change_with_more_content(self, default_store, num_mongo_calls, num_sql_calls):
|
||||
@@ -226,8 +226,8 @@ class RecalculateSubsectionGradeTest(HasCourseWithProblemsMixin, ModuleStoreTest
|
||||
)
|
||||
|
||||
@ddt.data(
|
||||
(ModuleStoreEnum.Type.mongo, 1, 21),
|
||||
(ModuleStoreEnum.Type.split, 3, 21),
|
||||
(ModuleStoreEnum.Type.mongo, 1, 20),
|
||||
(ModuleStoreEnum.Type.split, 3, 20),
|
||||
)
|
||||
@ddt.unpack
|
||||
def test_persistent_grades_not_enabled_on_course(self, default_store, num_mongo_queries, num_sql_queries):
|
||||
@@ -241,8 +241,8 @@ class RecalculateSubsectionGradeTest(HasCourseWithProblemsMixin, ModuleStoreTest
|
||||
self.assertEqual(len(PersistentSubsectionGrade.bulk_read_grades(self.user.id, self.course.id)), 0)
|
||||
|
||||
@ddt.data(
|
||||
(ModuleStoreEnum.Type.mongo, 1, 39),
|
||||
(ModuleStoreEnum.Type.split, 3, 39),
|
||||
(ModuleStoreEnum.Type.mongo, 1, 38),
|
||||
(ModuleStoreEnum.Type.split, 3, 38),
|
||||
)
|
||||
@ddt.unpack
|
||||
def test_persistent_grades_enabled_on_course(self, default_store, num_mongo_queries, num_sql_queries):
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
"""utils for feature-based enrollments"""
|
||||
from __future__ import absolute_import
|
||||
|
||||
from experiments.models import ExperimentData
|
||||
from openedx.features.course_duration_limits.config import EXPERIMENT_DATA_HOLDBACK_KEY, EXPERIMENT_ID
|
||||
from student.models import FBEEnrollmentExclusion
|
||||
|
||||
|
||||
@@ -11,17 +9,6 @@ def is_in_holdback(user, enrollment):
|
||||
Return true if given user is in holdback expermiment
|
||||
"""
|
||||
in_holdback = False
|
||||
if user and user.is_authenticated:
|
||||
try:
|
||||
holdback_value = ExperimentData.objects.get(
|
||||
user=user,
|
||||
experiment_id=EXPERIMENT_ID,
|
||||
key=EXPERIMENT_DATA_HOLDBACK_KEY,
|
||||
).value
|
||||
in_holdback = holdback_value == 'True'
|
||||
except ExperimentData.DoesNotExist:
|
||||
pass
|
||||
|
||||
if enrollment is not None:
|
||||
try:
|
||||
if enrollment.fbeenrollmentexclusion:
|
||||
|
||||
@@ -48,8 +48,7 @@ from openedx.core.lib.url_utils import quote_slashes
|
||||
from openedx.features.content_type_gating.helpers import CONTENT_GATING_PARTITION_ID, CONTENT_TYPE_GATE_GROUP_IDS
|
||||
from openedx.features.content_type_gating.models import ContentTypeGatingConfig
|
||||
from openedx.features.content_type_gating.partitions import ContentTypeGatingPartition
|
||||
from openedx.features.course_duration_limits.config import EXPERIMENT_DATA_HOLDBACK_KEY, EXPERIMENT_ID
|
||||
from student.models import CourseEnrollment
|
||||
from student.models import CourseEnrollment, FBEEnrollmentExclusion
|
||||
from student.roles import CourseInstructorRole
|
||||
from student.tests.factories import TEST_PASSWORD, CourseEnrollmentFactory, UserFactory
|
||||
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase, SharedModuleStoreTestCase
|
||||
@@ -638,15 +637,9 @@ class TestProblemTypeAccess(SharedModuleStoreTestCase):
|
||||
Test that putting a user in the content gating holdback disables content gating.
|
||||
"""
|
||||
user = UserFactory.create()
|
||||
enrollment = CourseEnrollment.enroll(user, self.course.id)
|
||||
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)
|
||||
FBEEnrollmentExclusion.objects.create(enrollment=enrollment)
|
||||
|
||||
graded, has_score, weight = True, True, 1
|
||||
block = self.graded_score_weight_blocks[(graded, has_score, weight)]
|
||||
|
||||
@@ -70,7 +70,7 @@ class TestContentTypeGatingConfig(CacheIsolationTestCase):
|
||||
user = self.user
|
||||
course_key = self.course_overview.id
|
||||
|
||||
query_count = 8
|
||||
query_count = 7
|
||||
|
||||
with self.assertNumQueries(query_count):
|
||||
enabled = ContentTypeGatingConfig.enabled_for_enrollment(
|
||||
|
||||
@@ -34,10 +34,9 @@ from openedx.core.djangoapps.django_comment_common.models import (
|
||||
from openedx.core.djangoapps.schedules.tests.factories import ScheduleFactory
|
||||
from openedx.features.content_type_gating.helpers import CONTENT_GATING_PARTITION_ID, CONTENT_TYPE_GATE_GROUP_IDS
|
||||
from openedx.features.course_duration_limits.access import MAX_DURATION, MIN_DURATION, get_user_course_expiration_date
|
||||
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.tests.views.helpers import add_course_mode
|
||||
from student.models import CourseEnrollment
|
||||
from student.models import CourseEnrollment, FBEEnrollmentExclusion
|
||||
from student.roles import CourseInstructorRole
|
||||
from student.tests.factories import TEST_PASSWORD, CourseEnrollmentFactory, UserFactory
|
||||
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
|
||||
@@ -250,17 +249,12 @@ class CourseExpirationTestCase(ModuleStoreTestCase):
|
||||
def test_masquerade_in_holdback(self, mock_get_course_run_details):
|
||||
mock_get_course_run_details.return_value = {'weeks_to_complete': 12}
|
||||
audit_student = UserFactory(username='audit')
|
||||
CourseEnrollmentFactory.create(
|
||||
enrollment = CourseEnrollmentFactory.create(
|
||||
user=audit_student,
|
||||
course_id=self.course.id,
|
||||
mode='audit'
|
||||
)
|
||||
ExperimentData.objects.create(
|
||||
user=audit_student,
|
||||
experiment_id=EXPERIMENT_ID,
|
||||
key=EXPERIMENT_DATA_HOLDBACK_KEY,
|
||||
value='True'
|
||||
)
|
||||
FBEEnrollmentExclusion.objects.create(enrollment=enrollment)
|
||||
CourseDurationLimitConfig.objects.create(
|
||||
enabled=True,
|
||||
course=CourseOverview.get_from_id(self.course.id),
|
||||
@@ -268,7 +262,7 @@ class CourseExpirationTestCase(ModuleStoreTestCase):
|
||||
)
|
||||
|
||||
instructor = UserFactory.create(username='instructor')
|
||||
CourseEnrollmentFactory.create(
|
||||
enrollment = CourseEnrollmentFactory.create(
|
||||
user=instructor,
|
||||
course_id=self.course.id,
|
||||
mode='audit'
|
||||
|
||||
@@ -75,7 +75,7 @@ class TestCourseDurationLimitConfig(CacheIsolationTestCase):
|
||||
user = self.user
|
||||
course_key = self.course_overview.id
|
||||
|
||||
query_count = 7
|
||||
query_count = 6
|
||||
|
||||
with self.assertNumQueries(query_count):
|
||||
enabled = CourseDurationLimitConfig.enabled_for_enrollment(
|
||||
|
||||
@@ -48,7 +48,6 @@ from openedx.core.djangoapps.django_comment_common.models import (
|
||||
from openedx.core.djangoapps.schedules.tests.factories import ScheduleFactory
|
||||
from openedx.core.djangoapps.waffle_utils.testutils import WAFFLE_TABLES, override_waffle_flag
|
||||
from openedx.core.djangolib.markup import HTML
|
||||
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 (
|
||||
COURSE_ENABLE_UNENROLLED_ACCESS_FLAG,
|
||||
@@ -56,7 +55,7 @@ from openedx.features.course_experience import (
|
||||
SHOW_UPGRADE_MSG_ON_COURSE_HOME,
|
||||
UNIFIED_COURSE_TAB_FLAG
|
||||
)
|
||||
from student.models import CourseEnrollment
|
||||
from student.models import CourseEnrollment, FBEEnrollmentExclusion
|
||||
from student.tests.factories import UserFactory
|
||||
from util.date_utils import strftime_localized
|
||||
from xmodule.course_module import COURSE_VISIBILITY_PRIVATE, COURSE_VISIBILITY_PUBLIC, COURSE_VISIBILITY_PUBLIC_OUTLINE
|
||||
@@ -220,7 +219,7 @@ class TestCourseHomePage(CourseHomePageTestCase):
|
||||
|
||||
# Fetch the view and verify the query counts
|
||||
# TODO: decrease query count as part of REVO-28
|
||||
with self.assertNumQueries(97, table_blacklist=QUERY_COUNT_TABLE_BLACKLIST):
|
||||
with self.assertNumQueries(88, table_blacklist=QUERY_COUNT_TABLE_BLACKLIST):
|
||||
with check_mongo_calls(4):
|
||||
url = course_home_url(self.course)
|
||||
self.client.get(url)
|
||||
@@ -659,11 +658,8 @@ class TestCourseHomePageAccess(CourseHomePageTestCase):
|
||||
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'
|
||||
FBEEnrollmentExclusion.objects.create(
|
||||
enrollment=audit_enrollment
|
||||
)
|
||||
|
||||
response = self.client.get(url)
|
||||
|
||||
@@ -134,7 +134,7 @@ class TestCourseUpdatesPage(SharedModuleStoreTestCase):
|
||||
|
||||
# Fetch the view and verify that the query counts haven't changed
|
||||
# TODO: decrease query count as part of REVO-28
|
||||
with self.assertNumQueries(56, table_blacklist=QUERY_COUNT_TABLE_BLACKLIST):
|
||||
with self.assertNumQueries(53, table_blacklist=QUERY_COUNT_TABLE_BLACKLIST):
|
||||
with check_mongo_calls(4):
|
||||
url = course_updates_url(self.course)
|
||||
self.client.get(url)
|
||||
|
||||
Reference in New Issue
Block a user