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)
Exemple #4
0
 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)
Exemple #6
0
 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)
Exemple #7
0
 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)
Exemple #8
0
 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)
Exemple #9
0
 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)
Exemple #10
0
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)
Exemple #11
0
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.')