REVE-104 & REVE-108: Ensure Course Roles' Access
This commit is contained in:
committed by
Matthew Piatetsky
parent
2d338b34aa
commit
14a899a65d
@@ -240,7 +240,7 @@ class TestFieldOverrideMongoPerformance(FieldOverridePerformanceTestCase):
|
||||
__test__ = True
|
||||
|
||||
# TODO: decrease query count as part of REVO-28
|
||||
QUERY_COUNT = 33
|
||||
QUERY_COUNT = 38
|
||||
TEST_DATA = {
|
||||
# (providers, course_width, enable_ccx, view_as_ccx): (
|
||||
# # of sql queries to default,
|
||||
@@ -269,7 +269,7 @@ class TestFieldOverrideSplitPerformance(FieldOverridePerformanceTestCase):
|
||||
__test__ = True
|
||||
|
||||
# TODO: decrease query count as part of REVO-28
|
||||
QUERY_COUNT = 33
|
||||
QUERY_COUNT = 38
|
||||
TEST_DATA = {
|
||||
('no_overrides', 1, True, False): (QUERY_COUNT, 3),
|
||||
('no_overrides', 2, True, False): (QUERY_COUNT, 3),
|
||||
@@ -277,9 +277,9 @@ class TestFieldOverrideSplitPerformance(FieldOverridePerformanceTestCase):
|
||||
('ccx', 1, True, False): (QUERY_COUNT, 3),
|
||||
('ccx', 2, True, False): (QUERY_COUNT, 3),
|
||||
('ccx', 3, True, False): (QUERY_COUNT, 3),
|
||||
('ccx', 1, True, True): (34, 3),
|
||||
('ccx', 2, True, True): (34, 3),
|
||||
('ccx', 3, True, True): (34, 3),
|
||||
('ccx', 1, True, True): (QUERY_COUNT + 1, 3),
|
||||
('ccx', 2, True, True): (QUERY_COUNT + 1, 3),
|
||||
('ccx', 3, True, True): (QUERY_COUNT + 1, 3),
|
||||
('no_overrides', 1, False, False): (QUERY_COUNT, 3),
|
||||
('no_overrides', 2, False, False): (QUERY_COUNT, 3),
|
||||
('no_overrides', 3, False, False): (QUERY_COUNT, 3),
|
||||
|
||||
@@ -162,7 +162,7 @@ class TestGetBlocksQueryCounts(TestGetBlocksQueryCountsBase):
|
||||
self._get_blocks(
|
||||
course,
|
||||
expected_mongo_queries=0,
|
||||
expected_sql_queries=7 if with_storage_backing else 6,
|
||||
expected_sql_queries=8 if with_storage_backing else 7,
|
||||
)
|
||||
|
||||
@ddt.data(
|
||||
@@ -179,9 +179,9 @@ class TestGetBlocksQueryCounts(TestGetBlocksQueryCountsBase):
|
||||
clear_course_from_cache(course.id)
|
||||
|
||||
if with_storage_backing:
|
||||
num_sql_queries = 17
|
||||
num_sql_queries = 18
|
||||
else:
|
||||
num_sql_queries = 7
|
||||
num_sql_queries = 8
|
||||
|
||||
self._get_blocks(
|
||||
course,
|
||||
@@ -211,7 +211,7 @@ class TestQueryCountsWithIndividualOverrideProvider(TestGetBlocksQueryCountsBase
|
||||
self._get_blocks(
|
||||
course,
|
||||
expected_mongo_queries=0,
|
||||
expected_sql_queries=8 if with_storage_backing else 7,
|
||||
expected_sql_queries=9 if with_storage_backing else 8,
|
||||
)
|
||||
|
||||
@ddt.data(
|
||||
@@ -228,9 +228,9 @@ class TestQueryCountsWithIndividualOverrideProvider(TestGetBlocksQueryCountsBase
|
||||
clear_course_from_cache(course.id)
|
||||
|
||||
if with_storage_backing:
|
||||
num_sql_queries = 18
|
||||
num_sql_queries = 19
|
||||
else:
|
||||
num_sql_queries = 8
|
||||
num_sql_queries = 9
|
||||
|
||||
self._get_blocks(
|
||||
course,
|
||||
|
||||
@@ -842,12 +842,12 @@ class CourseOverviewAccessTestCase(ModuleStoreTestCase):
|
||||
if user_attr_name == 'user_staff' and action == 'see_exists':
|
||||
# always checks staff role, and if the course has started, check the duration configuration
|
||||
if course_attr_name == 'course_started':
|
||||
num_queries = 5
|
||||
num_queries = 3
|
||||
else:
|
||||
num_queries = 1
|
||||
elif user_attr_name == 'user_normal' and action == 'see_exists':
|
||||
if course_attr_name == 'course_started':
|
||||
num_queries = 5
|
||||
num_queries = 6
|
||||
else:
|
||||
# checks staff role and enrollment data
|
||||
num_queries = 2
|
||||
|
||||
@@ -436,8 +436,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, 40, 3)
|
||||
self.fetch_course_info_with_queries(self.instructor_paced_course, 42, 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, 40, 3)
|
||||
self.fetch_course_info_with_queries(self.self_paced_course, 42, 3)
|
||||
|
||||
@@ -213,8 +213,8 @@ class IndexQueryTestCase(ModuleStoreTestCase):
|
||||
NUM_PROBLEMS = 20
|
||||
|
||||
@ddt.data(
|
||||
(ModuleStoreEnum.Type.mongo, 10, 171),
|
||||
(ModuleStoreEnum.Type.split, 4, 167),
|
||||
(ModuleStoreEnum.Type.mongo, 10, 178),
|
||||
(ModuleStoreEnum.Type.split, 4, 172),
|
||||
)
|
||||
@ddt.unpack
|
||||
def test_index_query_counts(self, store_type, expected_mongo_query_count, expected_mysql_query_count):
|
||||
@@ -1440,8 +1440,8 @@ class ProgressPageTests(ProgressPageBaseTests):
|
||||
self.assertContains(resp, u"Download Your Certificate")
|
||||
|
||||
@ddt.data(
|
||||
(True, 53),
|
||||
(False, 52)
|
||||
(True, 58),
|
||||
(False, 57)
|
||||
)
|
||||
@ddt.unpack
|
||||
def test_progress_queries_paced_courses(self, self_paced, query_count):
|
||||
@@ -1454,8 +1454,8 @@ class ProgressPageTests(ProgressPageBaseTests):
|
||||
|
||||
@patch.dict(settings.FEATURES, {'ASSUME_ZERO_GRADE_IF_ABSENT_FOR_ALL_TESTS': False})
|
||||
@ddt.data(
|
||||
(False, 60, 40),
|
||||
(True, 52, 36)
|
||||
(False, 65, 45),
|
||||
(True, 57, 41)
|
||||
)
|
||||
@ddt.unpack
|
||||
def test_progress_queries(self, enable_waffle, initial, subsequent):
|
||||
|
||||
@@ -431,18 +431,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, 22, 7),
|
||||
(ModuleStoreEnum.Type.mongo, False, 50, 5, 2, 22, 7),
|
||||
(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, 22, 7),
|
||||
(ModuleStoreEnum.Type.split, False, 50, 3, 3, 22, 7),
|
||||
(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, 22, 7),
|
||||
(ModuleStoreEnum.Type.mongo, True, 50, 5, 2, 22, 7),
|
||||
(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, 22, 7),
|
||||
(ModuleStoreEnum.Type.split, True, 50, 3, 3, 22, 7),
|
||||
(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(
|
||||
|
||||
@@ -403,8 +403,8 @@ class ViewsQueryCountTestCase(
|
||||
return inner
|
||||
|
||||
@ddt.data(
|
||||
(ModuleStoreEnum.Type.mongo, 3, 4, 40),
|
||||
(ModuleStoreEnum.Type.split, 3, 13, 40),
|
||||
(ModuleStoreEnum.Type.mongo, 3, 4, 41),
|
||||
(ModuleStoreEnum.Type.split, 3, 13, 41),
|
||||
)
|
||||
@ddt.unpack
|
||||
@count_queries
|
||||
@@ -412,8 +412,8 @@ class ViewsQueryCountTestCase(
|
||||
self.create_thread_helper(mock_request)
|
||||
|
||||
@ddt.data(
|
||||
(ModuleStoreEnum.Type.mongo, 3, 3, 36),
|
||||
(ModuleStoreEnum.Type.split, 3, 10, 36),
|
||||
(ModuleStoreEnum.Type.mongo, 3, 3, 37),
|
||||
(ModuleStoreEnum.Type.split, 3, 10, 37),
|
||||
)
|
||||
@ddt.unpack
|
||||
@count_queries
|
||||
|
||||
@@ -92,35 +92,35 @@ class TestCourseGradeFactory(GradeTestBase):
|
||||
[self.sequence.display_name, self.sequence2.display_name]
|
||||
)
|
||||
|
||||
with self.assertNumQueries(4), mock_get_score(1, 2):
|
||||
with self.assertNumQueries(5), mock_get_score(1, 2):
|
||||
_assert_read(expected_pass=False, expected_percent=0) # start off with grade of 0
|
||||
|
||||
num_queries = 43
|
||||
num_queries = 44
|
||||
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(4):
|
||||
with self.assertNumQueries(5):
|
||||
_assert_read(expected_pass=True, expected_percent=0.5) # updated to grade of .5
|
||||
|
||||
num_queries = 8
|
||||
num_queries = 9
|
||||
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(4):
|
||||
with self.assertNumQueries(5):
|
||||
_assert_read(expected_pass=True, expected_percent=0.5) # NOT updated to grade of .25
|
||||
|
||||
num_queries = 22
|
||||
num_queries = 23
|
||||
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(4):
|
||||
with self.assertNumQueries(5):
|
||||
_assert_read(expected_pass=True, expected_percent=1.0) # updated to grade of 1.0
|
||||
|
||||
num_queries = 25
|
||||
num_queries = 26
|
||||
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(4):
|
||||
with self.assertNumQueries(5):
|
||||
_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})
|
||||
|
||||
@@ -176,10 +176,10 @@ class RecalculateSubsectionGradeTest(HasCourseWithProblemsMixin, ModuleStoreTest
|
||||
self.assertEquals(mock_block_structure_create.call_count, 1)
|
||||
|
||||
@ddt.data(
|
||||
(ModuleStoreEnum.Type.mongo, 1, 32, True),
|
||||
(ModuleStoreEnum.Type.mongo, 1, 32, False),
|
||||
(ModuleStoreEnum.Type.split, 3, 32, True),
|
||||
(ModuleStoreEnum.Type.split, 3, 32, False),
|
||||
(ModuleStoreEnum.Type.mongo, 1, 33, True),
|
||||
(ModuleStoreEnum.Type.mongo, 1, 33, False),
|
||||
(ModuleStoreEnum.Type.split, 3, 33, True),
|
||||
(ModuleStoreEnum.Type.split, 3, 33, False),
|
||||
)
|
||||
@ddt.unpack
|
||||
def test_query_counts(self, default_store, num_mongo_calls, num_sql_calls, create_multiple_subsections):
|
||||
@@ -191,8 +191,8 @@ class RecalculateSubsectionGradeTest(HasCourseWithProblemsMixin, ModuleStoreTest
|
||||
self._apply_recalculate_subsection_grade()
|
||||
|
||||
@ddt.data(
|
||||
(ModuleStoreEnum.Type.mongo, 1, 32),
|
||||
(ModuleStoreEnum.Type.split, 3, 32),
|
||||
(ModuleStoreEnum.Type.mongo, 1, 33),
|
||||
(ModuleStoreEnum.Type.split, 3, 33),
|
||||
)
|
||||
@ddt.unpack
|
||||
def test_query_counts_dont_change_with_more_content(self, default_store, num_mongo_calls, num_sql_calls):
|
||||
@@ -237,8 +237,8 @@ class RecalculateSubsectionGradeTest(HasCourseWithProblemsMixin, ModuleStoreTest
|
||||
)
|
||||
|
||||
@ddt.data(
|
||||
(ModuleStoreEnum.Type.mongo, 1, 16),
|
||||
(ModuleStoreEnum.Type.split, 3, 16),
|
||||
(ModuleStoreEnum.Type.mongo, 1, 17),
|
||||
(ModuleStoreEnum.Type.split, 3, 17),
|
||||
)
|
||||
@ddt.unpack
|
||||
def test_persistent_grades_not_enabled_on_course(self, default_store, num_mongo_queries, num_sql_queries):
|
||||
@@ -252,8 +252,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, 33),
|
||||
(ModuleStoreEnum.Type.split, 3, 33),
|
||||
(ModuleStoreEnum.Type.mongo, 1, 34),
|
||||
(ModuleStoreEnum.Type.split, 3, 34),
|
||||
)
|
||||
@ddt.unpack
|
||||
def test_persistent_grades_enabled_on_course(self, default_store, num_mongo_queries, num_sql_queries):
|
||||
|
||||
Reference in New Issue
Block a user