From 388fac3b9c80eca48799751fc8bb10efad0a68df Mon Sep 17 00:00:00 2001 From: Calen Pennington Date: Tue, 25 Jun 2019 10:45:31 -0400 Subject: [PATCH] Make has_non_audit_enrollments exclude honor courses correctly --- .../tests/test_field_override_performance.py | 4 ++-- .../courseware/tests/test_course_info.py | 4 ++-- lms/djangoapps/courseware/tests/test_views.py | 12 +++++------ lms/djangoapps/experiments/utils.py | 20 +++++++++---------- .../tests/views/test_course_home.py | 2 +- .../tests/views/test_course_updates.py | 2 +- 6 files changed, 21 insertions(+), 23 deletions(-) diff --git a/lms/djangoapps/ccx/tests/test_field_override_performance.py b/lms/djangoapps/ccx/tests/test_field_override_performance.py index a376c16f4c..8127460f2c 100644 --- a/lms/djangoapps/ccx/tests/test_field_override_performance.py +++ b/lms/djangoapps/ccx/tests/test_field_override_performance.py @@ -244,7 +244,7 @@ class TestFieldOverrideMongoPerformance(FieldOverridePerformanceTestCase): __test__ = True # TODO: decrease query count as part of REVO-28 - QUERY_COUNT = 35 + QUERY_COUNT = 34 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 = 35 + QUERY_COUNT = 34 TEST_DATA = { ('no_overrides', 1, True, False): (QUERY_COUNT, 3), diff --git a/lms/djangoapps/courseware/tests/test_course_info.py b/lms/djangoapps/courseware/tests/test_course_info.py index d8cb1f19e8..7b2504be48 100644 --- a/lms/djangoapps/courseware/tests/test_course_info.py +++ b/lms/djangoapps/courseware/tests/test_course_info.py @@ -434,8 +434,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, 44, 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, 44, 3) + self.fetch_course_info_with_queries(self.self_paced_course, 43, 3) diff --git a/lms/djangoapps/courseware/tests/test_views.py b/lms/djangoapps/courseware/tests/test_views.py index 02dc769a5b..907ec26420 100644 --- a/lms/djangoapps/courseware/tests/test_views.py +++ b/lms/djangoapps/courseware/tests/test_views.py @@ -224,8 +224,8 @@ class IndexQueryTestCase(ModuleStoreTestCase): NUM_PROBLEMS = 20 @ddt.data( - (ModuleStoreEnum.Type.mongo, 10, 181), - (ModuleStoreEnum.Type.split, 4, 175), + (ModuleStoreEnum.Type.mongo, 10, 180), + (ModuleStoreEnum.Type.split, 4, 174), ) @ddt.unpack def test_index_query_counts(self, store_type, expected_mongo_query_count, expected_mysql_query_count): @@ -1466,8 +1466,8 @@ class ProgressPageTests(ProgressPageBaseTests): self.assertContains(resp, u"Download Your Certificate") @ddt.data( - (True, 55), - (False, 54) + (True, 54), + (False, 53) ) @ddt.unpack def test_progress_queries_paced_courses(self, self_paced, query_count): @@ -1480,8 +1480,8 @@ class ProgressPageTests(ProgressPageBaseTests): @patch.dict(settings.FEATURES, {'ASSUME_ZERO_GRADE_IF_ABSENT_FOR_ALL_TESTS': False}) @ddt.data( - (False, 63, 43), - (True, 54, 38) + (False, 62, 42), + (True, 53, 37) ) @ddt.unpack def test_progress_queries(self, enable_waffle, initial, subsequent): diff --git a/lms/djangoapps/experiments/utils.py b/lms/djangoapps/experiments/utils.py index 42c0fbae35..3ad809affd 100644 --- a/lms/djangoapps/experiments/utils.py +++ b/lms/djangoapps/experiments/utils.py @@ -14,7 +14,7 @@ from django.utils.timezone import now from opaque_keys import InvalidKeyError from opaque_keys.edx.keys import CourseKey -from course_modes.models import format_course_price, get_cosmetic_verified_display_price +from course_modes.models import format_course_price, get_cosmetic_verified_display_price, CourseMode from courseware.access import has_staff_access_to_preview_mode from courseware.date_summary import verified_upgrade_deadline_link, verified_upgrade_link_is_valid from lms.djangoapps.commerce.utils import EcommerceService @@ -236,14 +236,12 @@ def get_dashboard_course_info(user, dashboard_enrollments): if DASHBOARD_INFO_FLAG.is_enabled(): # Get the enrollments here since the dashboard filters out those with completed entitlements user_enrollments = CourseEnrollment.objects.select_related('course').filter(user_id=user.id) - audit_enrollments = user_enrollments.filter(mode='audit') course_info = { str(dashboard_enrollment.course): get_base_experiment_metadata_context(dashboard_enrollment.course, user, dashboard_enrollment, - user_enrollments, - audit_enrollments) + user_enrollments) for dashboard_enrollment in dashboard_enrollments } return course_info @@ -261,8 +259,7 @@ def get_experiment_user_metadata_context(course, user): has_non_audit_enrollments = False try: user_enrollments = CourseEnrollment.objects.select_related('course').filter(user_id=user.id) - audit_enrollments = user_enrollments.filter(mode='audit') - has_non_audit_enrollments = (len(audit_enrollments) != len(user_enrollments)) + has_non_audit_enrollments = user_enrollments.exclude(mode__in=CourseMode.UPSELL_TO_VERIFIED_MODES).exists() # TODO: clean up as part of REVO-28 (END) enrollment = CourseEnrollment.objects.select_related( 'course' @@ -270,7 +267,7 @@ def get_experiment_user_metadata_context(course, user): except CourseEnrollment.DoesNotExist: pass # Not enrolled, use the default values - context = get_base_experiment_metadata_context(course, user, enrollment, user_enrollments, audit_enrollments) + context = get_base_experiment_metadata_context(course, user, enrollment, user_enrollments) has_staff_access = has_staff_access_to_preview_mode(user, course.id) forum_roles = [] if user.is_authenticated: @@ -292,14 +289,14 @@ def get_experiment_user_metadata_context(course, user): return context -def get_base_experiment_metadata_context(course, user, enrollment, user_enrollments, audit_enrollments): +def get_base_experiment_metadata_context(course, user, enrollment, user_enrollments): """ Return a context dictionary with the keys used by dashboard_metadata.html and user_metadata.html """ enrollment_mode = None enrollment_time = None # TODO: clean up as part of REVEM-199 (START) - program_key = get_program_context(course, user_enrollments, audit_enrollments) + program_key = get_program_context(course, user_enrollments) # TODO: clean up as part of REVEM-199 (END) if enrollment and enrollment.is_active: enrollment_mode = enrollment.mode @@ -336,11 +333,13 @@ def get_audit_access_expiration(user, course): # TODO: clean up as part of REVEM-199 (START) -def get_program_context(course, user_enrollments, audit_enrollments): +def get_program_context(course, user_enrollments): """ Return a context dictionary with program information. """ program_key = None + non_audit_enrollments = user_enrollments.exclude(mode__in=CourseMode.UPSELL_TO_VERIFIED_MODES) + if PROGRAM_INFO_FLAG.is_enabled(): programs = get_programs(course=course.id) if programs: @@ -362,7 +361,6 @@ def get_program_context(course, user_enrollments, audit_enrollments): # program has 3 courses (A, B and C), and the user previously purchased a certificate for A. # The user is enrolled in audit mode for B. The "left to purchase price" should be the price of # B+C. - non_audit_enrollments = [en for en in user_enrollments if en not in audit_enrollments] courses_left_to_purchase = get_unenrolled_courses(courses, non_audit_enrollments) if courses_left_to_purchase: has_courses_left_to_purchase = True 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 b64d26645a..6238833d7e 100644 --- a/openedx/features/course_experience/tests/views/test_course_home.py +++ b/openedx/features/course_experience/tests/views/test_course_home.py @@ -218,7 +218,7 @@ class TestCourseHomePage(CourseHomePageTestCase): # Fetch the view and verify the query counts # TODO: decrease query count as part of REVO-28 - with self.assertNumQueries(94, table_blacklist=QUERY_COUNT_TABLE_BLACKLIST): + with self.assertNumQueries(93, table_blacklist=QUERY_COUNT_TABLE_BLACKLIST): with check_mongo_calls(4): url = course_home_url(self.course) self.client.get(url) diff --git a/openedx/features/course_experience/tests/views/test_course_updates.py b/openedx/features/course_experience/tests/views/test_course_updates.py index 45d51a5448..3f628b2b51 100644 --- a/openedx/features/course_experience/tests/views/test_course_updates.py +++ b/openedx/features/course_experience/tests/views/test_course_updates.py @@ -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(55, table_blacklist=QUERY_COUNT_TABLE_BLACKLIST): + with self.assertNumQueries(54, table_blacklist=QUERY_COUNT_TABLE_BLACKLIST): with check_mongo_calls(4): url = course_updates_url(self.course) self.client.get(url)