Commit 88aa4a90 by Vedran Karačić

Merge pull request #11852 from edx/vkaracic/SOL-1712

Change EcommerceService's is_enabled to accept User instead of request
parents 5deb07d9 3c8ae7c3
...@@ -89,7 +89,7 @@ class ChooseModeView(View): ...@@ -89,7 +89,7 @@ class ChooseModeView(View):
has_enrolled_professional = (CourseMode.is_professional_slug(enrollment_mode) and is_active) has_enrolled_professional = (CourseMode.is_professional_slug(enrollment_mode) and is_active)
if CourseMode.has_professional_mode(modes) and not has_enrolled_professional: if CourseMode.has_professional_mode(modes) and not has_enrolled_professional:
redirect_url = reverse('verify_student_start_flow', kwargs={'course_id': unicode(course_key)}) redirect_url = reverse('verify_student_start_flow', kwargs={'course_id': unicode(course_key)})
if ecommerce_service.is_enabled(request): if ecommerce_service.is_enabled(request.user):
professional_mode = modes.get(CourseMode.NO_ID_PROFESSIONAL_MODE) or modes.get(CourseMode.PROFESSIONAL) professional_mode = modes.get(CourseMode.NO_ID_PROFESSIONAL_MODE) or modes.get(CourseMode.PROFESSIONAL)
if professional_mode.sku: if professional_mode.sku:
redirect_url = ecommerce_service.checkout_page_url(professional_mode.sku) redirect_url = ecommerce_service.checkout_page_url(professional_mode.sku)
...@@ -158,7 +158,7 @@ class ChooseModeView(View): ...@@ -158,7 +158,7 @@ class ChooseModeView(View):
context["verified_description"] = verified_mode.description context["verified_description"] = verified_mode.description
if verified_mode.sku: if verified_mode.sku:
context["use_ecommerce_payment_flow"] = ecommerce_service.is_enabled(request) context["use_ecommerce_payment_flow"] = ecommerce_service.is_enabled(request.user)
context["ecommerce_payment_page"] = ecommerce_service.payment_page_url() context["ecommerce_payment_page"] = ecommerce_service.payment_page_url()
context["sku"] = verified_mode.sku context["sku"] = verified_mode.sku
......
...@@ -743,7 +743,7 @@ def dashboard(request): ...@@ -743,7 +743,7 @@ def dashboard(request):
} }
ecommerce_service = EcommerceService() ecommerce_service = EcommerceService()
if ecommerce_service.is_enabled(request): if ecommerce_service.is_enabled(request.user):
context.update({ context.update({
'use_ecommerce_payment_flow': True, 'use_ecommerce_payment_flow': True,
'ecommerce_payment_page': ecommerce_service.payment_page_url(), 'ecommerce_payment_page': ecommerce_service.payment_page_url(),
......
...@@ -38,26 +38,25 @@ class EcommerceServiceTests(TestCase): ...@@ -38,26 +38,25 @@ class EcommerceServiceTests(TestCase):
self.request_factory = RequestFactory() self.request_factory = RequestFactory()
self.user = UserFactory.create() self.user = UserFactory.create()
self.request = self.request_factory.get("foo") self.request = self.request_factory.get("foo")
self.request.user = self.user
update_commerce_config(enabled=True) update_commerce_config(enabled=True)
super(EcommerceServiceTests, self).setUp() super(EcommerceServiceTests, self).setUp()
def test_is_enabled(self): def test_is_enabled(self):
"""Verify that is_enabled() returns True when ecomm checkout is enabled. """ """Verify that is_enabled() returns True when ecomm checkout is enabled. """
is_enabled = EcommerceService().is_enabled(self.request) is_enabled = EcommerceService().is_enabled(self.user)
self.assertTrue(is_enabled) self.assertTrue(is_enabled)
config = CommerceConfiguration.current() config = CommerceConfiguration.current()
config.checkout_on_ecommerce_service = False config.checkout_on_ecommerce_service = False
config.save() config.save()
is_not_enabled = EcommerceService().is_enabled(self.request) is_not_enabled = EcommerceService().is_enabled(self.user)
self.assertFalse(is_not_enabled) self.assertFalse(is_not_enabled)
@patch('openedx.core.djangoapps.theming.helpers.is_request_in_themed_site') @patch('openedx.core.djangoapps.theming.helpers.is_request_in_themed_site')
def test_is_enabled_for_microsites(self, is_microsite): def test_is_enabled_for_microsites(self, is_microsite):
"""Verify that is_enabled() returns False if used for a microsite.""" """Verify that is_enabled() returns False if used for a microsite."""
is_microsite.return_value = True is_microsite.return_value = True
is_not_enabled = EcommerceService().is_enabled(self.request) is_not_enabled = EcommerceService().is_enabled(self.user)
self.assertFalse(is_not_enabled) self.assertFalse(is_not_enabled)
@override_settings(ECOMMERCE_PUBLIC_URL_ROOT='http://ecommerce_url') @override_settings(ECOMMERCE_PUBLIC_URL_ROOT='http://ecommerce_url')
......
...@@ -44,9 +44,9 @@ class EcommerceService(object): ...@@ -44,9 +44,9 @@ class EcommerceService(object):
def __init__(self): def __init__(self):
self.config = CommerceConfiguration.current() self.config = CommerceConfiguration.current()
def is_enabled(self, request): def is_enabled(self, user):
""" Check if the user is activated, if the service is enabled and that the site is not a microsite. """ """ 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 return (user.is_active and self.config.checkout_on_ecommerce_service and not
helpers.is_request_in_themed_site()) helpers.is_request_in_themed_site())
def payment_page_url(self): def payment_page_url(self):
......
...@@ -14,6 +14,7 @@ from lazy import lazy ...@@ -14,6 +14,7 @@ from lazy import lazy
import pytz import pytz
from course_modes.models import CourseMode from course_modes.models import CourseMode
from lms.djangoapps.commerce.utils import EcommerceService
from lms.djangoapps.verify_student.models import VerificationDeadline, SoftwareSecurePhotoVerification from lms.djangoapps.verify_student.models import VerificationDeadline, SoftwareSecurePhotoVerification
from student.models import CourseEnrollment from student.models import CourseEnrollment
...@@ -204,6 +205,12 @@ class VerifiedUpgradeDeadlineDate(DateSummary): ...@@ -204,6 +205,12 @@ class VerifiedUpgradeDeadlineDate(DateSummary):
@property @property
def link(self): def link(self):
ecommerce_service = EcommerceService()
if ecommerce_service.is_enabled(self.user):
course_mode = CourseMode.objects.get(
course_id=self.course.id, mode_slug=CourseMode.VERIFIED
)
return ecommerce_service.checkout_page_url(course_mode.sku)
return reverse('verify_student_upgrade_and_verify', args=(self.course.id,)) return reverse('verify_student_upgrade_and_verify', args=(self.course.id,))
@lazy @lazy
......
...@@ -8,6 +8,7 @@ import freezegun ...@@ -8,6 +8,7 @@ import freezegun
from nose.plugins.attrib import attr from nose.plugins.attrib import attr
import pytz import pytz
from commerce.models import CommerceConfiguration
from course_modes.tests.factories import CourseModeFactory from course_modes.tests.factories import CourseModeFactory
from course_modes.models import CourseMode from course_modes.models import CourseMode
from courseware.courses import _get_course_date_summary_blocks from courseware.courses import _get_course_date_summary_blocks
...@@ -44,6 +45,7 @@ class CourseDateSummaryTest(SharedModuleStoreTestCase): ...@@ -44,6 +45,7 @@ class CourseDateSummaryTest(SharedModuleStoreTestCase):
enrollment_mode=CourseMode.VERIFIED, enrollment_mode=CourseMode.VERIFIED,
days_till_verification_deadline=14, days_till_verification_deadline=14,
verification_status=None, verification_status=None,
sku=None
): ):
"""Set up the course and user for this test.""" """Set up the course and user for this test."""
now = datetime.now(pytz.UTC) now = datetime.now(pytz.UTC)
...@@ -61,7 +63,8 @@ class CourseDateSummaryTest(SharedModuleStoreTestCase): ...@@ -61,7 +63,8 @@ class CourseDateSummaryTest(SharedModuleStoreTestCase):
CourseModeFactory.create( CourseModeFactory.create(
course_id=self.course.id, course_id=self.course.id,
mode_slug=enrollment_mode, mode_slug=enrollment_mode,
expiration_datetime=now + timedelta(days=days_till_upgrade_deadline) expiration_datetime=now + timedelta(days=days_till_upgrade_deadline),
sku=sku
) )
CourseEnrollmentFactory.create(course_id=self.course.id, user=self.user, mode=enrollment_mode) CourseEnrollmentFactory.create(course_id=self.course.id, user=self.user, mode=enrollment_mode)
else: else:
...@@ -200,6 +203,18 @@ class CourseDateSummaryTest(SharedModuleStoreTestCase): ...@@ -200,6 +203,18 @@ class CourseDateSummaryTest(SharedModuleStoreTestCase):
block = VerifiedUpgradeDeadlineDate(self.course, self.user) block = VerifiedUpgradeDeadlineDate(self.course, self.user)
self.assertIsNone(block.date) self.assertIsNone(block.date)
def test_ecommerce_checkout_redirect(self):
"""Verify the block link redirects to ecommerce checkout if it's enabled."""
sku = 'TESTSKU'
checkout_page = '/test_basket/'
CommerceConfiguration.objects.create(
checkout_on_ecommerce_service=True,
single_course_checkout_page=checkout_page
)
self.setup_course_and_user(sku=sku)
block = VerifiedUpgradeDeadlineDate(self.course, self.user)
self.assertEqual(block.link, '{}?sku={}'.format(checkout_page, sku))
## VerificationDeadlineDate ## VerificationDeadlineDate
def test_no_verification_deadline(self): def test_no_verification_deadline(self):
......
...@@ -278,8 +278,7 @@ class ViewsTestCase(ModuleStoreTestCase): ...@@ -278,8 +278,7 @@ class ViewsTestCase(ModuleStoreTestCase):
self.assert_enrollment_link_present(is_anonymous=is_anonymous) self.assert_enrollment_link_present(is_anonymous=is_anonymous)
else: else:
request = self.request_factory.get("foo") request = self.request_factory.get("foo")
request.user = AnonymousUser() self.assertEqual(EcommerceService().is_enabled(AnonymousUser()), False)
self.assertEqual(EcommerceService().is_enabled(request), False)
@ddt.data(True, False) @ddt.data(True, False)
@unittest.skipUnless(settings.FEATURES.get('ENABLE_SHOPPING_CART'), 'Shopping Cart not enabled in settings') @unittest.skipUnless(settings.FEATURES.get('ENABLE_SHOPPING_CART'), 'Shopping Cart not enabled in settings')
...@@ -289,8 +288,7 @@ class ViewsTestCase(ModuleStoreTestCase): ...@@ -289,8 +288,7 @@ class ViewsTestCase(ModuleStoreTestCase):
self.assert_enrollment_link_present(is_anonymous=is_anonymous, _id=True) self.assert_enrollment_link_present(is_anonymous=is_anonymous, _id=True)
else: else:
request = self.request_factory.get("foo") request = self.request_factory.get("foo")
request.user = AnonymousUser() self.assertEqual(EcommerceService().is_enabled(AnonymousUser()), False)
self.assertEqual(EcommerceService().is_enabled(request), False)
def test_user_groups(self): def test_user_groups(self):
# depreciated function # depreciated function
......
...@@ -909,7 +909,7 @@ def course_about(request, course_id): ...@@ -909,7 +909,7 @@ def course_about(request, course_id):
ecommerce_checkout_link = '' ecommerce_checkout_link = ''
professional_mode = '' professional_mode = ''
ecomm_service = EcommerceService() ecomm_service = EcommerceService()
if ecomm_service.is_enabled(request) and ( if ecomm_service.is_enabled(request.user) and (
CourseMode.PROFESSIONAL in modes or CourseMode.NO_ID_PROFESSIONAL_MODE in modes CourseMode.PROFESSIONAL in modes or CourseMode.NO_ID_PROFESSIONAL_MODE in modes
): ):
professional_mode = modes.get(CourseMode.PROFESSIONAL, '') or \ professional_mode = modes.get(CourseMode.PROFESSIONAL, '') or \
...@@ -947,7 +947,7 @@ def course_about(request, course_id): ...@@ -947,7 +947,7 @@ def course_about(request, course_id):
'is_cosmetic_price_enabled': settings.FEATURES.get('ENABLE_COSMETIC_DISPLAY_PRICE'), 'is_cosmetic_price_enabled': settings.FEATURES.get('ENABLE_COSMETIC_DISPLAY_PRICE'),
'course_price': course_price, 'course_price': course_price,
'in_cart': in_cart, 'in_cart': in_cart,
'ecommerce_checkout': ecomm_service.is_enabled(request), 'ecommerce_checkout': ecomm_service.is_enabled(request.user),
'ecommerce_checkout_link': ecommerce_checkout_link, 'ecommerce_checkout_link': ecommerce_checkout_link,
'professional_mode': professional_mode, 'professional_mode': professional_mode,
'reg_then_add_to_cart_link': reg_then_add_to_cart_link, 'reg_then_add_to_cart_link': reg_then_add_to_cart_link,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment