Merge pull request #30792 from openedx/bilaltahir21/ENT-5938-fix

fix: revert api client for UNENROLL_DONE signal
This commit is contained in:
Muhammad Ammar
2022-07-27 17:31:32 +05:00
committed by GitHub
3 changed files with 37 additions and 16 deletions

View File

@@ -4,6 +4,7 @@
import requests
from django.conf import settings
from edx_rest_api_client.auth import SuppliedJwtAuth
from edx_rest_api_client.client import EdxRestApiClient
from eventtracking import tracker
from openedx.core.djangoapps.oauth_dispatch.jwt import create_jwt_for_user
@@ -38,6 +39,27 @@ def get_ecommerce_api_base_url():
return configuration_helpers.get_value('ECOMMERCE_API_URL', settings.ECOMMERCE_API_URL)
def ecommerce_api_client(user, session=None):
"""
Returns an E-Commerce API client setup with authentication for the specified user.
DEPRECATED: To be replaced with get_ecommerce_api_client.
"""
claims = {'tracking_context': create_tracking_context(user)}
scopes = [
'user_id',
'email',
'profile'
]
jwt = create_jwt_for_user(user, additional_claims=claims, scopes=scopes)
return EdxRestApiClient(
configuration_helpers.get_value('ECOMMERCE_API_URL', settings.ECOMMERCE_API_URL),
jwt=jwt,
session=session
)
def get_ecommerce_api_client(user):
"""
Returns an E-Commerce API client setup with authentication for the specified user.

View File

@@ -4,7 +4,6 @@ This module contains signals related to enterprise.
import logging
from urllib.parse import urljoin
from django.conf import settings
from django.contrib.auth.models import User # lint-amnesty, pylint: disable=imported-auth-user
@@ -15,10 +14,10 @@ from integrated_channels.integrated_channel.tasks import (
transmit_single_learner_data,
transmit_single_subsection_learner_data
)
from requests.exceptions import HTTPError
from slumber.exceptions import HttpClientError
from common.djangoapps.student.signals import UNENROLL_DONE
from openedx.core.djangoapps.commerce.utils import get_ecommerce_api_base_url, get_ecommerce_api_client
from openedx.core.djangoapps.commerce.utils import ecommerce_api_client
from openedx.core.djangoapps.signals.signals import COURSE_ASSESSMENT_GRADE_CHANGED, COURSE_GRADE_NOW_PASSED
from openedx.features.enterprise_support.tasks import clear_enterprise_customer_data_consent_share_cache
from openedx.features.enterprise_support.utils import clear_data_consent_share_cache, is_enterprise_learner
@@ -106,17 +105,16 @@ def refund_order_voucher(sender, course_enrollment, skip_refund=False, **kwargs)
return
service_user = User.objects.get(username=settings.ECOMMERCE_SERVICE_WORKER_USERNAME)
client = get_ecommerce_api_client(service_user)
api_url = urljoin(
f"{get_ecommerce_api_base_url()}/", "coupons/create_refunded_voucher/"
)
# TODO: Replace ecommerce_api_client with get_ecommerce_api_client after completing ENT-6112
# https://2u-internal.atlassian.net/browse/ENT-6112
client = ecommerce_api_client(service_user)
order_number = course_enrollment.get_order_attribute_value('order_number')
if order_number:
error_message = "Encountered {} from ecommerce while creating refund voucher. Order={}, enrollment={}, user={}"
try:
response = client.post(api_url, data={"order": order_number})
response.raise_for_status()
except HTTPError as ex:
client.enterprise.coupons.create_refunded_voucher.post({"order": order_number})
except HttpClientError as ex:
log.info(
error_message.format(type(ex).__name__, order_number, course_enrollment, course_enrollment.user)
)

View File

@@ -10,8 +10,8 @@ from django.test.utils import override_settings
from django.utils.timezone import now
from edx_django_utils.cache import TieredCache
from opaque_keys.edx.keys import CourseKey
# from slumber.exceptions import HttpClientError, HttpServerError
from requests.exceptions import HTTPError
from slumber.exceptions import HttpClientError, HttpServerError
# from requests.exceptions import HTTPError
from testfixtures import LogCapture
from common.djangoapps.course_modes.tests.factories import CourseModeFactory
@@ -157,13 +157,14 @@ class EnterpriseSupportSignals(SharedModuleStoreTestCase):
"""
mock_is_order_voucher_refundable.return_value = order_voucher_refundable
enrollment = self._create_enrollment_to_refund(no_of_days_placed, enterprise_enrollment_exists)
with patch('openedx.features.enterprise_support.signals.get_ecommerce_api_client') as mock_ecommerce_api_client:
with patch('openedx.features.enterprise_support.signals.ecommerce_api_client') as mock_ecommerce_api_client:
enrollment.update_enrollment(is_active=False, skip_refund=skip_refund)
assert mock_ecommerce_api_client.called == api_called
@patch('common.djangoapps.student.models.CourseEnrollment.is_order_voucher_refundable')
@ddt.data(
(HTTPError, 'INFO'),
(HttpClientError, 'INFO'),
(HttpServerError, 'ERROR'),
(Exception, 'ERROR'),
)
@ddt.unpack
@@ -173,9 +174,9 @@ class EnterpriseSupportSignals(SharedModuleStoreTestCase):
"""
mock_is_order_voucher_refundable.return_value = True
enrollment = self._create_enrollment_to_refund()
with patch('openedx.features.enterprise_support.signals.get_ecommerce_api_client') as mock_ecommerce_api_client:
with patch('openedx.features.enterprise_support.signals.ecommerce_api_client') as mock_ecommerce_api_client:
client_instance = mock_ecommerce_api_client.return_value
client_instance.post.side_effect = mock_error()
client_instance.enterprise.coupons.create_refunded_voucher.post.side_effect = mock_error()
with LogCapture(LOGGER_NAME) as logger:
enrollment.update_enrollment(is_active=False)
assert mock_ecommerce_api_client.called is True