Prefetch course modes used in has_access calls in course api
This commit is contained in:
@@ -62,7 +62,9 @@ def get_user_course_expiration_date(user, course):
|
||||
"""
|
||||
access_duration = MIN_DURATION
|
||||
|
||||
if not CourseMode.verified_mode_for_course(course.id, include_expired=True):
|
||||
verified_mode = CourseMode.verified_mode_for_course(course=course, include_expired=True)
|
||||
|
||||
if not verified_mode:
|
||||
return None
|
||||
|
||||
enrollment = CourseEnrollment.get_enrollment(user, course.id)
|
||||
|
||||
@@ -63,7 +63,7 @@ class CourseExpirationTestCase(ModuleStoreTestCase):
|
||||
def test_enrollment_mode(self):
|
||||
"""Tests that verified enrollments do not have an expiration"""
|
||||
CourseEnrollment.enroll(self.user, self.course.id, CourseMode.VERIFIED)
|
||||
result = get_user_course_expiration_date(self.user, self.course)
|
||||
result = get_user_course_expiration_date(self.user, CourseOverview.get_from_id(self.course.id))
|
||||
self.assertEqual(result, None)
|
||||
|
||||
@mock.patch("openedx.features.course_duration_limits.access.get_course_run_details")
|
||||
@@ -94,7 +94,10 @@ class CourseExpirationTestCase(ModuleStoreTestCase):
|
||||
self.course.self_paced = True
|
||||
mock_get_course_run_details.return_value = {'weeks_to_complete': weeks_to_complete}
|
||||
enrollment = CourseEnrollment.enroll(self.user, self.course.id, CourseMode.AUDIT)
|
||||
result = get_user_course_expiration_date(self.user, self.course)
|
||||
result = get_user_course_expiration_date(
|
||||
self.user,
|
||||
CourseOverview.get_from_id(self.course.id),
|
||||
)
|
||||
self.assertEqual(result, enrollment.created + access_duration)
|
||||
|
||||
@mock.patch("openedx.features.course_duration_limits.access.get_course_run_details")
|
||||
@@ -109,11 +112,17 @@ class CourseExpirationTestCase(ModuleStoreTestCase):
|
||||
start_date = now() - timedelta(weeks=10)
|
||||
past_course = CourseFactory(start=start_date)
|
||||
enrollment = CourseEnrollment.enroll(self.user, past_course.id, CourseMode.AUDIT)
|
||||
result = get_user_course_expiration_date(self.user, past_course)
|
||||
result = get_user_course_expiration_date(
|
||||
self.user,
|
||||
CourseOverview.get_from_id(past_course.id),
|
||||
)
|
||||
self.assertEqual(result, None)
|
||||
|
||||
add_course_mode(past_course, upgrade_deadline_expired=False)
|
||||
result = get_user_course_expiration_date(self.user, past_course)
|
||||
result = get_user_course_expiration_date(
|
||||
self.user,
|
||||
CourseOverview.get_from_id(past_course.id),
|
||||
)
|
||||
content_availability_date = enrollment.created
|
||||
self.assertEqual(result, content_availability_date + access_duration)
|
||||
|
||||
@@ -121,12 +130,18 @@ class CourseExpirationTestCase(ModuleStoreTestCase):
|
||||
start_date = now() + timedelta(weeks=10)
|
||||
future_course = CourseFactory(start=start_date)
|
||||
enrollment = CourseEnrollment.enroll(self.user, future_course.id, CourseMode.AUDIT)
|
||||
result = get_user_course_expiration_date(self.user, future_course)
|
||||
result = get_user_course_expiration_date(
|
||||
self.user,
|
||||
CourseOverview.get_from_id(future_course.id),
|
||||
)
|
||||
self.assertEqual(result, None)
|
||||
|
||||
add_course_mode(future_course, upgrade_deadline_expired=False)
|
||||
result = get_user_course_expiration_date(self.user, future_course)
|
||||
content_availability_date = start_date
|
||||
result = get_user_course_expiration_date(
|
||||
self.user,
|
||||
CourseOverview.get_from_id(future_course.id),
|
||||
)
|
||||
content_availability_date = start_date.replace(microsecond=0)
|
||||
self.assertEqual(result, content_availability_date + access_duration)
|
||||
|
||||
@mock.patch("openedx.features.course_duration_limits.access.get_course_run_details")
|
||||
@@ -141,7 +156,10 @@ class CourseExpirationTestCase(ModuleStoreTestCase):
|
||||
course = CourseFactory(start=start_date)
|
||||
enrollment = CourseEnrollment.enroll(self.user, course.id, CourseMode.AUDIT)
|
||||
add_course_mode(course, upgrade_deadline_expired=True)
|
||||
result = get_user_course_expiration_date(self.user, course)
|
||||
result = get_user_course_expiration_date(
|
||||
self.user,
|
||||
CourseOverview.get_from_id(course.id),
|
||||
)
|
||||
content_availability_date = enrollment.created
|
||||
self.assertEqual(result, content_availability_date + access_duration)
|
||||
|
||||
|
||||
@@ -205,7 +205,7 @@ class TestCourseHomePage(CourseHomePageTestCase):
|
||||
|
||||
# Fetch the view and verify the query counts
|
||||
# TODO: decrease query count as part of REVO-28
|
||||
with self.assertNumQueries(87, table_blacklist=QUERY_COUNT_TABLE_BLACKLIST):
|
||||
with self.assertNumQueries(89, table_blacklist=QUERY_COUNT_TABLE_BLACKLIST):
|
||||
with check_mongo_calls(4):
|
||||
url = course_home_url(self.course)
|
||||
self.client.get(url)
|
||||
|
||||
@@ -25,6 +25,7 @@ from lms.djangoapps.courseware.exceptions import CourseAccessRedirect
|
||||
from lms.djangoapps.courseware.views.views import CourseTabView
|
||||
from openedx.core.djangoapps.plugin_api.views import EdxFragmentView
|
||||
from openedx.core.djangoapps.util.maintenance_banner import add_maintenance_banner
|
||||
from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
|
||||
from openedx.features.course_experience.course_tools import CourseToolsPluginManager
|
||||
from openedx.features.course_duration_limits.access import generate_course_expired_fragment
|
||||
from student.models import CourseEnrollment
|
||||
@@ -153,7 +154,10 @@ class CourseHomeFragmentView(EdxFragmentView):
|
||||
course_sock_fragment = CourseSockFragmentView().render_to_fragment(request, course=course, **kwargs)
|
||||
has_visited_course, resume_course_url = self._get_resume_course_info(request, course_id)
|
||||
handouts_html = self._get_course_handouts(request, course)
|
||||
course_expiration_fragment = generate_course_expired_fragment(request.user, course)
|
||||
course_expiration_fragment = generate_course_expired_fragment(
|
||||
request.user,
|
||||
CourseOverview.get_from_id(course.id)
|
||||
)
|
||||
elif allow_public_outline or allow_public:
|
||||
outline_fragment = CourseOutlineFragmentView().render_to_fragment(
|
||||
request, course_id=course_id, user_is_enrolled=False, **kwargs
|
||||
|
||||
Reference in New Issue
Block a user