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'))
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)
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)
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."])
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'))
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])