diff --git a/lms/djangoapps/commerce/migrations/0006_remove_commerceconfiguration_receipt_page.py b/lms/djangoapps/commerce/migrations/0006_remove_commerceconfiguration_receipt_page.py deleted file mode 100644 index 6a3c4a2527..0000000000 --- a/lms/djangoapps/commerce/migrations/0006_remove_commerceconfiguration_receipt_page.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('commerce', '0005_commerceconfiguration_enable_automatic_refund_approval'), - ] - - operations = [ - migrations.RemoveField( - model_name='commerceconfiguration', - name='receipt_page', - ), - ] diff --git a/lms/djangoapps/commerce/models.py b/lms/djangoapps/commerce/models.py index 52f682702a..5cf535ca00 100644 --- a/lms/djangoapps/commerce/models.py +++ b/lms/djangoapps/commerce/models.py @@ -15,6 +15,7 @@ class CommerceConfiguration(ConfigurationModel): API_NAME = 'commerce' CACHE_KEY = 'commerce.api.data' + DEFAULT_RECEIPT_PAGE_URL = '/commerce/checkout/receipt/?orderNum=' checkout_on_ecommerce_service = models.BooleanField( default=False, @@ -33,6 +34,11 @@ class CommerceConfiguration(ConfigurationModel): 'Specified in seconds. Enable caching by setting this to a value greater than 0.' ) ) + receipt_page = models.CharField( + max_length=255, + default=DEFAULT_RECEIPT_PAGE_URL, + help_text=_('Path to order receipt page.') + ) enable_automatic_refund_approval = models.BooleanField( default=True, help_text=_('Automatically approve valid refund requests, without manual processing') diff --git a/lms/djangoapps/commerce/tests/test_utils.py b/lms/djangoapps/commerce/tests/test_utils.py index f2c646ae82..f1962141ba 100644 --- a/lms/djangoapps/commerce/tests/test_utils.py +++ b/lms/djangoapps/commerce/tests/test_utils.py @@ -11,11 +11,16 @@ 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 +TEST_SITE_CONFIGURATION = { + 'ECOMMERCE_RECEIPT_PAGE_URL': '/checkout/receipt/?order_number=' +} -def update_commerce_config(enabled=False, checkout_page='/test_basket/'): + +def update_commerce_config(enabled=False, checkout_page='/test_basket/', receipt_page='/checkout/receipt/'): """ Enable / Disable CommerceConfiguration model """ CommerceConfiguration.objects.create( checkout_on_ecommerce_service=enabled, + receipt_page=receipt_page, single_course_checkout_page=checkout_page, ) @@ -78,7 +83,7 @@ class EcommerceServiceTests(TestCase): """Verify that the proper Receipt page URL is returned.""" order_number = 'ORDER1' url = EcommerceService().get_receipt_page_url(order_number) - expected_url = 'http://ecommerce_url/checkout/receipt/?order_number={}'.format(order_number) + expected_url = '/checkout/receipt/{}'.format(order_number) self.assertEqual(url, expected_url) @override_settings(ECOMMERCE_PUBLIC_URL_ROOT='http://ecommerce_url') @@ -87,3 +92,19 @@ class EcommerceServiceTests(TestCase): url = EcommerceService().checkout_page_url(self.SKU) expected_url = 'http://ecommerce_url/test_basket/?sku={}'.format(self.SKU) self.assertEqual(url, expected_url) + + @override_settings(ECOMMERCE_PUBLIC_URL_ROOT='http://ecommerce_url') + @with_site_configuration(configuration=TEST_SITE_CONFIGURATION) + def test_get_receipt_page_url_with_site_configuration(self): + order_number = 'ORDER1' + config = CommerceConfiguration.current() + config.use_ecommerce_receipt_page = True + config.save() + + receipt_page_url = EcommerceService().get_receipt_page_url(order_number) + expected_url = '{ecommerce_root}{receipt_page_url}{order_number}'.format( + ecommerce_root=settings.ECOMMERCE_PUBLIC_URL_ROOT, + order_number=order_number, + receipt_page_url=TEST_SITE_CONFIGURATION['ECOMMERCE_RECEIPT_PAGE_URL'] + ) + self.assertEqual(receipt_page_url, expected_url) diff --git a/lms/djangoapps/commerce/utils.py b/lms/djangoapps/commerce/utils.py index ee85dc8ff8..114e307c96 100644 --- a/lms/djangoapps/commerce/utils.py +++ b/lms/djangoapps/commerce/utils.py @@ -6,8 +6,6 @@ from django.conf import settings from commerce.models import CommerceConfiguration from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers -RECEIPT_PAGE_URL = '/checkout/receipt/?order_number=' - class EcommerceService(object): """ Helper class for ecommerce service integration. """ @@ -40,8 +38,11 @@ class EcommerceService(object): Returns: Receipt page for the specified Order. """ + ecommerce_receipt_page_url = configuration_helpers.get_value('ECOMMERCE_RECEIPT_PAGE_URL') - return self.get_absolute_ecommerce_url(RECEIPT_PAGE_URL + order_number) + if ecommerce_receipt_page_url: + return self.get_absolute_ecommerce_url(ecommerce_receipt_page_url + order_number) + return self.config.receipt_page + order_number def is_enabled(self, user): """ diff --git a/lms/djangoapps/student_account/test/test_views.py b/lms/djangoapps/student_account/test/test_views.py index 8463388ee3..6f9e3c5344 100644 --- a/lms/djangoapps/student_account/test/test_views.py +++ b/lms/djangoapps/student_account/test/test_views.py @@ -645,7 +645,7 @@ class AccountSettingsViewTest(ThirdPartyAuthTestMixin, TestCase, ProgramsApiConf 'number': order['number'], 'price': order['total_excl_tax'], 'order_date': 'Jan 01, 2016', - 'receipt_url': '/checkout/receipt/?order_number=' + order['number'], + 'receipt_url': '/commerce/checkout/receipt/?orderNum=' + order['number'], 'lines': order['lines'], } self.assertEqual(order_detail[i], expected)