package com.braintreegateway.integrationtest;
import com.braintreegateway.*;
import com.braintreegateway.SandboxValues.CreditCardNumber;
import com.braintreegateway.SandboxValues.TransactionAmount;
import com.braintreegateway.test.Nonce;
import com.braintreegateway.testhelpers.TestHelper;
import org.junit.Test;
import org.junit.Before;
import java.net.URL;
import java.util.*;
import static org.junit.Assert.*;
public class MerchantIT extends IntegrationTest {
private MerchantAccount getMerchantAccountForCurrency(Merchant merchant, String currency) {
for (MerchantAccount merchantAccount : merchant.getMerchantAccounts()) {
if (merchantAccount.getId().equals(currency)) {
return merchantAccount;
}
}
return null;
}
@Before
public void createGateway() {
this.gateway = new BraintreeGateway(
"client_id$development$integration_client_id",
"client_secret$development$integration_client_secret"
);
}
@Test
public void createMerchantTest() {
MerchantRequest request = new MerchantRequest().
email("name@email.com").
countryCodeAlpha3("USA").
paymentMethods(Arrays.asList("credit_card", "paypal")).
scope("read_write,shared_vault_transactions");
Result<Merchant> result = gateway.merchant().create(request);
assertTrue(result.isSuccess());
assertTrue(result.getTarget().getId() != null && !result.getTarget().getId().isEmpty());
assertEquals("name@email.com", result.getTarget().getEmail());
assertEquals("name@email.com", result.getTarget().getCompanyName());
assertEquals("USA", result.getTarget().getCountryCodeAlpha3());
assertEquals("US", result.getTarget().getCountryCodeAlpha2());
assertEquals("840", result.getTarget().getCountryCodeNumeric());
assertEquals("United States of America", result.getTarget().getCountryName());
assertTrue(result.getTarget().getCredentials().getAccessToken().startsWith("access_token"));
assertTrue(result.getTarget().getCredentials().getExpiresAt().after(Calendar.getInstance()));
assertTrue(result.getTarget().getCredentials().getRefreshToken().startsWith("refresh_token"));
assertEquals(result.getTarget().getCredentials().getScope(), "read_write,shared_vault_transactions");
assertEquals("bearer", result.getTarget().getCredentials().getTokenType());
}
@Test
public void createFailsWithInvalidPaymentMethods() {
MerchantRequest request = new MerchantRequest().
email("name@email.com").
countryCodeAlpha3("USA").
paymentMethods(Arrays.asList("fake_money"));
Result<Merchant> result = gateway.merchant().create(request);
assertFalse(result.isSuccess());
assertEquals(ValidationErrorCode.MERCHANT_PAYMENT_METHODS_ARE_INVALID, result.getErrors().forObject("merchant").onField("payment-methods").get(0).getCode());
}
@Test
public void createWithPayPalOnly() {
this.gateway = new BraintreeGateway("client_id$development$signup_client_id", "client_secret$development$signup_client_secret");
MerchantRequest request = new MerchantRequest().
email("name2@email.com").
countryCodeAlpha3("USA").
paymentMethods(Arrays.asList("paypal")).
payPalAccount().
clientId("paypal_client_id").
clientSecret("paypal_client_secret").
done();
Result<Merchant> result = gateway.merchant().create(request);
assertTrue(result.isSuccess());
assertTrue(result.getTarget().getId() != null && !result.getTarget().getId().isEmpty());
assertTrue(result.getTarget().getCredentials().getAccessToken().startsWith("access_token"));
assertTrue(result.getTarget().getCredentials().getRefreshToken().startsWith("refresh_token"));
assertTrue(result.getTarget().getCredentials().getExpiresAt().after(Calendar.getInstance()));
assertEquals("bearer", result.getTarget().getCredentials().getTokenType());
}
@Test
public void payPalOnlyAccountCannotRunCreditCardTransactions() {
this.gateway = new BraintreeGateway("client_id$development$signup_client_id", "client_secret$development$signup_client_secret");
MerchantRequest merchantRequest = new MerchantRequest().
email("name2@email.com").
countryCodeAlpha3("USA").
paymentMethods(Arrays.asList("paypal")).
payPalAccount().
clientId("paypal_client_id").
clientSecret("paypal_client_secret").
done();
Result<Merchant> result = gateway.merchant().create(merchantRequest);
assertTrue(result.isSuccess());
assertTrue(result.getTarget().getId() != null && !result.getTarget().getId().isEmpty());
BraintreeGateway gateway = new BraintreeGateway(result.getTarget().getCredentials().getAccessToken());
TransactionRequest transactionRequest = new TransactionRequest().
amount(TransactionAmount.AUTHORIZE.amount).
creditCard().
number(CreditCardNumber.VISA.number).
expirationDate("05/2009").
done();
Result<Transaction> transactionResult = gateway.transaction().sale(transactionRequest);
assertTrue(transactionResult.getMessage().contains("Merchant account does not support payment instrument."));
assertFalse(transactionResult.isSuccess());
}
@Test
public void createMultiCurrencyUSMerchant() {
this.gateway = new BraintreeGateway("client_id$development$signup_client_id", "client_secret$development$signup_client_secret");
MerchantRequest request = new MerchantRequest().
email("name@email.com").
countryCodeAlpha3("USA").
companyName("Ziarog LTD").
paymentMethods(Arrays.asList(new String[]{"credit_card", "paypal"})).
currencies(Arrays.asList("GBP", "USD"));
Result<Merchant> result = gateway.merchant().create(request);
assertTrue(result.isSuccess());
assertTrue(result.getTarget().getId() != null && !result.getTarget().getId().isEmpty());
assertEquals("name@email.com", result.getTarget().getEmail());
assertEquals("Ziarog LTD", result.getTarget().getCompanyName());
assertEquals("USA", result.getTarget().getCountryCodeAlpha3());
assertEquals("US", result.getTarget().getCountryCodeAlpha2());
assertEquals("840", result.getTarget().getCountryCodeNumeric());
assertEquals("United States of America", result.getTarget().getCountryName());
assertTrue(result.getTarget().getCredentials().getAccessToken().startsWith("access_token"));
assertTrue(result.getTarget().getCredentials().getExpiresAt().after(Calendar.getInstance()));
assertTrue(result.getTarget().getCredentials().getRefreshToken().startsWith("refresh_token"));
assertEquals("bearer", result.getTarget().getCredentials().getTokenType());
assertEquals(2, result.getTarget().getMerchantAccounts().size());
MerchantAccount usdMerchantAccount = getMerchantAccountForCurrency(result.getTarget(), "USD");
assertNotNull(usdMerchantAccount);
assertEquals("USD", usdMerchantAccount.getCurrencyIsoCode());
assertTrue(usdMerchantAccount.isDefault());
MerchantAccount gbpMerchantAccount = getMerchantAccountForCurrency(result.getTarget(), "GBP");
assertNotNull(gbpMerchantAccount);
assertEquals("GBP", gbpMerchantAccount.getCurrencyIsoCode());
assertFalse(gbpMerchantAccount.isDefault());
}
@Test
public void createMultiCurrencyEUMerchant() {
this.gateway = new BraintreeGateway("client_id$development$signup_client_id", "client_secret$development$signup_client_secret");
MerchantRequest request = new MerchantRequest().
email("name@email.com").
countryCodeAlpha3("GBR").
companyName("Ziarog LTD").
paymentMethods(Arrays.asList("credit_card", "paypal")).
currencies(Arrays.asList("GBP", "USD"));
Result<Merchant> result = gateway.merchant().create(request);
assertTrue(result.isSuccess());
assertTrue(result.getTarget().getId() != null && !result.getTarget().getId().isEmpty());
assertEquals("name@email.com", result.getTarget().getEmail());
assertEquals("Ziarog LTD", result.getTarget().getCompanyName());
assertEquals("GBR", result.getTarget().getCountryCodeAlpha3());
assertEquals("GB", result.getTarget().getCountryCodeAlpha2());
assertEquals("826", result.getTarget().getCountryCodeNumeric());
assertEquals("United Kingdom", result.getTarget().getCountryName());
assertTrue(result.getTarget().getCredentials().getAccessToken().startsWith("access_token"));
assertTrue(result.getTarget().getCredentials().getExpiresAt().after(Calendar.getInstance()));
assertTrue(result.getTarget().getCredentials().getRefreshToken().startsWith("refresh_token"));
assertEquals("bearer", result.getTarget().getCredentials().getTokenType());
assertEquals(2, result.getTarget().getMerchantAccounts().size());
MerchantAccount usdMerchantAccount = getMerchantAccountForCurrency(result.getTarget(), "USD");
assertNotNull(usdMerchantAccount);
assertEquals("USD", usdMerchantAccount.getCurrencyIsoCode());
assertFalse(usdMerchantAccount.isDefault());
MerchantAccount gbpMerchantAccount = getMerchantAccountForCurrency(result.getTarget(), "GBP");
assertNotNull(gbpMerchantAccount);
assertEquals("GBP", gbpMerchantAccount.getCurrencyIsoCode());
assertTrue(gbpMerchantAccount.isDefault());
}
@Test
public void createPayPalOnlyMultiCurrencyMerchant() {
this.gateway = new BraintreeGateway("client_id$development$signup_client_id", "client_secret$development$signup_client_secret");
MerchantRequest request = new MerchantRequest().
email("name@email.com").
countryCodeAlpha3("USA").
companyName("Ziarog LTD").
paymentMethods(Arrays.asList("paypal")).
currencies(Arrays.asList("GBP", "USD")).
payPalAccount().
clientId("paypal_client_id").
clientSecret("paypal_client_secret").
done();
Result<Merchant> result = gateway.merchant().create(request);
assertTrue(result.isSuccess());
assertTrue(result.getTarget().getId() != null && !result.getTarget().getId().isEmpty());
assertEquals("name@email.com", result.getTarget().getEmail());
assertEquals("Ziarog LTD", result.getTarget().getCompanyName());
assertEquals("USA", result.getTarget().getCountryCodeAlpha3());
assertEquals("US", result.getTarget().getCountryCodeAlpha2());
assertEquals("840", result.getTarget().getCountryCodeNumeric());
assertEquals("United States of America", result.getTarget().getCountryName());
assertTrue(result.getTarget().getCredentials().getAccessToken().startsWith("access_token"));
assertTrue(result.getTarget().getCredentials().getExpiresAt().after(Calendar.getInstance()));
assertTrue(result.getTarget().getCredentials().getRefreshToken().startsWith("refresh_token"));
assertEquals("bearer", result.getTarget().getCredentials().getTokenType());
assertEquals(2, result.getTarget().getMerchantAccounts().size());
MerchantAccount usdMerchantAccount = getMerchantAccountForCurrency(result.getTarget(), "USD");
assertNotNull(usdMerchantAccount);
assertEquals("USD", usdMerchantAccount.getCurrencyIsoCode());
assertTrue(usdMerchantAccount.isDefault());
MerchantAccount gbpMerchantAccount = getMerchantAccountForCurrency(result.getTarget(), "GBP");
assertNotNull(gbpMerchantAccount);
assertEquals("GBP", gbpMerchantAccount.getCurrencyIsoCode());
assertFalse(gbpMerchantAccount.isDefault());
}
@Test
public void createMultiCurrencyMerchantWithNoCurrenciesProvided() {
this.gateway = new BraintreeGateway("client_id$development$signup_client_id", "client_secret$development$signup_client_secret");
MerchantRequest request = new MerchantRequest().
email("name@email.com").
countryCodeAlpha3("JPN").
paymentMethods(Arrays.asList("paypal")).
payPalAccount().
clientId("paypal_client_id").
clientSecret("paypal_client_secret").
done();
Result<Merchant> result = gateway.merchant().create(request);
assertTrue(result.isSuccess());
assertTrue(result.getTarget().getId() != null && !result.getTarget().getId().isEmpty());
assertEquals("name@email.com", result.getTarget().getEmail());
assertEquals("name@email.com", result.getTarget().getCompanyName());
assertEquals("JPN", result.getTarget().getCountryCodeAlpha3());
assertEquals("JP", result.getTarget().getCountryCodeAlpha2());
assertEquals("392", result.getTarget().getCountryCodeNumeric());
assertEquals("Japan", result.getTarget().getCountryName());
assertTrue(result.getTarget().getCredentials().getAccessToken().startsWith("access_token"));
assertTrue(result.getTarget().getCredentials().getExpiresAt().after(Calendar.getInstance()));
assertTrue(result.getTarget().getCredentials().getRefreshToken().startsWith("refresh_token"));
assertEquals("bearer", result.getTarget().getCredentials().getTokenType());
assertEquals(1, result.getTarget().getMerchantAccounts().size());
assertEquals("JPY", result.getTarget().getMerchantAccounts().get(0).getId());
assertEquals("JPY", result.getTarget().getMerchantAccounts().get(0).getCurrencyIsoCode());
assertTrue(result.getTarget().getMerchantAccounts().get(0).isDefault());
}
@Test
public void createMultiCurrencyMerchantWithUnsupportedCountryAndNoCurrencies() {
this.gateway = new BraintreeGateway("client_id$development$signup_client_id", "client_secret$development$signup_client_secret");
MerchantRequest request = new MerchantRequest().
email("name@email.com").
countryCodeAlpha3("YEM").
paymentMethods(Arrays.asList("paypal")).
payPalAccount().
clientId("paypal_client_id").
clientSecret("paypal_client_secret").
done();
Result<Merchant> result = gateway.merchant().create(request);
assertTrue(result.isSuccess());
assertTrue(result.getTarget().getId() != null && !result.getTarget().getId().isEmpty());
assertEquals("name@email.com", result.getTarget().getEmail());
assertEquals("name@email.com", result.getTarget().getCompanyName());
assertEquals("YEM", result.getTarget().getCountryCodeAlpha3());
assertEquals("YE", result.getTarget().getCountryCodeAlpha2());
assertEquals("887", result.getTarget().getCountryCodeNumeric());
assertEquals("Yemen", result.getTarget().getCountryName());
assertTrue(result.getTarget().getCredentials().getAccessToken().startsWith("access_token"));
assertTrue(result.getTarget().getCredentials().getExpiresAt().after(Calendar.getInstance()));
assertTrue(result.getTarget().getCredentials().getRefreshToken().startsWith("refresh_token"));
assertEquals("bearer", result.getTarget().getCredentials().getTokenType());
assertEquals(1, result.getTarget().getMerchantAccounts().size());
assertEquals("USD", result.getTarget().getMerchantAccounts().get(0).getId());
assertEquals("USD", result.getTarget().getMerchantAccounts().get(0).getCurrencyIsoCode());
assertTrue(result.getTarget().getMerchantAccounts().get(0).isDefault());
}
@Test
public void returnErrorIfInvalidCurrencyPassed() {
this.gateway = new BraintreeGateway("client_id$development$signup_client_id", "client_secret$development$signup_client_secret");
MerchantRequest request = new MerchantRequest().
email("name@email.com").
countryCodeAlpha3("USA").
paymentMethods(Arrays.asList("paypal")).
currencies(Arrays.asList("GBP", "FAKE")).
payPalAccount().
clientId("paypal_client_id").
clientSecret("paypal_client_secret").
done();
Result<Merchant> result = gateway.merchant().create(request);
assertFalse(result.isSuccess());
assertEquals(
ValidationErrorCode.MERCHANT_CURRENCIES_ARE_INVALID,
result.getErrors().forObject("merchant").onField("currencies").get(0).getCode()
);
}
}