diff --git a/openedx/features/content_type_gating/partitions.py b/openedx/features/content_type_gating/partitions.py index c6ce2d7bdf2f7d090e3c49d3b2afcaa3cb550c98..5cb91df7949aa0bd0a7b131de6b98f4d63be71f1 100644 --- a/openedx/features/content_type_gating/partitions.py +++ b/openedx/features/content_type_gating/partitions.py @@ -7,9 +7,11 @@ of audit learners. from __future__ import absolute_import +import datetime import logging import crum +import pytz import six from django.template.loader import render_to_string from django.utils.translation import ugettext_lazy as _ @@ -79,13 +81,18 @@ class ContentTypeGatingPartition(UserPartition): def access_denied_fragment(self, block, user, user_group, allowed_groups): course_key = self._get_course_key_from_course_block(block) course = CourseOverview.get_from_id(course_key) - modes = CourseMode.modes_for_course_dict(course=course) + modes = CourseMode.modes_for_course_dict(course=course, include_expired=True) verified_mode = modes.get(CourseMode.VERIFIED) if (verified_mode is None or user_group == FULL_ACCESS or user_group in allowed_groups): return None - ecommerce_checkout_link = self._get_checkout_link(user, verified_mode.sku) + expiration_datetime = verified_mode.expiration_datetime + if expiration_datetime and expiration_datetime < datetime.datetime.now(pytz.UTC): + ecommerce_checkout_link = None + else: + ecommerce_checkout_link = self._get_checkout_link(user, verified_mode.sku) + request = crum.get_current_request() upgrade_price, _ = format_strikeout_price(user, course) diff --git a/openedx/features/content_type_gating/tests/test_access.py b/openedx/features/content_type_gating/tests/test_access.py index afcc7f328a4b5e8fe6ab2103350d2d837a74d93a..79144fde808f40d6be4fb370bba530a0280312ad 100644 --- a/openedx/features/content_type_gating/tests/test_access.py +++ b/openedx/features/content_type_gating/tests/test_access.py @@ -334,13 +334,9 @@ class TestProblemTypeAccess(SharedModuleStoreTestCase): cls.courses['expired_upgrade_deadline'] = cls._create_course( run='expired_upgrade_deadline_run_1', display_name='Expired Upgrade Deadline Course Title', - modes=['audit'], - component_types=['problem', 'html'] - ) - CourseModeFactory.create( - course_id=cls.courses['expired_upgrade_deadline']['course'].scope_ids.usage_id.course_key, - mode_slug='verified', - expiration_datetime=datetime(2018, 1, 1) + modes=['audit', 'verified'], + component_types=['problem', 'html'], + expired_upgrade_deadline=True ) def setUp(self): @@ -382,7 +378,7 @@ class TestProblemTypeAccess(SharedModuleStoreTestCase): ContentTypeGatingConfig.objects.create(enabled=True, enabled_as_of=datetime(2018, 1, 1)) @classmethod - def _create_course(cls, run, display_name, modes, component_types): + def _create_course(cls, run, display_name, modes, component_types, expired_upgrade_deadline=False): """ Helper method to create a course Arguments: @@ -403,7 +399,10 @@ class TestProblemTypeAccess(SharedModuleStoreTestCase): course = CourseFactory.create(run=run, display_name=display_name, start=start_date) for mode in modes: - CourseModeFactory.create(course_id=course.id, mode_slug=mode) + if expired_upgrade_deadline and mode == 'verified': + CourseModeFactory.create(course_id=course.id, mode_slug=mode, expiration_datetime=datetime(2020, 1, 1)) + else: + CourseModeFactory.create(course_id=course.id, mode_slug=mode) with cls.store.bulk_operations(course.id): blocks_dict = {} @@ -531,9 +530,9 @@ class TestProblemTypeAccess(SharedModuleStoreTestCase): the user will continue to see gated content, but the upgrade messaging will be removed. """ _assert_block_is_gated( - block=self.courses['default']['blocks']['problem'], + block=self.courses['expired_upgrade_deadline']['blocks']['problem'], user=self.users['audit'], - course=self.courses['default']['course'], + course=self.courses['expired_upgrade_deadline']['course'], is_gated=True, request_factory=self.factory, has_upgrade_link=False