package com.braintreegateway.integrationtest; import com.braintreegateway.*; import com.braintreegateway.testhelpers.TestHelper; import com.braintreegateway.SandboxValues.CreditCardNumber; import com.braintreegateway.util.NodeWrapper; import com.braintreegateway.util.NodeWrapperFactory; import org.junit.Test; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; import java.util.List; import static org.junit.Assert.*; public class CreditCardVerificationIT extends IntegrationTest { @Test public void createVerification() { CreditCardVerificationRequest request = new CreditCardVerificationRequest(). creditCard(). number(CreditCardNumber.VISA.number). expirationDate("05/2009"). cvv("123"). billingAddress(). company("Braintree"). countryCodeAlpha2("US"). countryCodeAlpha3("USA"). countryCodeNumeric("840"). countryName("United States of America"). extendedAddress("Unit B"). firstName("John"). lastName("Smith"). locality("San Francisco"). postalCode("60606"). region("CA"). streetAddress("123 Townsend St"). done(). done(). options(). amount("5.00"). done(); Result<CreditCardVerification> result = gateway.creditCardVerification().create(request); assertTrue(result.isSuccess()); CreditCardVerification verification = result.getTarget(); assertEquals(verification.getBillingAddress().getPostalCode(), "60606"); } @Test public void createVerificationFailsForInvalidOptions() { CreditCardVerificationRequest request = new CreditCardVerificationRequest(). creditCard(). number(CreditCardNumber.VISA.number). expirationDate("05/2009"). cvv("123"). billingAddress(). company("Braintree"). countryCodeAlpha2("US"). countryCodeAlpha3("USA"). countryCodeNumeric("840"). countryName("United States of America"). extendedAddress("Unit B"). firstName("John"). lastName("Smith"). locality("San Francisco"). postalCode("60606"). region("CA"). streetAddress("123 Townsend St"). done(). done(). options(). amount("-5.00"). done(); Result<CreditCardVerification> result = gateway.creditCardVerification().create(request); assertFalse(result.isSuccess()); assertEquals(ValidationErrorCode.VERIFICATION_OPTIONS_AMOUNT_CANNOT_BE_NEGATIVE, result.getErrors(). forObject("verification"). forObject("options"). onField("amount"). get(0). getCode()); } @Test public void constructFromResponse() { StringBuilder builder = new StringBuilder(); builder.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); builder.append("<api-error-response>"); builder.append(" <verification>"); builder.append(" <amount>1.00</amount>"); builder.append(" <currency-iso-code>USD</currency-iso-code>"); builder.append(" <avs-error-response-code nil=\"true\"></avs-error-response-code>"); builder.append(" <avs-postal-code-response-code>I</avs-postal-code-response-code>"); builder.append(" <status>processor_declined</status>"); builder.append(" <processor-response-code>2000</processor-response-code>"); builder.append(" <avs-street-address-response-code>I</avs-street-address-response-code>"); builder.append(" <processor-response-text>Do Not Honor</processor-response-text>"); builder.append(" <cvv-response-code>M</cvv-response-code>"); builder.append(" <id>verification_id</id>"); builder.append(" <credit-card>"); builder.append(" <cardholder-name>Joe Johnson</cardholder-name>"); builder.append(" <number>4111111111111111</number>"); builder.append(" <expiration-date>12/2012</expiration-date>"); builder.append(" <prepaid>Unknown</prepaid>"); builder.append(" </credit-card>"); builder.append(" <billing>"); builder.append(" <postal-code>60601</postal-code>"); builder.append(" </billing>"); builder.append(" </verification>"); builder.append(" <errors>"); builder.append(" <errors type=\"array\"/>"); builder.append(" </errors>"); builder.append("</api-error-response>"); NodeWrapper verificationNode = (NodeWrapperFactory.instance.create(builder.toString())).findFirst("verification"); CreditCardVerification verification = new CreditCardVerification(verificationNode); assertEquals(new BigDecimal("1.00"), verification.getAmount()); assertEquals("USD", verification.getCurrencyIsoCode()); assertEquals(null, verification.getAvsErrorResponseCode()); assertEquals("I", verification.getAvsPostalCodeResponseCode()); assertEquals(CreditCardVerification.Status.PROCESSOR_DECLINED, verification.getStatus()); assertEquals("2000", verification.getProcessorResponseCode()); assertEquals("I", verification.getAvsStreetAddressResponseCode()); assertEquals("Do Not Honor", verification.getProcessorResponseText()); assertEquals("M", verification.getCvvResponseCode()); assertEquals(CreditCard.Prepaid.UNKNOWN, verification.getCreditCard().getPrepaid()); } @Test public void searchOnVerificationId() { CustomerRequest request = new CustomerRequest(). creditCard(). number("4000111111111115"). expirationDate("11/12"). options(). verifyCard(true). done(). done(); Result<Customer> result = gateway.customer().create(request); assertFalse(result.isSuccess()); CreditCardVerification verification = result.getCreditCardVerification(); CreditCardVerificationSearchRequest searchRequest = new CreditCardVerificationSearchRequest(). id().is(verification.getId()); ResourceCollection<CreditCardVerification> collection = gateway.creditCardVerification().search(searchRequest); assertEquals(1, collection.getMaximumSize()); assertEquals(verification.getId(), collection.getFirst().getId()); } @Test public void searchOnAllTextFields() { CustomerRequest request = new CustomerRequest(). email("mark.a@example.com"). creditCard(). number("4111111111111111"). expirationDate("11/12"). cardholderName("Tom Smith"). billingAddress(). postalCode("44444"). done(). options(). verifyCard(true). done(). done(); Result<Customer> result = gateway.customer().create(request); assertTrue(result.isSuccess()); CreditCardVerification verification = result.getCreditCardVerification(); CreditCardVerificationSearchRequest searchRequest = new CreditCardVerificationSearchRequest(). customerId().is(result.getTarget().getId()). creditCardCardholderName().is("Tom Smith"). creditCardExpirationDate().is("11/2012"). creditCardNumber().is("4111111111111111"). billingPostalCode().is("44444"). customerEmail().is("mark.a@example.com"); ResourceCollection<CreditCardVerification> collection = gateway.creditCardVerification().search(searchRequest); assertEquals(result.getTarget().getCreditCards().get(0).getToken(), collection.getFirst().getCreditCard().getToken()); } @Test public void searchOnMultipleValueFields() { CustomerRequest requestOne = new CustomerRequest(). creditCard(). number("4000111111111115"). expirationDate("11/12"). options(). verifyCard(true). done(). done(); Result<Customer> resultOne = gateway.customer().create(requestOne); assertFalse(resultOne.isSuccess()); CreditCardVerification verificationOne = resultOne.getCreditCardVerification(); CustomerRequest requestTwo = new CustomerRequest(). creditCard(). number("5105105105105100"). expirationDate("06/12"). options(). verifyCard(true). done(). done(); Result<Customer> resultTwo = gateway.customer().create(requestTwo); assertFalse(resultTwo.isSuccess()); CreditCardVerification verificationTwo = resultTwo.getCreditCardVerification(); CreditCardVerificationSearchRequest searchRequest = new CreditCardVerificationSearchRequest(). ids().in(verificationOne.getId(), verificationTwo.getId()). creditCardCardType().in(CreditCard.CardType.VISA, CreditCard.CardType.MASTER_CARD). status().in(verificationOne.getStatus(), verificationTwo.getStatus()); ResourceCollection<CreditCardVerification> collection = gateway.creditCardVerification().search(searchRequest); assertEquals(2, collection.getMaximumSize()); List<String> expectedIds = new ArrayList<String>(Arrays.asList(verificationOne.getId(), verificationTwo.getId())); assertTrue(TestHelper.listIncludes(expectedIds, collection.getFirst().getId())); } @Test public void searchOnRangeFields() { CustomerRequest request = new CustomerRequest(). creditCard(). number("4000111111111115"). expirationDate("11/12"). cardholderName("Tom Smith"). options(). verifyCard(true). done(). done(); Result<Customer> result = gateway.customer().create(request); assertFalse(result.isSuccess()); CreditCardVerification verification = result.getCreditCardVerification(); Calendar createdAt = verification.getCreatedAt(); Calendar threeDaysEarlier = ((Calendar) createdAt.clone()); threeDaysEarlier.add(Calendar.DAY_OF_MONTH, -3); Calendar oneDayEarlier = ((Calendar) createdAt.clone()); oneDayEarlier.add(Calendar.DAY_OF_MONTH, -1); Calendar oneDayLater = ((Calendar) createdAt.clone()); oneDayLater.add(Calendar.DAY_OF_MONTH, 1); CreditCardVerificationSearchRequest searchRequest = new CreditCardVerificationSearchRequest(). id().is(verification.getId()). createdAt().between(oneDayEarlier, oneDayLater); assertEquals(1, gateway.creditCardVerification().search(searchRequest).getMaximumSize()); searchRequest = new CreditCardVerificationSearchRequest(). id().is(verification.getId()). createdAt().greaterThanOrEqualTo(oneDayEarlier); assertEquals(1, gateway.creditCardVerification().search(searchRequest).getMaximumSize()); searchRequest = new CreditCardVerificationSearchRequest(). id().is(verification.getId()). createdAt().lessThanOrEqualTo(oneDayLater); assertEquals(1, gateway.creditCardVerification().search(searchRequest).getMaximumSize()); searchRequest = new CreditCardVerificationSearchRequest(). id().is(verification.getId()). createdAt().between(threeDaysEarlier, oneDayEarlier); assertEquals(0, gateway.creditCardVerification().search(searchRequest).getMaximumSize()); } @Test public void verificationHasCardTypeIndicators() { CustomerRequest request = new CustomerRequest(). creditCard(). number("4000111111111115"). expirationDate("11/12"). cardholderName("Tom Smith"). options(). verifyCard(true). done(). done(); Result<Customer> result = gateway.customer().create(request); CreditCardVerification verification = result.getCreditCardVerification(); assertEquals(CreditCard.Commercial.UNKNOWN, verification.getCreditCard().getCommercial()); assertEquals(CreditCard.Debit.UNKNOWN, verification.getCreditCard().getDebit()); assertEquals(CreditCard.DurbinRegulated.UNKNOWN, verification.getCreditCard().getDurbinRegulated()); assertEquals(CreditCard.Healthcare.UNKNOWN, verification.getCreditCard().getHealthcare()); assertEquals(CreditCard.Payroll.UNKNOWN, verification.getCreditCard().getPayroll()); assertEquals(CreditCard.Prepaid.UNKNOWN, verification.getCreditCard().getPrepaid()); assertEquals("Unknown", verification.getCreditCard().getCountryOfIssuance()); assertEquals("Unknown", verification.getCreditCard().getIssuingBank()); assertEquals("Unknown", verification.getCreditCard().getProductId()); } }