package com.braintreegateway.integrationtest; import com.braintreegateway.*; import com.braintreegateway.SandboxValues.CreditCardNumber; import com.braintreegateway.SandboxValues.TransactionAmount; import com.braintreegateway.testhelpers.MerchantAccountTestConstants; import com.braintreegateway.testhelpers.TestHelper; import com.braintreegateway.exceptions.DownForMaintenanceException; import com.braintreegateway.exceptions.AuthenticationException; import org.junit.Test; import java.math.BigDecimal; import static org.junit.Assert.*; public class TransparentRedirectIT extends IntegrationTest implements MerchantAccountTestConstants { @Test public void createTransactionFromTransparentRedirect() { TransactionRequest request = new TransactionRequest(). amount(TransactionAmount.AUTHORIZE.amount). creditCard(). number(CreditCardNumber.VISA.number). expirationDate("05/2009"). done(). options(). storeInVault(true). done(); TransactionRequest trParams = new TransactionRequest(). type(Transaction.Type.SALE); String queryString = TestHelper.simulateFormPostForTR(gateway, trParams, request, gateway.transparentRedirect().url()); Result<Transaction> result = gateway.transparentRedirect().confirmTransaction(queryString); assertTrue(result.isSuccess()); assertEquals(CreditCardNumber.VISA.number.substring(0, 6), result.getTarget().getCreditCard().getBin()); assertEquals(TransactionAmount.AUTHORIZE.amount, result.getTarget().getAmount()); } @Test public void createTransactionFromTransparentRedirectSpecifyingMerchantAccountId() { TransactionRequest request = new TransactionRequest(). amount(TransactionAmount.AUTHORIZE.amount). creditCard(). number(CreditCardNumber.VISA.number). expirationDate("05/2009"). done(); TransactionRequest trParams = new TransactionRequest(). type(Transaction.Type.SALE). merchantAccountId(NON_DEFAULT_MERCHANT_ACCOUNT_ID); String queryString = TestHelper.simulateFormPostForTR(gateway, trParams, request, gateway.transparentRedirect().url()); Result<Transaction> result = gateway.transparentRedirect().confirmTransaction(queryString); assertTrue(result.isSuccess()); assertEquals(NON_DEFAULT_MERCHANT_ACCOUNT_ID, result.getTarget().getMerchantAccountId()); } @Test public void createTransactionFromTransparentRedirectSpecifyingDescriptor() { TransactionRequest request = new TransactionRequest(). amount(TransactionAmount.AUTHORIZE.amount). creditCard(). number(CreditCardNumber.VISA.number). expirationDate("05/2009"). done(); TransactionRequest trParams = new TransactionRequest(). type(Transaction.Type.SALE). descriptor(). name("123*123456789012345678"). phone("3334445555"). done(); String queryString = TestHelper.simulateFormPostForTR(gateway, trParams, request, gateway.transparentRedirect().url()); Result<Transaction> result = gateway.transparentRedirect().confirmTransaction(queryString); assertTrue(result.isSuccess()); Transaction transaction = result.getTarget(); assertEquals("123*123456789012345678", transaction.getDescriptor().getName()); assertEquals("3334445555", transaction.getDescriptor().getPhone()); } @Test public void createTransactionFromTransparentRedirectSpecifyingLevel2Attributes() { TransactionRequest request = new TransactionRequest(). amount(TransactionAmount.AUTHORIZE.amount). creditCard(). number(CreditCardNumber.VISA.number). expirationDate("05/2009"). done(); TransactionRequest trParams = new TransactionRequest(). type(Transaction.Type.SALE). taxAmount(new BigDecimal("10.00")). taxExempt(true). purchaseOrderNumber("12345"); String queryString = TestHelper.simulateFormPostForTR(gateway, trParams, request, gateway.transparentRedirect().url()); Result<Transaction> result = gateway.transparentRedirect().confirmTransaction(queryString); assertTrue(result.isSuccess()); Transaction transaction = result.getTarget(); assertEquals(new BigDecimal("10.00"), transaction.getTaxAmount()); assertTrue(transaction.isTaxExempt()); assertEquals("12345", transaction.getPurchaseOrderNumber()); } @Test public void createCustomerFromTransparentRedirect() { CustomerRequest request = new CustomerRequest().firstName("John"); CustomerRequest trParams = new CustomerRequest().lastName("Doe"); String queryString = TestHelper.simulateFormPostForTR(gateway, trParams, request, gateway.transparentRedirect().url()); Result<Customer> result = gateway.transparentRedirect().confirmCustomer(queryString); assertTrue(result.isSuccess()); assertEquals("John", result.getTarget().getFirstName()); assertEquals("Doe", result.getTarget().getLastName()); } @Test public void updateCustomerFromTransparentRedirect() { CustomerRequest request = new CustomerRequest(). firstName("John"). lastName("Doe"); Customer customer = gateway.customer().create(request).getTarget(); CustomerRequest updateRequest = new CustomerRequest().firstName("Jane"); CustomerRequest trParams = new CustomerRequest().customerId(customer.getId()).lastName("Dough"); String queryString = TestHelper.simulateFormPostForTR(gateway, trParams, updateRequest, gateway.transparentRedirect().url()); Result<Customer> result = gateway.transparentRedirect().confirmCustomer(queryString); assertTrue(result.isSuccess()); Customer updatedCustomer = gateway.customer().find(customer.getId()); assertEquals("Jane", updatedCustomer.getFirstName()); assertEquals("Dough", updatedCustomer.getLastName()); } @Test public void createCreditCardFromTransparentRedirect() { Customer customer = gateway.customer().create(new CustomerRequest()).getTarget(); CreditCardRequest request = new CreditCardRequest(); CreditCardRequest trParams = new CreditCardRequest(). customerId(customer.getId()). number("4111111111111111"). expirationDate("10/10"); String queryString = TestHelper.simulateFormPostForTR(gateway, trParams, request, gateway.transparentRedirect().url()); Result<CreditCard> result = gateway.transparentRedirect().confirmCreditCard(queryString); assertTrue(result.isSuccess()); assertEquals("411111", result.getTarget().getBin()); assertEquals("1111", result.getTarget().getLast4()); assertEquals("10/2010", result.getTarget().getExpirationDate()); } @Test public void updateCreditCardFromTransparentRedirect() { Customer customer = gateway.customer().create(new CustomerRequest()).getTarget(); CreditCardRequest request = new CreditCardRequest(). customerId(customer.getId()). number("5105105105105100"). expirationDate("05/12"); CreditCard card = gateway.creditCard().create(request).getTarget(); CreditCardRequest updateRequest = new CreditCardRequest(); CreditCardRequest trParams = new CreditCardRequest(). paymentMethodToken(card.getToken()). number("4111111111111111"). expirationDate("10/10"); String queryString = TestHelper.simulateFormPostForTR(gateway, trParams, updateRequest, gateway.transparentRedirect().url()); Result<CreditCard> result = gateway.transparentRedirect().confirmCreditCard(queryString); assertTrue(result.isSuccess()); CreditCard updatedCreditCard = gateway.creditCard().find(card.getToken()); assertEquals("411111", updatedCreditCard.getBin()); assertEquals("1111", updatedCreditCard.getLast4()); assertEquals("10/2010", updatedCreditCard.getExpirationDate()); } @Test public void errorRaisedWhenConfirmingIncorrectResource() { CustomerRequest request = new CustomerRequest().firstName("John"); CustomerRequest trParams = new CustomerRequest().lastName("Doe"); String queryString = TestHelper.simulateFormPostForTR(gateway, trParams, request, gateway.transparentRedirect().url()); try { gateway.transparentRedirect().confirmTransaction(queryString); assertTrue(false); } catch (IllegalArgumentException e) { assertEquals("You attemped to confirm a transaction, but received a customer.", e.getMessage()); } } @Test public void errorNotRaisedWhenReceivingApiErrorResponse() { TransactionRequest invalidRequest = new TransactionRequest(); TransactionRequest trParams = new TransactionRequest().type(Transaction.Type.SALE); String queryString = TestHelper.simulateFormPostForTR(gateway, trParams, invalidRequest, gateway.transparentRedirect().url()); Result<Transaction> result = gateway.transparentRedirect().confirmTransaction(queryString); assertFalse(result.isSuccess()); assertTrue(result.getErrors().deepSize() > 0); } @Test(expected = DownForMaintenanceException.class) public void downForMaintenanceExceptionRaisedWhenAppInMaintenanceModeUsingTR() { CustomerRequest request = new CustomerRequest(); CustomerRequest trParams = new CustomerRequest(); Configuration configuration = gateway.getConfiguration(); String queryString = TestHelper.simulateFormPostForTR(gateway, trParams, request, configuration.getBaseURL() + configuration.getMerchantPath() + "/test/maintenance"); gateway.customer().confirmTransparentRedirect(queryString); } @Test(expected = DownForMaintenanceException.class) public void downForMaintenanceExceptionRaisedWhenAppInMaintenanceModeUsingNewTR() { CustomerRequest request = new CustomerRequest(); CustomerRequest trParams = new CustomerRequest(); Configuration configuration = gateway.getConfiguration(); String queryString = TestHelper.simulateFormPostForTR(gateway, trParams, request, configuration.getBaseURL() + configuration.getMerchantPath() + "/test/maintenance"); gateway.transparentRedirect().confirmCustomer(queryString); } @Test(expected = AuthenticationException.class) public void authenticationExceptionRaisedWhenBadCredentialsUsingTR() { CustomerRequest request = new CustomerRequest(); CustomerRequest trParams = new CustomerRequest(); BraintreeGateway gateway = new BraintreeGateway(Environment.DEVELOPMENT, "integration_merchant_id", "bad_public", "bad_private"); String queryString = TestHelper.simulateFormPostForTR(gateway, trParams, request, gateway.customer().transparentRedirectURLForCreate()); gateway.customer().confirmTransparentRedirect(queryString); } @Test(expected = AuthenticationException.class) public void authenticationExceptionRaisedWhenBadCredentialsUsingNewTR() { CustomerRequest request = new CustomerRequest(); CustomerRequest trParams = new CustomerRequest(); BraintreeGateway gateway = new BraintreeGateway(Environment.DEVELOPMENT, "integration_merchant_id", "bad_public", "bad_private"); String queryString = TestHelper.simulateFormPostForTR(gateway, trParams, request, gateway.transparentRedirect().url()); gateway.transparentRedirect().confirmCustomer(queryString); } }