diff --git a/common/djangoapps/course_modes/views.py b/common/djangoapps/course_modes/views.py index eb23262f2150d6449e482f35b0c35c5fec23c0b9..d40bb7d41c1c04da7fa84bab68b02a1c80e8bd9e 100644 --- a/common/djangoapps/course_modes/views.py +++ b/common/djangoapps/course_modes/views.py @@ -151,7 +151,7 @@ class ChooseModeView(View): if verified_mode.sku: ecommerce_service = EcommerceService() - context["use_ecommerce_payment_flow"] = ecommerce_service.is_enabled() + context["use_ecommerce_payment_flow"] = ecommerce_service.is_enabled(request) context["ecommerce_payment_page"] = ecommerce_service.payment_page_url() context["sku"] = verified_mode.sku diff --git a/common/djangoapps/student/views.py b/common/djangoapps/student/views.py index 95506455b5ba8e1a6bdd602c476a66cd7e9574d1..21097d637784274d1886176deb4cbf43bd53dfe0 100644 --- a/common/djangoapps/student/views.py +++ b/common/djangoapps/student/views.py @@ -739,7 +739,7 @@ def dashboard(request): } ecommerce_service = EcommerceService() - if ecommerce_service.is_enabled(): + if ecommerce_service.is_enabled(request): context.update({ 'use_ecommerce_payment_flow': True, 'ecommerce_payment_page': ecommerce_service.payment_page_url(), diff --git a/lms/djangoapps/commerce/tests/test_utils.py b/lms/djangoapps/commerce/tests/test_utils.py index 90c446982e1a9b0f6a579e0df2bc4a6eefc084ee..8f343014c6fcb6eddd098d0e6c34b1b25e84b009 100644 --- a/lms/djangoapps/commerce/tests/test_utils.py +++ b/lms/djangoapps/commerce/tests/test_utils.py @@ -5,6 +5,8 @@ from mock import patch from commerce.utils import audit_log, EcommerceService from commerce.models import CommerceConfiguration +from django.test.client import RequestFactory +from student.tests.factories import UserFactory class AuditLogTests(TestCase): @@ -25,6 +27,10 @@ class EcommerceServiceTests(TestCase): SKU = 'TESTSKU' def setUp(self): + self.request_factory = RequestFactory() + self.user = UserFactory.create() + self.request = self.request_factory.get("foo") + self.request.user = self.user CommerceConfiguration.objects.create( checkout_on_ecommerce_service=True, single_course_checkout_page='/test_basket/' @@ -33,20 +39,20 @@ class EcommerceServiceTests(TestCase): def test_is_enabled(self): """Verify that is_enabled() returns True when ecomm checkout is enabled. """ - is_enabled = EcommerceService().is_enabled() + is_enabled = EcommerceService().is_enabled(self.request) self.assertTrue(is_enabled) config = CommerceConfiguration.current() config.checkout_on_ecommerce_service = False config.save() - is_not_enabled = EcommerceService().is_enabled() + is_not_enabled = EcommerceService().is_enabled(self.request) self.assertFalse(is_not_enabled) @patch('openedx.core.djangoapps.theming.helpers.is_request_in_themed_site') def test_is_enabled_for_microsites(self, is_microsite): """Verify that is_enabled() returns False if used for a microsite.""" is_microsite.return_value = True - is_not_enabled = EcommerceService().is_enabled() + is_not_enabled = EcommerceService().is_enabled(self.request) self.assertFalse(is_not_enabled) @override_settings(ECOMMERCE_PUBLIC_URL_ROOT='http://ecommerce_url') diff --git a/lms/djangoapps/commerce/utils.py b/lms/djangoapps/commerce/utils.py index 00ff3bb99f4086cee2b2e57892b827bfd7d8bac5..e07ec1d9b7a6f83774d9afce3dda0343d55e0e19 100644 --- a/lms/djangoapps/commerce/utils.py +++ b/lms/djangoapps/commerce/utils.py @@ -44,9 +44,10 @@ class EcommerceService(object): def __init__(self): self.config = CommerceConfiguration.current() - def is_enabled(self): - """ Check if the service is enabled and that the site is not a microsite. """ - return self.config.checkout_on_ecommerce_service and not helpers.is_request_in_themed_site() + def is_enabled(self, request): + """ Check if the user is activated, if the service is enabled and that the site is not a microsite. """ + return (request.user.is_active and self.config.checkout_on_ecommerce_service and not + helpers.is_request_in_themed_site()) def payment_page_url(self): """ Return the URL for the checkout page. diff --git a/lms/djangoapps/courseware/tests/test_views.py b/lms/djangoapps/courseware/tests/test_views.py index 889fafa4f66ca18a8d8831afe5ff91d57387ee47..e26f4470a166b1f538846a95ea18264301aa06d1 100644 --- a/lms/djangoapps/courseware/tests/test_views.py +++ b/lms/djangoapps/courseware/tests/test_views.py @@ -39,6 +39,7 @@ from courseware.testutils import RenderXBlockTestMixin from courseware.tests.factories import StudentModuleFactory from courseware.user_state_client import DjangoXBlockUserStateClient from edxmako.tests import mako_middleware_process_request +from lms.djangoapps.commerce.utils import EcommerceService # pylint: disable=import-error from milestones.tests.utils import MilestonesTestCaseMixin from openedx.core.djangoapps.self_paced.models import SelfPacedConfiguration from openedx.core.lib.gating import api as gating_api @@ -271,13 +272,23 @@ class ViewsTestCase(ModuleStoreTestCase): @ddt.data(True, False) def test_ecommerce_checkout(self, is_anonymous): - self.assert_enrollment_link_present(is_anonymous=is_anonymous) + if not is_anonymous: + self.assert_enrollment_link_present(is_anonymous=is_anonymous) + else: + request = self.request_factory.get("foo") + request.user = AnonymousUser() + self.assertEqual(EcommerceService().is_enabled(request), False) @ddt.data(True, False) @unittest.skipUnless(settings.FEATURES.get('ENABLE_SHOPPING_CART'), 'Shopping Cart not enabled in settings') @patch.dict(settings.FEATURES, {'ENABLE_PAID_COURSE_REGISTRATION': True}) def test_ecommerce_checkout_shopping_cart_enabled(self, is_anonymous): - self.assert_enrollment_link_present(is_anonymous=is_anonymous, _id=True) + if not is_anonymous: + self.assert_enrollment_link_present(is_anonymous=is_anonymous, _id=True) + else: + request = self.request_factory.get("foo") + request.user = AnonymousUser() + self.assertEqual(EcommerceService().is_enabled(request), False) def test_user_groups(self): # depreciated function diff --git a/lms/djangoapps/courseware/views.py b/lms/djangoapps/courseware/views.py index 60e16b873e512e45ee47b792dba2b47fb8397e52..73a43345c10f6dd0e8abcde9cf71a804931e5d77 100644 --- a/lms/djangoapps/courseware/views.py +++ b/lms/djangoapps/courseware/views.py @@ -906,7 +906,7 @@ def course_about(request, course_id): ecommerce_checkout_link = '' professional_mode = '' ecomm_service = EcommerceService() - if ecomm_service.is_enabled() and ( + if ecomm_service.is_enabled(request) and ( CourseMode.PROFESSIONAL in modes or CourseMode.NO_ID_PROFESSIONAL_MODE in modes ): professional_mode = modes.get(CourseMode.PROFESSIONAL, '') or \ @@ -944,7 +944,7 @@ def course_about(request, course_id): 'is_cosmetic_price_enabled': settings.FEATURES.get('ENABLE_COSMETIC_DISPLAY_PRICE'), 'course_price': course_price, 'in_cart': in_cart, - 'ecommerce_checkout': ecomm_service.is_enabled(), + 'ecommerce_checkout': ecomm_service.is_enabled(request), 'ecommerce_checkout_link': ecommerce_checkout_link, 'professional_mode': professional_mode, 'reg_then_add_to_cart_link': reg_then_add_to_cart_link,