Merge pull request #15269 from edx/mjevtic/LEARNER-1366
LEARNER-1366 EcommerceService should be able to provide a link to the basket page that contains multiple products
This commit is contained in:
@@ -99,9 +99,9 @@ class ChooseModeView(View):
|
||||
if ecommerce_service.is_enabled(request.user):
|
||||
professional_mode = modes.get(CourseMode.NO_ID_PROFESSIONAL_MODE) or modes.get(CourseMode.PROFESSIONAL)
|
||||
if purchase_workflow == "single" and professional_mode.sku:
|
||||
redirect_url = ecommerce_service.checkout_page_url(professional_mode.sku)
|
||||
redirect_url = ecommerce_service.get_checkout_page_url(professional_mode.sku)
|
||||
if purchase_workflow == "bulk" and professional_mode.bulk_sku:
|
||||
redirect_url = ecommerce_service.checkout_page_url(professional_mode.bulk_sku)
|
||||
redirect_url = ecommerce_service.get_checkout_page_url(professional_mode.bulk_sku)
|
||||
return redirect(redirect_url)
|
||||
|
||||
# If there isn't a verified mode available, then there's nothing
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
"""Tests of commerce utilities."""
|
||||
from urllib import urlencode
|
||||
|
||||
import ddt
|
||||
from django.conf import settings
|
||||
from django.test import TestCase
|
||||
from django.test.client import RequestFactory
|
||||
@@ -9,7 +12,6 @@ from waffle.testutils import override_switch
|
||||
from commerce.models import CommerceConfiguration
|
||||
from commerce.utils import EcommerceService
|
||||
from openedx.core.lib.log_utils import audit_log
|
||||
from openedx.core.djangoapps.site_configuration.tests.test_util import with_site_configuration
|
||||
from student.tests.factories import UserFactory
|
||||
|
||||
|
||||
@@ -34,9 +36,9 @@ class AuditLogTests(TestCase):
|
||||
self.assertTrue(mock_log.info.called_with(message))
|
||||
|
||||
|
||||
@ddt.ddt
|
||||
class EcommerceServiceTests(TestCase):
|
||||
"""Tests for the EcommerceService helper class."""
|
||||
SKU = 'TESTSKU'
|
||||
|
||||
def setUp(self):
|
||||
self.request_factory = RequestFactory()
|
||||
@@ -91,8 +93,12 @@ class EcommerceServiceTests(TestCase):
|
||||
self.assertEqual(url, expected_url)
|
||||
|
||||
@override_settings(ECOMMERCE_PUBLIC_URL_ROOT='http://ecommerce_url')
|
||||
def test_checkout_page_url(self):
|
||||
@ddt.data(['TESTSKU'], ['TESTSKU1', 'TESTSKU2', 'TESTSKU3'])
|
||||
def test_get_checkout_page_url(self, skus):
|
||||
""" Verify the checkout page URL is properly constructed and returned. """
|
||||
url = EcommerceService().checkout_page_url(self.SKU)
|
||||
expected_url = 'http://ecommerce_url/test_basket/?sku={}'.format(self.SKU)
|
||||
url = EcommerceService().get_checkout_page_url(*skus)
|
||||
expected_url = '{root}/test_basket/?{skus}'.format(
|
||||
root=settings.ECOMMERCE_PUBLIC_URL_ROOT,
|
||||
skus=urlencode({'sku': skus}, doseq=True),
|
||||
)
|
||||
self.assertEqual(url, expected_url)
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
"""Utilities to assist with commerce tasks."""
|
||||
from urllib import urlencode
|
||||
from urlparse import urljoin
|
||||
|
||||
from django.conf import settings
|
||||
@@ -76,10 +77,19 @@ class EcommerceService(object):
|
||||
"""
|
||||
return self.get_absolute_ecommerce_url(self.config.single_course_checkout_page)
|
||||
|
||||
def checkout_page_url(self, sku):
|
||||
""" Construct the URL to the ecommerce checkout page and include a product.
|
||||
def get_checkout_page_url(self, *skus):
|
||||
""" Construct the URL to the ecommerce checkout page and include products.
|
||||
|
||||
Args:
|
||||
skus (list): List of SKUs associated with products to be added to basket
|
||||
|
||||
Returns:
|
||||
Absolute path to the ecommerce checkout page showing basket that contains specified products.
|
||||
|
||||
Example:
|
||||
http://localhost:8002/basket/single_item/?sku=5H3HG5
|
||||
http://localhost:8002/basket/single_item/?sku=5H3HG5&sku=57FHHD
|
||||
"""
|
||||
return "{}?sku={}".format(self.get_absolute_ecommerce_url(self.config.single_course_checkout_page), sku)
|
||||
return '{checkout_page_path}?{skus}'.format(
|
||||
checkout_page_path=self.get_absolute_ecommerce_url(self.config.single_course_checkout_page),
|
||||
skus=urlencode({'sku': skus}, doseq=True),
|
||||
)
|
||||
|
||||
@@ -207,7 +207,7 @@ class VerifiedUpgradeDeadlineDate(DateSummary):
|
||||
course_mode = CourseMode.objects.get(
|
||||
course_id=self.course_id, mode_slug=CourseMode.VERIFIED
|
||||
)
|
||||
return ecommerce_service.checkout_page_url(course_mode.sku)
|
||||
return ecommerce_service.get_checkout_page_url(course_mode.sku)
|
||||
return reverse('verify_student_upgrade_and_verify', args=(self.course_id,))
|
||||
|
||||
@property
|
||||
|
||||
@@ -732,9 +732,9 @@ def course_about(request, course_id):
|
||||
professional_mode = modes.get(CourseMode.PROFESSIONAL, '') or \
|
||||
modes.get(CourseMode.NO_ID_PROFESSIONAL_MODE, '')
|
||||
if professional_mode.sku:
|
||||
ecommerce_checkout_link = ecomm_service.checkout_page_url(professional_mode.sku)
|
||||
ecommerce_checkout_link = ecomm_service.get_checkout_page_url(professional_mode.sku)
|
||||
if professional_mode.bulk_sku:
|
||||
ecommerce_bulk_checkout_link = ecomm_service.checkout_page_url(professional_mode.bulk_sku)
|
||||
ecommerce_bulk_checkout_link = ecomm_service.get_checkout_page_url(professional_mode.bulk_sku)
|
||||
|
||||
registration_price, course_price = get_course_prices(course)
|
||||
|
||||
|
||||
@@ -505,7 +505,7 @@ class PayAndVerifyView(View):
|
||||
# is enabled redirect him to the ecommerce checkout page.
|
||||
ecommerce_service = EcommerceService()
|
||||
if ecommerce_service.is_enabled(user):
|
||||
url = ecommerce_service.checkout_page_url(sku)
|
||||
url = ecommerce_service.get_checkout_page_url(sku)
|
||||
|
||||
# Redirect if necessary, otherwise implicitly return None
|
||||
if url is not None:
|
||||
|
||||
@@ -432,7 +432,7 @@ class ProgramDataExtender(object):
|
||||
ecommerce = EcommerceService()
|
||||
sku = getattr(required_mode, 'sku', None)
|
||||
if ecommerce.is_enabled(self.user) and sku:
|
||||
run_mode['upgrade_url'] = ecommerce.checkout_page_url(required_mode.sku)
|
||||
run_mode['upgrade_url'] = ecommerce.get_checkout_page_url(required_mode.sku)
|
||||
else:
|
||||
run_mode['upgrade_url'] = None
|
||||
else:
|
||||
|
||||
Reference in New Issue
Block a user