Пример #1
0
 def test_dwolla_payment_form_handles_valueerror(self, oauth_refresh,
                                                 dwolla_get_sources):
     oauth_refresh.return_value = {
         'error': 'access_denied',
         'error_description': 'Arbitrary error code.'
     }
     dwolla_get_sources.return_value = DWOLLA_SOURCES
     order = OrderFactory()
     order.event.organization.dwolla_test_account = DwollaOrganizationAccountFactory(
         access_token_expires=timezone.now() - timedelta(1))
     order.event.organization.save()
     person = PersonFactory()
     person.dwolla_test_account = DwollaUserAccountFactory()
     person.save()
     pin = '1234'
     source = 'Balance'
     form = DwollaPaymentForm(order=order,
                              amount=Decimal('42.15'),
                              data={
                                  'dwolla_pin': pin,
                                  'source': source
                              },
                              user=person)
     self.assertTrue(form.is_bound)
     self.assertTrue(form.errors)
     self.assertEqual(form.errors['__all__'],
                      [oauth_refresh.return_value['error_description']])
 def test_saved_card_payment_form(self, stripe_prep, stripe_charge):
     stripe_charge.return_value = STRIPE_CHARGE
     person = PersonFactory(stripe_test_customer_id='FAKE_CUSTOMER_ID')
     order = OrderFactory(person=person)
     event = order.event
     card = CardFactory(is_saved=True)
     person.cards.add(card)
     person.save()
     form = SavedCardPaymentForm(order, Decimal('42.15'), data={'card': card.pk})
     self.assertTrue(form.is_bound)
     self.assertFalse(form.errors)
     stripe_charge.assert_called_once_with(
         card.stripe_card_id,
         amount=Decimal('42.15'),
         event=event,
         order=order,
         customer='FAKE_CUSTOMER_ID'
     )
     self.assertEqual(stripe_prep.call_count, 0)
     txn = form.save()
     self.assertIsInstance(txn, Transaction)
     self.assertEqual(txn.event, event)
     self.assertEqual(txn.amount, Decimal('42.15'))
     self.assertEqual(txn.application_fee, Decimal('1.05'))
     self.assertEqual(txn.processing_fee, Decimal('1.52'))
Пример #3
0
    def test_dwolla_charge__user(self):
        event = EventFactory(api_type=Event.TEST,
                             application_fee_percent=Decimal('2.5'))
        event.organization.dwolla_test_account = DwollaOrganizationAccountFactory(
        )
        event.organization.save()
        self.assertTrue(event.dwolla_connected())
        dwolla_prep(Event.TEST)

        person = PersonFactory()
        person.dwolla_test_account = DwollaUserAccountFactory()
        person.save()
        order = OrderFactory(person=person, event=event, code='dwoll1')
        charge = dwolla_charge(
            account=person.dwolla_test_account,
            amount=42.15,
            order=order,
            event=event,
            pin=settings.DWOLLA_TEST_USER_PIN,
            source='Balance',
        )

        self.assertIsInstance(charge, dict)
        self.assertEqual(charge["Type"], "money_received")
        self.assertEqual(len(charge['Fees']), 1)
        self.assertEqual(charge["Notes"],
                         "Order {} for {}".format(order.code, event.name))

        txn = Transaction.from_dwolla_charge(charge, event=event)
        # 42.15 * 0.025 = 1.05
        self.assertEqual(Decimal(txn.application_fee), Decimal('1.05'))
        # 0.25
        self.assertEqual(Decimal(txn.processing_fee), Decimal('0'))

        refund = dwolla_refund(order=order,
                               event=event,
                               payment_id=txn.remote_id,
                               amount=txn.amount,
                               pin=settings.DWOLLA_TEST_ORGANIZATION_PIN)

        self.assertIsInstance(refund, dict)
        self.assertEqual(refund["Amount"], txn.amount)

        refund_info = transactions.info(
            tid=str(refund['TransactionId']),
            alternate_token=event.organization.get_dwolla_account(
                event.api_type).get_token())
        self.assertEqual(refund_info["Notes"],
                         "Order {} for {}".format(order.code, event.name))

        refund_txn = Transaction.from_dwolla_refund(refund, txn, event=event)
        self.assertEqual(refund_txn.amount, -1 * txn.amount)
        self.assertEqual(refund_txn.application_fee, 0)
        self.assertEqual(refund_txn.processing_fee, 0)
Пример #4
0
    def test_dolla_charge__negative(self):
        event = EventFactory(api_type=Event.TEST,
                             application_fee_percent=Decimal('2.5'))
        event.organization.dwolla_test_account = DwollaOrganizationAccountFactory(
        )
        event.organization.save()
        self.assertTrue(event.dwolla_connected())
        dwolla_prep(Event.TEST)

        person = PersonFactory()
        person.dwolla_test_account = DwollaUserAccountFactory()
        person.save()
        order = OrderFactory(person=person, event=event, code='dwoll1')
        with self.assertRaises(InvalidAmountException):
            dwolla_charge(
                account=person.dwolla_test_account,
                amount=-1.00,
                order=order,
                event=event,
                pin=settings.DWOLLA_TEST_USER_PIN,
                source='Balance',
            )
class OrderSearchTestCase(APITestCase):
    def setUp(self):
        self.person = PersonFactory(password='******', is_superuser=True)
        self.client.login(username=self.person.email, password='******')
        self.event = EventFactory()
        self.order = OrderFactory(event=self.event)

    def test_get__no_permissions(self):
        self.person.is_superuser = False
        self.person.save()

        response = self.client.get(
            '/api/v1/ordersearch/', {
                'event': self.event.pk,
            },
        )

        self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)

    def test_get__no_event(self):
        response = self.client.get(
            '/api/v1/ordersearch/',
        )

        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(len(response.data), 0)

    def test_get__with_event(self):
        event2 = EventFactory()
        OrderFactory(event=event2)
        response = self.client.get(
            '/api/v1/ordersearch/', {
                'event': self.event.pk,
            },
        )

        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(len(response.data), 1)
        self.assertEqual(response.data[0]['id'], self.order.pk)
Пример #6
0
 def test_negative_charge_adds_errors(self, dwolla_get_sources):
     dwolla_get_sources.return_value = DWOLLA_SOURCES
     order = OrderFactory()
     event = order.event
     event.organization.dwolla_test_account = DwollaOrganizationAccountFactory(
     )
     event.organization.save()
     person = PersonFactory()
     person.dwolla_test_account = DwollaUserAccountFactory()
     person.save()
     pin = '1234'
     source = 'Balance'
     form = DwollaPaymentForm(order=order,
                              amount=Decimal('-1.00'),
                              data={
                                  'dwolla_pin': pin,
                                  'source': source
                              },
                              user=person)
     self.assertTrue(form.is_bound)
     self.assertTrue(form.errors)
     self.assertEqual(form.errors['__all__'],
                      ["Cannot charge an amount less than zero."])
Пример #7
0
 def test_dwolla_payment_form(self, dwolla_charge, dwolla_get_sources):
     dwolla_charge.return_value = DWOLLA_CHARGE
     dwolla_get_sources.return_value = DWOLLA_SOURCES
     order = OrderFactory()
     event = order.event
     event.organization.dwolla_test_account = DwollaOrganizationAccountFactory(
     )
     event.organization.save()
     person = PersonFactory()
     person.dwolla_test_account = DwollaUserAccountFactory()
     person.save()
     pin = '1234'
     source = 'Balance'
     form = DwollaPaymentForm(order=order,
                              amount=Decimal('42.15'),
                              data={
                                  'dwolla_pin': pin,
                                  'source': source
                              },
                              user=person)
     self.assertTrue(form.is_bound)
     self.assertFalse(form.errors)
     dwolla_charge.assert_called_once_with(
         account=person.dwolla_test_account,
         amount=42.15,
         event=event,
         pin=pin,
         source=source,
         order=order,
     )
     txn = form.save()
     self.assertIsInstance(txn, Transaction)
     self.assertEqual(txn.event, event)
     self.assertEqual(Decimal(str(txn.amount)), Decimal('42.15'))
     self.assertEqual(Decimal(str(txn.application_fee)), Decimal('1.05'))
     self.assertEqual(Decimal(str(txn.processing_fee)), Decimal('0.25'))
Пример #8
0
class SavedCardPaymentFormTestCase(TestCase):
    def setUp(self):
        self.person = PersonFactory(stripe_test_customer_id='FAKE_CUSTOMER_ID')
        self.order = OrderFactory(person=self.person)
        self.event = self.order.event
        self.card = CardFactory(is_saved=True)
        self.person.cards.add(self.card)
        self.person.save()

    @patch('brambling.forms.orders.stripe_charge')
    def test_successful_charge(self, stripe_charge):
        stripe_charge.return_value = STRIPE_CHARGE
        form = SavedCardPaymentForm(self.order,
                                    Decimal('42.15'),
                                    data={'card': self.card.pk})
        self.assertTrue(form.is_bound)
        self.assertFalse(form.errors)
        stripe_charge.assert_called_once_with(self.card.stripe_card_id,
                                              amount=Decimal('42.15'),
                                              event=self.event,
                                              order=self.order,
                                              customer='FAKE_CUSTOMER_ID')
        txn = form.save()
        self.assertIsInstance(txn, Transaction)
        self.assertEqual(txn.event, self.event)
        self.assertEqual(txn.amount, Decimal('42.15'))
        self.assertEqual(txn.application_fee, Decimal('1.05'))
        self.assertEqual(txn.processing_fee, Decimal('1.52'))

    def test_negative_amount_adds_errors(self):
        form = SavedCardPaymentForm(self.order,
                                    Decimal('-1.00'),
                                    data={'card': self.card.pk})

        self.assertTrue(form.is_bound)
        self.assertTrue(form.errors)
        self.assertEqual(form.errors['__all__'],
                         ["Cannot charge an amount less than zero."])

    @patch('brambling.forms.orders.stripe_charge')
    def test_handles_carderror(self, stripe_charge):
        error_message = "Hi"
        stripe_charge.side_effect = stripe.error.CardError(error_message, 1, 1)
        form = SavedCardPaymentForm(order=self.order,
                                    amount=Decimal('42.15'),
                                    data={'card': self.card.pk})
        self.assertTrue(form.is_bound)
        self.assertTrue(form.errors)
        self.assertEqual(form.errors['__all__'], [error_message])

    @patch('brambling.forms.orders.stripe_charge')
    def test_handles_apierror(self, stripe_charge):
        error_message = "Hi"
        stripe_charge.side_effect = stripe.error.APIError(error_message, 1, 1)
        form = SavedCardPaymentForm(order=self.order,
                                    amount=Decimal('42.15'),
                                    data={'card': self.card.pk})
        self.assertTrue(form.is_bound)
        self.assertTrue(form.errors)
        self.assertEqual(form.errors['__all__'], [STRIPE_API_ERROR])

    @patch('brambling.forms.orders.stripe_charge')
    def test_handles_invalidamountexception(self, stripe_charge):
        error_message = "Hi"
        stripe_charge.side_effect = InvalidAmountException(error_message)
        form = SavedCardPaymentForm(order=self.order,
                                    amount=Decimal('42.15'),
                                    data={'card': self.card.pk})
        self.assertTrue(form.is_bound)
        self.assertTrue(form.errors)
        self.assertEqual(form.errors['__all__'], [error_message])

    @patch('brambling.forms.orders.stripe_charge')
    def test_handles_invalidrequesterror(self, stripe_charge):
        error_message = "Hi"
        stripe_charge.side_effect = stripe.error.InvalidRequestError(
            error_message, 1)
        form = SavedCardPaymentForm(order=self.order,
                                    amount=Decimal('42.15'),
                                    data={'card': self.card.pk})
        self.assertTrue(form.is_bound)
        self.assertTrue(form.errors)
        self.assertEqual(form.errors['__all__'], [error_message])
class SavedCardPaymentFormTestCase(TestCase):

    def setUp(self):
        self.person = PersonFactory(stripe_test_customer_id='FAKE_CUSTOMER_ID')
        self.order = OrderFactory(person=self.person)
        self.event = self.order.event
        self.card = CardFactory(is_saved=True)
        self.person.cards.add(self.card)
        self.person.save()

    @patch('brambling.forms.orders.stripe_charge')
    def test_successful_charge(self, stripe_charge):
        stripe_charge.return_value = STRIPE_CHARGE
        form = SavedCardPaymentForm(self.order, Decimal('42.15'),
                                    data={'card': self.card.pk})
        self.assertTrue(form.is_bound)
        self.assertFalse(form.errors)
        stripe_charge.assert_called_once_with(
            self.card.stripe_card_id,
            amount=Decimal('42.15'),
            event=self.event,
            order=self.order,
            customer='FAKE_CUSTOMER_ID'
        )
        txn = form.save()
        self.assertIsInstance(txn, Transaction)
        self.assertEqual(txn.event, self.event)
        self.assertEqual(txn.amount, Decimal('42.15'))
        self.assertEqual(txn.application_fee, Decimal('1.05'))
        self.assertEqual(txn.processing_fee, Decimal('1.52'))

    def test_negative_amount_adds_errors(self):
        form = SavedCardPaymentForm(self.order, Decimal('-1.00'),
                                    data={'card': self.card.pk})

        self.assertTrue(form.is_bound)
        self.assertTrue(form.errors)
        self.assertEqual(form.errors['__all__'],
                         ["Cannot charge an amount less than zero."])

    @patch('brambling.forms.orders.stripe_charge')
    def test_handles_carderror(self, stripe_charge):
        error_message = "Hi"
        stripe_charge.side_effect = stripe.error.CardError(error_message, 1, 1)
        form = SavedCardPaymentForm(order=self.order, amount=Decimal('42.15'),
                                    data={'card': self.card.pk})
        self.assertTrue(form.is_bound)
        self.assertTrue(form.errors)
        self.assertEqual(form.errors['__all__'], [error_message])

    @patch('brambling.forms.orders.stripe_charge')
    def test_handles_apierror(self, stripe_charge):
        error_message = "Hi"
        stripe_charge.side_effect = stripe.error.APIError(error_message, 1, 1)
        form = SavedCardPaymentForm(order=self.order, amount=Decimal('42.15'),
                                    data={'card': self.card.pk})
        self.assertTrue(form.is_bound)
        self.assertTrue(form.errors)
        self.assertEqual(form.errors['__all__'], [STRIPE_API_ERROR])

    @patch('brambling.forms.orders.stripe_charge')
    def test_handles_invalidamountexception(self, stripe_charge):
        error_message = "Hi"
        stripe_charge.side_effect = InvalidAmountException(error_message)
        form = SavedCardPaymentForm(order=self.order, amount=Decimal('42.15'),
                                    data={'card': self.card.pk})
        self.assertTrue(form.is_bound)
        self.assertTrue(form.errors)
        self.assertEqual(form.errors['__all__'], [error_message])

    @patch('brambling.forms.orders.stripe_charge')
    def test_handles_invalidrequesterror(self, stripe_charge):
        error_message = "Hi"
        stripe_charge.side_effect = stripe.error.InvalidRequestError(error_message, 1)
        form = SavedCardPaymentForm(order=self.order, amount=Decimal('42.15'),
                                    data={'card': self.card.pk})
        self.assertTrue(form.is_bound)
        self.assertTrue(form.errors)
        self.assertEqual(form.errors['__all__'], [error_message])