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.Random; import static org.junit.Assert.*; public class PayPalAccountIT extends IntegrationTest { @Test public void findsPayPalAccountsByToken() { String nonce = TestHelper.generateFuturePaymentPayPalNonce(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()); assertNotNull(result.getTarget().getImageUrl()); PayPalAccount found = gateway.paypalAccount().find(result.getTarget().getToken()); assertNotNull(found); assertEquals(found.getToken(), result.getTarget().getToken()); assertNotNull(found.getImageUrl()); assertNotNull(found.getCreatedAt()); assertNotNull(found.getUpdatedAt()); assertNotNull(found.isDefault()); assertNotNull(found.getEmail()); } @Test public void findsBillingAgreementsPayPalAccountsByToken() { String nonce = TestHelper.generateBillingAgreementPayPalNonce(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()); assertNotNull(result.getTarget().getImageUrl()); PayPalAccount found = gateway.paypalAccount().find(result.getTarget().getToken()); assertNotNull(found); assertEquals(found.getToken(), result.getTarget().getToken()); assertNotNull(found.getImageUrl()); assertNotNull(found.getCreatedAt()); assertNotNull(found.getUpdatedAt()); assertNotNull(found.isDefault()); assertNotNull(found.getEmail()); assertNotNull(found.getBillingAgreementId()); } @Test public void findsBillingAgreementsPayPalAccountsByTokenFromFakeNonce() { String nonce = Nonce.PayPalBillingAgreement; 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()); assertNotNull(result.getTarget().getImageUrl()); PayPalAccount found = gateway.paypalAccount().find(result.getTarget().getToken()); assertNotNull(found); assertEquals(found.getToken(), result.getTarget().getToken()); assertNotNull(found.getImageUrl()); assertNotNull(found.getCreatedAt()); assertNotNull(found.getUpdatedAt()); assertNotNull(found.isDefault()); assertNotNull(found.getEmail()); assertNotNull(found.getBillingAgreementId()); } @Test public void findReturnsSubscriptionsAssociatedWithAPaypalAccount() { String nonce = TestHelper.generateFuturePaymentPayPalNonce(gateway); Result<Customer> customerResult = gateway.customer().create(new CustomerRequest()); assertTrue(customerResult.isSuccess()); Customer customer = customerResult.getTarget(); PaymentMethodRequest paypalRequest = new PaymentMethodRequest(). customerId(customer.getId()). paymentMethodNonce(nonce); Result<? extends PaymentMethod> paypalResult = gateway.paymentMethod().create(paypalRequest); assertTrue(paypalResult.isSuccess()); PaymentMethod paymentMethod = paypalResult.getTarget(); Plan plan = PlanFixture.PLAN_WITHOUT_TRIAL; SubscriptionRequest subscriptionRequest = new SubscriptionRequest(). paymentMethodToken(paymentMethod.getToken()). planId(plan.getId()); Result<Subscription> subscriptionResult = gateway.subscription().create(subscriptionRequest); assertTrue(subscriptionResult.isSuccess()); Subscription subscription1 = subscriptionResult.getTarget(); subscriptionResult = gateway.subscription().create(subscriptionRequest); assertTrue(subscriptionResult.isSuccess()); Subscription subscription2 = subscriptionResult.getTarget(); PayPalAccount found = gateway.paypalAccount().find(paymentMethod.getToken()); assertNotNull(found); assertTrue(found.getSubscriptions().contains(subscription1)); assertTrue(found.getSubscriptions().contains(subscription2)); } @Test public void findThrowsNotFoundExceptionWhenPayPalAccountIsMissing() { try { gateway.paypalAccount().find(" "); fail("Should throw NotFoundException"); } catch (NotFoundException e) { } } @Test public void findThrowsNotFoundExceptionWhenTokenPointsToCreditCard() { Customer customer = gateway.customer().create(new CustomerRequest()).getTarget(); CreditCardRequest cardRequest = new CreditCardRequest(). customerId(customer.getId()). cardholderName("John Doe"). cvv("123"). number("5105105105105100"). expirationDate("05/12"); CreditCard card = gateway.creditCard().create(cardRequest).getTarget(); try { gateway.paypalAccount().find(card.getToken()); fail("Should throw NotFoundException"); } catch (NotFoundException e) { } } @Test public void deletePayPalAccount() { String nonce = TestHelper.generateFuturePaymentPayPalNonce(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()); Result<PayPalAccount> deleteResult = gateway.paypalAccount().delete(result.getTarget().getToken()); assertTrue(deleteResult.isSuccess()); } @Test public void updateCanUpdateToken() { String nonce = TestHelper.generateFuturePaymentPayPalNonce(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()); String newToken = String.valueOf(new Random().nextInt()); PayPalAccountRequest updateRequest = new PayPalAccountRequest(). token(newToken); Result<PayPalAccount> updateResult = gateway.paypalAccount().update(result.getTarget().getToken(), updateRequest); assertTrue(updateResult.isSuccess()); assertEquals(newToken, updateResult.getTarget().getToken()); } @Test public void updateCanMakeDefault() { Result<Customer> customerResult = gateway.customer().create(new CustomerRequest()); assertTrue(customerResult.isSuccess()); Customer customer = customerResult.getTarget(); CreditCardRequest cardRequest = new CreditCardRequest(). customerId(customer.getId()). cardholderName("John Doe"). cvv("123"). number("5105105105105100"). expirationDate("05/12"); Result<CreditCard> creditCardRequest = gateway.creditCard().create(cardRequest); assertTrue(creditCardRequest.isSuccess()); String nonce = TestHelper.generateFuturePaymentPayPalNonce(gateway); PaymentMethodRequest request = new PaymentMethodRequest(). customerId(customer.getId()). paymentMethodNonce(nonce); Result<? extends PaymentMethod> result = gateway.paymentMethod().create(request); assertTrue(result.isSuccess()); PayPalAccountRequest updateRequest = new PayPalAccountRequest(). options(). makeDefault(true). done(); Result<PayPalAccount> updateResult = gateway.paypalAccount().update(result.getTarget().getToken(), updateRequest); assertTrue(updateResult.isSuccess()); assertTrue(updateResult.getTarget().isDefault()); } @Test public void updateMissingRaisesNotFoundError() { String newToken = String.valueOf(new Random().nextInt()); PayPalAccountRequest updateRequest = new PayPalAccountRequest(). token(newToken); try { gateway.paypalAccount().update("missing", updateRequest); fail("Should throw NotFoundException"); } catch (NotFoundException e) { } } }