1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
from tests.test_helper import *
from braintree.payment_instrument_type import PaymentInstrumentType
from braintree.us_bank_account_verification import UsBankAccountVerification
class TestTransactionWithUsBankAccount(unittest.TestCase):
def test_nonce_transactions(self):
result = Transaction.sale({
"amount": TransactionAmounts.Authorize,
"merchant_account_id": TestHelper.us_bank_merchant_account_id,
"payment_method_nonce": TestHelper.generate_valid_us_bank_account_nonce(),
"options": {
"submit_for_settlement": True,
"store_in_vault": True
}
})
self.assertTrue(result.is_success)
self.assertEqual(result.transaction.us_bank_account.routing_number, "021000021")
self.assertEqual(result.transaction.us_bank_account.last_4, "1234")
self.assertEqual(result.transaction.us_bank_account.account_type, "checking")
self.assertEqual(result.transaction.us_bank_account.account_holder_name, "Dan Schulman")
self.assertTrue(re.match(r".*CHASE.*", result.transaction.us_bank_account.bank_name))
self.assertEqual(result.transaction.us_bank_account.ach_mandate.text, "cl mandate text")
self.assertIsInstance(result.transaction.us_bank_account.ach_mandate.accepted_at, datetime)
def test_nonce_transactions_with_vaulted_token(self):
result = Transaction.sale({
"amount": TransactionAmounts.Authorize,
"merchant_account_id": TestHelper.us_bank_merchant_account_id,
"payment_method_nonce": TestHelper.generate_valid_us_bank_account_nonce(),
"options": {
"submit_for_settlement": True,
"store_in_vault": True
}
})
self.assertTrue(result.is_success)
self.assertEqual(result.transaction.us_bank_account.routing_number, "021000021")
self.assertEqual(result.transaction.us_bank_account.last_4, "1234")
self.assertEqual(result.transaction.us_bank_account.account_type, "checking")
self.assertEqual(result.transaction.us_bank_account.account_holder_name, "Dan Schulman")
self.assertTrue(re.match(r".*CHASE.*", result.transaction.us_bank_account.bank_name))
self.assertEqual(result.transaction.us_bank_account.ach_mandate.text, "cl mandate text")
self.assertIsInstance(result.transaction.us_bank_account.ach_mandate.accepted_at, datetime)
token = result.transaction.us_bank_account.token
result = Transaction.sale({
"amount": TransactionAmounts.Authorize,
"merchant_account_id": TestHelper.us_bank_merchant_account_id,
"payment_method_token": token,
"options": {
"submit_for_settlement": True,
}
})
self.assertTrue(result.is_success)
self.assertEqual(result.transaction.us_bank_account.routing_number, "021000021")
self.assertEqual(result.transaction.us_bank_account.last_4, "1234")
self.assertEqual(result.transaction.us_bank_account.account_type, "checking")
self.assertEqual(result.transaction.us_bank_account.account_holder_name, "Dan Schulman")
self.assertTrue(re.match(r".*CHASE.*", result.transaction.us_bank_account.bank_name))
self.assertEqual(result.transaction.us_bank_account.ach_mandate.text, "cl mandate text")
self.assertIsInstance(result.transaction.us_bank_account.ach_mandate.accepted_at, datetime)
def test_token_transactions_not_found(self):
result = Transaction.sale({
"amount": TransactionAmounts.Authorize,
"merchant_account_id": TestHelper.us_bank_merchant_account_id,
"payment_method_nonce": TestHelper.generate_invalid_us_bank_account_nonce(),
"options": {
"submit_for_settlement": True,
"store_in_vault": True
}
})
self.assertFalse(result.is_success)
error_code = result.errors.for_object("transaction").on("payment_method_nonce")[0].code
self.assertEqual(error_code, ErrorCodes.Transaction.PaymentMethodNonceUnknown)
@unittest.skip("until we have a more stable ci env")
def test_verification_create_with_plaid_nonce(self):
result = Transaction.sale({
"amount": TransactionAmounts.Authorize,
"merchant_account_id": TestHelper.us_bank_merchant_account_id,
"payment_method_nonce": TestHelper.generate_plaid_us_bank_account_nonce(),
"options": {
"submit_for_settlement": True,
"store_in_vault": True
}
})
self.assertTrue(result.is_success)
token = result.transaction.us_bank_account.token
us_bank_account = PaymentMethod.find(token)
self.assertEqual(result.transaction.payment_instrument_type, PaymentInstrumentType.UsBankAccount)
self.assertEqual(len(us_bank_account.verifications), 1)
self.assertEqual(us_bank_account.verifications[0].verification_method, UsBankAccountVerification.VerificationMethod.TokenizedCheck)
self.assertEqual(us_bank_account.verifications[0].status, UsBankAccountVerification.Status.Verified)
class TestTransactionWithUsBankAccountCompliantMerchant(unittest.TestCase):
def setUp(self):
braintree.Configuration.configure(
braintree.Environment.Development,
"integration2_merchant_id",
"integration2_public_key",
"integration2_private_key"
)
def tearDown(self):
braintree.Configuration.configure(
braintree.Environment.Development,
"integration_merchant_id",
"integration_public_key",
"integration_private_key"
)
def test_reject_non_plaid_nonce(self):
result = Transaction.sale({
"amount": TransactionAmounts.Authorize,
"merchant_account_id": "another_us_bank_merchant_account",
"payment_method_nonce": TestHelper.generate_valid_us_bank_account_nonce(),
"options": {
"submit_for_settlement": True,
"store_in_vault": True
}
})
self.assertFalse(result.is_success)
error_code = result.errors.for_object("transaction").on("payment_method_nonce")[0].code
self.assertEqual(ErrorCodes.Transaction.UsBankAccountNonceMustBePlaidVerified, error_code)
|