Skip to content

Commit

Permalink
Return Auth/Config Error in PayPalClient (#849)
Browse files Browse the repository at this point in the history
* Propagate config fetch / auth error in PayPalClient

* Update CHANGELOG

* Add unit test
  • Loading branch information
sarahkoop authored Dec 12, 2023
1 parent 2dbc07c commit 3e30714
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 0 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

## unreleased

* PayPal
* Fix issue where inaccurate error message was being returned on authorization or configuration error (fixes #821)
* Venmo
* Fix NPE when `VenmoListener` is null (fixes #832)

Expand Down
10 changes: 10 additions & 0 deletions PayPal/src/main/java/com/braintreepayments/api/PayPalClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,11 @@ private void sendCheckoutRequest(final FragmentActivity activity, final PayPalCh
braintreeClient.getConfiguration(new ConfigurationCallback() {
@Override
public void onResult(@Nullable final Configuration configuration, @Nullable Exception error) {
if (error != null) {
callback.onResult(error);
return;
}

if (payPalConfigInvalid(configuration)) {
Exception configInvalidError = createPayPalError();
callback.onResult(configInvalidError);
Expand Down Expand Up @@ -239,6 +244,11 @@ private void sendVaultRequest(final FragmentActivity activity, final PayPalVault
braintreeClient.getConfiguration(new ConfigurationCallback() {
@Override
public void onResult(@Nullable final Configuration configuration, @Nullable Exception error) {
if (error != null) {
callback.onResult(error);
return;
}

if (payPalConfigInvalid(configuration)) {
Exception configInvalidError = createPayPalError();
callback.onResult(configInvalidError);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -352,6 +352,38 @@ public void requestOneTimePayment_whenPayPalNotEnabled_returnsErrorToListener()
"for more information.", errorCaptor.getValue().getMessage());
}

@Test
public void requestOneTimePayment_whenConfigError_forwardsErrorToListener() {
PayPalInternalClient payPalInternalClient = new MockPayPalInternalClientBuilder().build();

Exception authError = new Exception("Error fetching auth");
BraintreeClient braintreeClient = new MockBraintreeClientBuilder()
.configurationError(authError)
.build();

PayPalClient sut = new PayPalClient(activity, lifecycle, braintreeClient, payPalInternalClient);
sut.setListener(listener);
sut.tokenizePayPalAccount(activity, new PayPalCheckoutRequest("1.00"));

verify(listener).onPayPalFailure(authError);
}

@Test
public void requestBillingAgreement_whenConfigError_forwardsErrorToListener() {
PayPalInternalClient payPalInternalClient = new MockPayPalInternalClientBuilder().build();

Exception authError = new Exception("Error fetching auth");
BraintreeClient braintreeClient = new MockBraintreeClientBuilder()
.configurationError(authError)
.build();

PayPalClient sut = new PayPalClient(activity, lifecycle, braintreeClient, payPalInternalClient);
sut.setListener(listener);
sut.tokenizePayPalAccount(activity, new PayPalVaultRequest());

verify(listener).onPayPalFailure(authError);
}

@Test
public void requestOneTimePayment_whenDeviceCantPerformBrowserSwitch_returnsErrorToListener() {
PayPalInternalClient payPalInternalClient = new MockPayPalInternalClientBuilder().build();
Expand Down

0 comments on commit 3e30714

Please sign in to comment.