From 2a7b4007702e5f8aaba036fd04bd62774cbe5767 Mon Sep 17 00:00:00 2001 From: Mohammad Ahtasham ul Hassan <60315450+aht007@users.noreply.github.com> Date: Tue, 18 Apr 2023 15:31:32 +0500 Subject: [PATCH] fix: fix buy_subscription_url to use get method (#32079) * fix: fix buy_subscription_url to use get method --- lms/djangoapps/learner_dashboard/programs.py | 1 + lms/envs/common.py | 2 +- lms/envs/devstack.py | 2 +- lms/envs/test.py | 2 +- .../djangoapps/programs/tests/test_utils.py | 31 +++++++++++++++++++ openedx/core/djangoapps/programs/utils.py | 13 ++++++-- 6 files changed, 46 insertions(+), 5 deletions(-) diff --git a/lms/djangoapps/learner_dashboard/programs.py b/lms/djangoapps/learner_dashboard/programs.py index e4cd0b1c54..49aac1568a 100644 --- a/lms/djangoapps/learner_dashboard/programs.py +++ b/lms/djangoapps/learner_dashboard/programs.py @@ -66,6 +66,7 @@ class ProgramsFragmentView(EdxFragmentView): 'programs': meter.engaged_programs, 'progress': meter.progress(), 'programs_subscription_data': programs_subscription_data, + 'user_preferences': get_user_preferences(user), 'is_user_b2c_subscriptions_enabled': is_user_b2c_subscriptions_enabled } html = render_to_string('learner_dashboard/programs_fragment.html', context) diff --git a/lms/envs/common.py b/lms/envs/common.py index 64d2465107..bb4012e70b 100644 --- a/lms/envs/common.py +++ b/lms/envs/common.py @@ -5312,4 +5312,4 @@ SUBSCRIPTIONS_ROOT_URL = "" SUBSCRIPTIONS_API_PATH = f"{SUBSCRIPTIONS_ROOT_URL}/api/v1/stripe-subscription/" SUBSCRIPTIONS_LEARNER_HELP_CENTER_URL = None -SUBSCRIPTIONS_BUY_SUBSCRIPTION_URL = f"{SUBSCRIPTIONS_ROOT_URL}/api/v1/stripe-subscribe/" +SUBSCRIPTIONS_BUY_SUBSCRIPTION_URL = f"{SUBSCRIPTIONS_ROOT_URL}/api/v1/stripe-subscribe" diff --git a/lms/envs/devstack.py b/lms/envs/devstack.py index 5106ec1202..557f0909cf 100644 --- a/lms/envs/devstack.py +++ b/lms/envs/devstack.py @@ -502,7 +502,7 @@ SUBSCRIPTIONS_ROOT_URL = "http://host.docker.internal:18750" SUBSCRIPTIONS_API_PATH = f"{SUBSCRIPTIONS_ROOT_URL}/api/v1/stripe-subscription/" SUBSCRIPTIONS_LEARNER_HELP_CENTER_URL = None -SUBSCRIPTIONS_BUY_SUBSCRIPTION_URL = f"{SUBSCRIPTIONS_ROOT_URL}/api/v1/stripe-subscribe/" +SUBSCRIPTIONS_BUY_SUBSCRIPTION_URL = f"{SUBSCRIPTIONS_ROOT_URL}/api/v1/stripe-subscribe" ################# New settings must go ABOVE this line ################# ######################################################################## diff --git a/lms/envs/test.py b/lms/envs/test.py index 707429f093..74da7078fa 100644 --- a/lms/envs/test.py +++ b/lms/envs/test.py @@ -682,4 +682,4 @@ SUBSCRIPTIONS_ROOT_URL = "http://localhost:18750" SUBSCRIPTIONS_API_PATH = f"{SUBSCRIPTIONS_ROOT_URL}/api/v1/stripe-subscription/" SUBSCRIPTIONS_LEARNER_HELP_CENTER_URL = None -SUBSCRIPTIONS_BUY_SUBSCRIPTION_URL = f"{SUBSCRIPTIONS_ROOT_URL}/api/v1/stripe-subscribe/" +SUBSCRIPTIONS_BUY_SUBSCRIPTION_URL = f"{SUBSCRIPTIONS_ROOT_URL}/api/v1/stripe-subscribe" diff --git a/openedx/core/djangoapps/programs/tests/test_utils.py b/openedx/core/djangoapps/programs/tests/test_utils.py index 52787d02af..f72e8cd678 100644 --- a/openedx/core/djangoapps/programs/tests/test_utils.py +++ b/openedx/core/djangoapps/programs/tests/test_utils.py @@ -6,6 +6,7 @@ import uuid from collections import namedtuple from copy import deepcopy from unittest import mock +from urllib.parse import urlencode import ddt import httpretty @@ -43,6 +44,7 @@ from openedx.core.djangoapps.programs.utils import ( ProgramDataExtender, ProgramMarketingDataExtender, ProgramProgressMeter, + get_buy_subscription_url, get_certificates, get_logged_in_program_certificate_url, get_programs_subscription_data, @@ -1798,3 +1800,32 @@ class TestGetProgramsSubscriptionData(TestCase): } ) assert result == subscription_data + + +@override_settings(SUBSCRIPTIONS_BUY_SUBSCRIPTION_URL='http://subscription_buy_url') +@ddt.ddt +class TestBuySubscriptionUrl(TestCase): + """ + Tests for the BuySubscriptionUrl utility function. + """ + @ddt.data( + { + 'skus': ['TESTSKU'], + 'program_uuid': '12345678-9012-3456-7890-123456789012' + }, + { + 'skus': ['TESTSKU1', 'TESTSKU2', 'TESTSKU3'], + 'program_uuid': '12345678-9012-3456-7890-123456789012' + }, + { + 'skus': [], + 'program_uuid': '12345678-9012-3456-7890-123456789012' + } + ) + @ddt.unpack + def test_get_buy_subscription_url(self, skus, program_uuid): + """ Verify the subscription purchase page URL is properly constructed and returned. """ + url = get_buy_subscription_url(program_uuid, skus) + formatted_skus = urlencode({'sku': skus}, doseq=True) + expected_url = f'{settings.SUBSCRIPTIONS_BUY_SUBSCRIPTION_URL}/{program_uuid}/?{formatted_skus}' + assert url == expected_url diff --git a/openedx/core/djangoapps/programs/utils.py b/openedx/core/djangoapps/programs/utils.py index b96609644f..1208c6caf3 100644 --- a/openedx/core/djangoapps/programs/utils.py +++ b/openedx/core/djangoapps/programs/utils.py @@ -6,7 +6,7 @@ import logging from collections import defaultdict from copy import deepcopy from itertools import chain -from urllib.parse import urljoin, urlparse, urlunparse +from urllib.parse import urlencode, urljoin, urlparse, urlunparse import requests from dateutil.parser import parse @@ -65,6 +65,15 @@ def get_program_and_course_data(site, user, program_uuid, mobile_only=False): return program_data, course_data +def get_buy_subscription_url(program_uuid, skus): + """ + Returns the URL to the Subscription Purchase page for the given program UUID and course Skus. + """ + formatted_skus = urlencode({'sku': skus}, doseq=True) + url = f'{settings.SUBSCRIPTIONS_BUY_SUBSCRIPTION_URL}/{program_uuid}/?{formatted_skus}' + return url + + def get_program_urls(program_data): """Returns important urls of program.""" from lms.djangoapps.learner_dashboard.utils import FAKE_COURSE_KEY, strip_course_id @@ -85,7 +94,7 @@ def get_program_urls(program_data): 'commerce_api_url': reverse('commerce_api:v0:baskets:create'), 'buy_button_url': ecommerce_service.get_checkout_page_url(*skus), 'program_record_url': program_record_url, - 'buy_subscription_url': settings.SUBSCRIPTIONS_BUY_SUBSCRIPTION_URL, + 'buy_subscription_url': get_buy_subscription_url(program_uuid, skus), 'manage_subscription_url': settings.ORDER_HISTORY_MICROFRONTEND_URL, 'subscriptions_learner_help_center_url': settings.SUBSCRIPTIONS_LEARNER_HELP_CENTER_URL }