package com.braintreegateway.integrationtest;
import com.braintreegateway.*;
import com.braintreegateway.exceptions.NotFoundException;
import org.junit.Test;
import java.util.Calendar;
import java.util.Map;
import static org.junit.Assert.*;
public class AddressIT extends IntegrationTest {
@Test
public void create() {
Customer customer = gateway.customer().create(new CustomerRequest()).getTarget();
AddressRequest request = new AddressRequest().
firstName("Joe").
lastName("Smith").
company("Smith Co.").
streetAddress("1 E Main St").
extendedAddress("Unit 2").
locality("Chicago").
region("Illinois").
postalCode("60607").
countryName("United States of America").
countryCodeAlpha2("US").
countryCodeAlpha3("USA").
countryCodeNumeric("840");
Result<Address> createResult = gateway.address().create(customer.getId(), request);
assertTrue(createResult.isSuccess());
Address address = createResult.getTarget();
assertEquals("Joe", address.getFirstName());
assertEquals("Smith", address.getLastName());
assertEquals("Smith Co.", address.getCompany());
assertEquals("1 E Main St", address.getStreetAddress());
assertEquals("Unit 2", address.getExtendedAddress());
assertEquals("Chicago", address.getLocality());
assertEquals("Illinois", address.getRegion());
assertEquals("60607", address.getPostalCode());
assertEquals("United States of America", address.getCountryName());
assertEquals("US", address.getCountryCodeAlpha2());
assertEquals("USA", address.getCountryCodeAlpha3());
assertEquals("840", address.getCountryCodeNumeric());
assertEquals(Calendar.getInstance().get(Calendar.YEAR), address.getCreatedAt().get(Calendar.YEAR));
assertEquals(Calendar.getInstance().get(Calendar.YEAR), address.getUpdatedAt().get(Calendar.YEAR));
}
@Test
public void update() {
Customer customer = gateway.customer().create(new CustomerRequest()).getTarget();
AddressRequest request = new AddressRequest().
streetAddress("1 E Main St").
extendedAddress("Unit 2").
locality("Chicago").
region("Illinois").
postalCode("60607").
countryName("United States of America");
Result<Address> result = gateway.address().create(customer.getId(), request);
assertTrue(result.isSuccess());
Address address = result.getTarget();
AddressRequest updateRequest = new AddressRequest().
streetAddress("2 E Main St").
extendedAddress("Unit 3").
locality("Bartlett").
region("Mass").
postalCode("12345").
countryName("Mexico").
countryCodeAlpha2("MX").
countryCodeAlpha3("MEX").
countryCodeNumeric("484");
Result<Address> updateResult = gateway.address().update(address.getCustomerId(), address.getId(), updateRequest);
assertTrue(updateResult.isSuccess());
Address updatedAddress = updateResult.getTarget();
assertEquals("2 E Main St", updatedAddress.getStreetAddress());
assertEquals("Unit 3", updatedAddress.getExtendedAddress());
assertEquals("Bartlett", updatedAddress.getLocality());
assertEquals("Mass", updatedAddress.getRegion());
assertEquals("12345", updatedAddress.getPostalCode());
assertEquals("Mexico", updatedAddress.getCountryName());
assertEquals("MX", updatedAddress.getCountryCodeAlpha2());
assertEquals("MEX", updatedAddress.getCountryCodeAlpha3());
assertEquals("484", updatedAddress.getCountryCodeNumeric());
}
@Test
public void find() {
Customer customer = gateway.customer().create(new CustomerRequest()).getTarget();
AddressRequest request = new AddressRequest().
streetAddress("1 E Main St");
Result<Address> createResult = gateway.address().create(customer.getId(), request);
assertTrue(createResult.isSuccess());
Address address = createResult.getTarget();
Address foundAddress = gateway.address().find(address.getCustomerId(), address.getId());
assertEquals("1 E Main St", foundAddress.getStreetAddress());
}
@Test
public void findWithEmptyIds() {
try {
gateway.address().find(" ", "address_id");
fail("Should throw NotFoundException");
} catch (NotFoundException e) {
}
try {
gateway.address().find("customer_id", " ");
fail("Should throw NotFoundException");
} catch (NotFoundException e) {
}
}
@Test
public void delete() {
Customer customer = gateway.customer().create(new CustomerRequest()).getTarget();
AddressRequest request = new AddressRequest().
streetAddress("1 E Main St").
extendedAddress("Unit 2").
locality("Chicago").
region("Illinois").
postalCode("60607").
countryName("United States of America");
Result<Address> createResult = gateway.address().create(customer.getId(), request);
assertTrue(createResult.isSuccess());
Address address = createResult.getTarget();
Result<Address> deleteResult = gateway.address().delete(address.getCustomerId(), address.getId());
assertTrue(deleteResult.isSuccess());
try {
gateway.address().find(address.getCustomerId(), address.getId());
fail();
} catch (NotFoundException e) {
}
}
@Test
public void validationErrors() {
Customer customer = gateway.customer().create(new CustomerRequest()).getTarget();
AddressRequest request = new AddressRequest().
countryName("Tunisia").
countryCodeAlpha2("US");
Result<Address> createResult = gateway.address().create(customer.getId(), request);
assertFalse(createResult.isSuccess());
assertNull(createResult.getTarget());
ValidationErrors errors = createResult.getErrors();
assertEquals(ValidationErrorCode.ADDRESS_INCONSISTENT_COUNTRY, errors.forObject("address").onField("base").get(0).getCode());
}
@Test
public void validationErrorsOnCountryCodeAlpha2() {
Customer customer = gateway.customer().create(new CustomerRequest()).getTarget();
AddressRequest request = new AddressRequest().
countryCodeAlpha2("ZZ");
Result<Address> createResult = gateway.address().create(customer.getId(), request);
assertFalse(createResult.isSuccess());
assertNull(createResult.getTarget());
ValidationErrors errors = createResult.getErrors();
assertEquals(ValidationErrorCode.ADDRESS_COUNTRY_CODE_ALPHA2_IS_NOT_ACCEPTED, errors.forObject("address").onField("countryCodeAlpha2").get(0).getCode());
}
@Test
public void validationErrorsOnCountryCodeAlpha3() {
Customer customer = gateway.customer().create(new CustomerRequest()).getTarget();
AddressRequest request = new AddressRequest().
countryCodeAlpha3("ZZZ");
Result<Address> createResult = gateway.address().create(customer.getId(), request);
assertFalse(createResult.isSuccess());
assertNull(createResult.getTarget());
ValidationErrors errors = createResult.getErrors();
assertEquals(ValidationErrorCode.ADDRESS_COUNTRY_CODE_ALPHA3_IS_NOT_ACCEPTED, errors.forObject("address").onField("countryCodeAlpha3").get(0).getCode());
}
@Test
public void validationErrorsOnCountryCodeNumeric() {
Customer customer = gateway.customer().create(new CustomerRequest()).getTarget();
AddressRequest request = new AddressRequest().
countryCodeNumeric("000");
Result<Address> createResult = gateway.address().create(customer.getId(), request);
assertFalse(createResult.isSuccess());
assertNull(createResult.getTarget());
ValidationErrors errors = createResult.getErrors();
assertEquals(ValidationErrorCode.ADDRESS_COUNTRY_CODE_NUMERIC_IS_NOT_ACCEPTED, errors.forObject("address").onField("countryCodeNumeric").get(0).getCode());
}
@Test
public void getParamsOnError() {
Customer customer = gateway.customer().create(new CustomerRequest()).getTarget();
AddressRequest request = new AddressRequest().
countryName("United States of Hammer");
Result<Address> createResult = gateway.address().create(customer.getId(), request);
assertFalse(createResult.isSuccess());
Map<String, String> parameters = createResult.getParameters();
assertEquals("integration_merchant_id", parameters.get("merchant_id"));
assertEquals(customer.getId(), parameters.get("customer_id"));
assertEquals("United States of Hammer", parameters.get("address[country_name]"));
}
}