def test_exceptions(self, exception): """ Verify the function returns None when a request exception is raised. """ with mock.patch.object(requests, 'get', mock.Mock(side_effect=exception)): self.assertIsNone( get_credit_provider_details(self.credit_provider_id, self.site.siteconfiguration))
def send_course_purchase_email(sender, order=None, **kwargs): # pylint: disable=unused-argument """Send course purchase notification email when a course is purchased.""" if waffle.switch_is_active('ENABLE_NOTIFICATIONS'): # We do not currently support email sending for orders with more than one item. if len(order.lines.all()) == ORDER_LINE_COUNT: product = order.lines.first().product credit_provider_id = getattr(product.attr, 'credit_provider', None) if not credit_provider_id: logger.error( 'Failed to send credit receipt notification. Credit seat product [%s] has no provider.', product.id) return elif product.is_seat_product: provider_data = get_credit_provider_details( access_token=order.site.siteconfiguration.access_token, credit_provider_id=credit_provider_id, site_configuration=order.site.siteconfiguration) receipt_page_url = get_receipt_page_url( order_number=order.number, site_configuration=order.site.siteconfiguration) if provider_data: send_notification( order.user, 'CREDIT_RECEIPT', { 'course_title': product.title, 'receipt_page_url': receipt_page_url, 'credit_hours': product.attr.credit_hours, 'credit_provider': provider_data['display_name'], }, order.site) else: logger.info( 'Currently support receipt emails for order with one item.')
def test_get_credit_provider_details_unavailable_request(self): """ Check that None is returned on Bad Request response. """ httpretty.register_uri(httpretty.GET, self.site.siteconfiguration.build_lms_url( self.get_credit_provider_details_url( self.credit_provider_id)), status=400) provider_data = get_credit_provider_details( self.credit_provider_id, self.site.siteconfiguration) self.assertEqual(provider_data, None)
def test_exceptions(self, exception): """ Verify the function returns None when a request exception is raised. """ with mock.patch.object(requests, 'get', mock.Mock(side_effect=exception)): self.assertIsNone( get_credit_provider_details( self.access_token, self.credit_provider_id, self.site.siteconfiguration ) )
def test_get_credit_provider_details(self): """ Check that credit provider details are returned. """ self.mock_access_token_response() httpretty.register_uri(httpretty.GET, self.site.siteconfiguration.build_lms_url( self.get_credit_provider_details_url( self.credit_provider_id)), body=json.dumps(self.body), content_type="application/json") provider_data = get_credit_provider_details( self.credit_provider_id, self.site.siteconfiguration) self.assertDictEqual(provider_data, self.body)
def get(self, request): credit_provider_id = request.GET.get('credit_provider_id') provider_data = get_credit_provider_details( credit_provider_id=credit_provider_id, site_configuration=request.site.siteconfiguration) if not provider_data: response_data = None elif isinstance(provider_data, dict): response_data = ProviderSerializer(provider_data).data else: response_data = ProviderSerializer(provider_data, many=True).data return Response(response_data)
def test_get_credit_provider_details_unavailable_request(self): """ Check that None is returned on Bad Request response. """ httpretty.register_uri( httpretty.GET, self.site.siteconfiguration.build_lms_url(self.get_credit_provider_details_url(self.credit_provider_id)), status=400 ) provider_data = get_credit_provider_details( self.access_token, self.credit_provider_id, self.site.siteconfiguration ) self.assertEqual(provider_data, None)
def test_get_credit_provider_details(self): """ Check that credit provider details are returned. """ httpretty.register_uri( httpretty.GET, self.site.siteconfiguration.build_lms_url(self.get_credit_provider_details_url(self.credit_provider_id)), body=json.dumps(self.body), content_type="application/json" ) provider_data = get_credit_provider_details( self.access_token, self.credit_provider_id, self.site.siteconfiguration ) self.assertDictEqual(provider_data, self.body)
def get(self, request): credit_provider_id = request.GET.get('credit_provider_id') provider_data = get_credit_provider_details( access_token=request.user.access_token, credit_provider_id=credit_provider_id, site_configuration=request.site.siteconfiguration ) if not provider_data: response_data = None elif isinstance(provider_data, dict): response_data = ProviderSerializer(provider_data).data else: response_data = ProviderSerializer(provider_data, many=True).data return Response(response_data)
def send_course_purchase_email(sender, order=None, request=None, **kwargs): # pylint: disable=unused-argument """ Send seat purchase notification email """ if waffle.switch_is_active('ENABLE_NOTIFICATIONS'): if len(order.lines.all()) != ORDER_LINE_COUNT: logger.info( 'Currently support receipt emails for order with one item.') return product = order.lines.first().product if product.is_seat_product or product.is_course_entitlement_product: recipient = request.POST.get( 'req_bill_to_email', order.user.email) if request else order.user.email receipt_page_url = get_receipt_page_url( order_number=order.number, site_configuration=order.site.siteconfiguration) credit_provider_id = getattr(product.attr, 'credit_provider', None) if credit_provider_id: provider_data = get_credit_provider_details( credit_provider_id=credit_provider_id, site_configuration=order.site.siteconfiguration) if provider_data: send_notification( order.user, 'CREDIT_RECEIPT', { 'course_title': product.title, 'receipt_page_url': receipt_page_url, 'credit_hours': product.attr.credit_hours, 'credit_provider': provider_data['display_name'], }, order.site, recipient) elif getattr(product.attr, 'certificate_type', None) == 'credit': logger.error( 'Failed to send credit receipt notification. Credit seat product [%s] has no provider.', product.id) elif order.basket.total_incl_tax != 0: send_notification( order.user, 'COURSE_PURCHASED', { 'course_title': product.title, 'receipt_page_url': receipt_page_url, }, order.site, recipient)
def send_course_purchase_email(sender, order=None, **kwargs): # pylint: disable=unused-argument """Send course purchase notification email when a course is purchased.""" if waffle.switch_is_active('ENABLE_NOTIFICATIONS'): # We do not currently support email sending for orders with more than one item. if len(order.lines.all()) == ORDER_LINE_COUNT: product = order.lines.first().product credit_provider_id = getattr(product.attr, 'credit_provider', None) if not credit_provider_id: logger.error( 'Failed to send credit receipt notification. Credit seat product [%s] has no provider.', product.id ) return elif product.get_product_class().name == 'Seat': provider_data = get_credit_provider_details( access_token=order.site.siteconfiguration.access_token, credit_provider_id=credit_provider_id, site_configuration=order.site.siteconfiguration ) receipt_page_url = get_receipt_page_url( order_number=order.number, site_configuration=order.site.siteconfiguration ) if provider_data: send_notification( order.user, 'CREDIT_RECEIPT', { 'course_title': product.title, 'receipt_page_url': receipt_page_url, 'credit_hours': product.attr.credit_hours, 'credit_provider': provider_data['display_name'], }, order.site ) else: logger.info('Currently support receipt emails for order with one item.')