package com.braintreegateway.integrationtest;
import com.braintreegateway.test.Nonce;
import com.braintreegateway.*;
import com.braintreegateway.testhelpers.TestHelper;
import com.braintreegateway.exceptions.NotFoundException;
import org.junit.Test;
import java.util.Calendar;
import java.util.Random;
import java.util.regex.Pattern;
import java.math.BigDecimal;
import static org.junit.Assert.*;
public class UsBankAccountIT extends IntegrationTest {
@Test
public void findsUsBankAccountByToken() {
String nonce = TestHelper.generateValidUsBankAccountNonce(gateway);
Result<Customer> customerResult = gateway.customer().create(new CustomerRequest());
assertTrue(customerResult.isSuccess());
Customer customer = customerResult.getTarget();
PaymentMethodRequest request = new PaymentMethodRequest().
customerId(customer.getId()).
paymentMethodNonce(nonce);
Result<? extends PaymentMethod> result = gateway.paymentMethod().create(request);
assertTrue(result.isSuccess());
UsBankAccount usBankAccount = gateway.usBankAccount().find(result.getTarget().getToken());
assertNotNull(usBankAccount);
assertEquals("021000021", usBankAccount.getRoutingNumber());
assertEquals("1234", usBankAccount.getLast4());
assertEquals("checking", usBankAccount.getAccountType());
assertEquals("Dan Schulman", usBankAccount.getAccountHolderName());
assertTrue(Pattern.matches(".*CHASE.*", usBankAccount.getBankName()));
AchMandate achMandate = usBankAccount.getAchMandate();
assertEquals("cl mandate text", achMandate.getText());
assertNotNull(achMandate.getAcceptedAt());
assertTrue(usBankAccount.isDefault());
}
@Test
public void findThrowsNotFoundExceptionWhenUsBankAccountIsMissing() {
try {
gateway.usBankAccount().find(TestHelper.generateInvalidUsBankAccountNonce());
fail("Should throw NotFoundException");
} catch (NotFoundException e) {
}
}
@Test
public void saleWithUsBankAccountByToken() {
String nonce = TestHelper.generateValidUsBankAccountNonce(gateway);
Result<Customer> customerResult = gateway.customer().create(new CustomerRequest());
assertTrue(customerResult.isSuccess());
Customer customer = customerResult.getTarget();
PaymentMethodRequest request = new PaymentMethodRequest().
customerId(customer.getId()).
paymentMethodNonce(nonce);
Result<? extends PaymentMethod> result = gateway.paymentMethod().create(request);
assertTrue(result.isSuccess());
TransactionRequest transactionRequest = new TransactionRequest()
.merchantAccountId("us_bank_merchant_account")
.amount(SandboxValues.TransactionAmount.AUTHORIZE.amount);
Result<Transaction> transactionResult = gateway.usBankAccount().sale(result.getTarget().getToken(), transactionRequest);
assertTrue(result.isSuccess());
Transaction transaction = transactionResult.getTarget();
assertNotNull(transaction);
assertEquals(new BigDecimal("1000.00"), transaction.getAmount());
assertEquals("USD", transaction.getCurrencyIsoCode());
assertEquals(Transaction.Type.SALE, transaction.getType());
assertEquals(Transaction.Status.SETTLEMENT_PENDING, transaction.getStatus());
UsBankAccountDetails usBankAccountDetails = transaction.getUsBankAccountDetails();
assertEquals("021000021", usBankAccountDetails.getRoutingNumber());
assertEquals("1234", usBankAccountDetails.getLast4());
assertEquals("checking", usBankAccountDetails.getAccountType());
assertEquals("Dan Schulman", usBankAccountDetails.getAccountHolderName());
assertTrue(Pattern.matches(".*CHASE.*", usBankAccountDetails.getBankName()));
AchMandate achMandate = usBankAccountDetails.getAchMandate();
assertEquals("cl mandate text", achMandate.getText());
assertNotNull(achMandate.getAcceptedAt());
}
}