From 3e3071475ceb0b1b3228a58eaa53739eef309605 Mon Sep 17 00:00:00 2001 From: Sarah Koop Date: Tue, 12 Dec 2023 09:38:36 -0600 Subject: [PATCH] Return Auth/Config Error in PayPalClient (#849) * Propagate config fetch / auth error in PayPalClient * Update CHANGELOG * Add unit test --- CHANGELOG.md | 2 ++ .../braintreepayments/api/PayPalClient.java | 10 ++++++ .../api/PayPalClientUnitTest.java | 32 +++++++++++++++++++ 3 files changed, 44 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 26f656aa9d..c00448586d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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) diff --git a/PayPal/src/main/java/com/braintreepayments/api/PayPalClient.java b/PayPal/src/main/java/com/braintreepayments/api/PayPalClient.java index 74037532f0..b35197a1fb 100644 --- a/PayPal/src/main/java/com/braintreepayments/api/PayPalClient.java +++ b/PayPal/src/main/java/com/braintreepayments/api/PayPalClient.java @@ -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); @@ -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); diff --git a/PayPal/src/test/java/com/braintreepayments/api/PayPalClientUnitTest.java b/PayPal/src/test/java/com/braintreepayments/api/PayPalClientUnitTest.java index 5b6471684b..b934694de0 100644 --- a/PayPal/src/test/java/com/braintreepayments/api/PayPalClientUnitTest.java +++ b/PayPal/src/test/java/com/braintreepayments/api/PayPalClientUnitTest.java @@ -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();