예제 #1
0
 def test_failure(self):
     basket = create_basket(site=self.site)
     PaymentProcessorResponse.objects.create(basket=basket)
     assert refund_basket_transactions(self.site, [basket.id]) == (
         0,
         1,
     )
예제 #2
0
    def test_success(self):
        product_price = 100
        percentage_discount = 10
        product = ProductFactory(stockrecords__price_excl_tax=product_price)
        voucher, product = prepare_voucher(
            _range=RangeFactory(products=[product]),
            benefit_value=percentage_discount)
        self.request.user = UserFactory()
        basket = prepare_basket(self.request, [product], voucher)

        ppr = PaymentProcessorResponse.objects.create(basket=basket,
                                                      transaction_id='abc',
                                                      processor_name='paypal')
        with mock.patch.object(Paypal, 'issue_credit') as mock_issue_credit:
            mock_issue_credit.return_value = None

            assert refund_basket_transactions(self.site, [basket.id]) == (
                1,
                0,
            )
            total = product_price * (100 - percentage_discount) / 100.
            mock_issue_credit.assert_called_once_with(basket.order_number,
                                                      basket,
                                                      ppr.transaction_id,
                                                      total, basket.currency)
예제 #3
0
    def post(self, request, *args, **kwargs):  # pylint: disable=unused-argument
        action = request.POST.get('action')

        if action:
            logger.info(
                'User [%s] executed action [%s] on the management view.',
                request.user, action)

        if action == 'refund_basket_transactions':
            basket_ids = self._parse_basket_ids(request.POST.get('basket_ids'))
            success_count, failure_count = refund_basket_transactions(
                request.site, basket_ids)
            msg = 'Finished refunding basket transactions. [{success_count}] transactions were successfully refunded.' \
                  ' [{failure_count}] attempts failed.'.format(success_count=success_count,
                                                               failure_count=failure_count)
            messages.add_message(request, messages.INFO, msg)
        elif action == 'fulfill':
            basket_ids = self._parse_basket_ids(request.POST.get('basket_ids'))
            for basket_id in basket_ids:
                fulfilled = FulfillFrozenBaskets().fulfill_basket(
                    basket_id=basket_id, site=request.site)
                if fulfilled:
                    logger.info('Fulfilled basket [%s].', basket_id)
                else:
                    logger.info('Unable to fulfill basket [%d]', basket_id)
        else:
            messages.add_message(
                request, messages.ERROR,
                _('{action} is not a valid action.').format(action=action))

        return self.get(request)
예제 #4
0
 def test_no_basket_ids(self):
     assert refund_basket_transactions(self.site, []) == (
         0,
         0,
     )