From 405417a3296e07453388d6cb7f2048f89e9505a3 Mon Sep 17 00:00:00 2001 From: Peter Olamit Date: Thu, 9 May 2019 14:35:05 -0700 Subject: [PATCH 1/5] Add support to create PayPal account --- .../TransferMethodRepositoryImpl.java | 26 ++++++ .../AddTransferMethodFragment.java | 7 ++ .../TransferMethodRepositoryImplTest.java | 82 ++++++++++++++++++- 3 files changed, 114 insertions(+), 1 deletion(-) diff --git a/ui/src/main/java/com/hyperwallet/android/ui/repository/TransferMethodRepositoryImpl.java b/ui/src/main/java/com/hyperwallet/android/ui/repository/TransferMethodRepositoryImpl.java index 0d43a7da7..aa22f6278 100644 --- a/ui/src/main/java/com/hyperwallet/android/ui/repository/TransferMethodRepositoryImpl.java +++ b/ui/src/main/java/com/hyperwallet/android/ui/repository/TransferMethodRepositoryImpl.java @@ -20,6 +20,7 @@ import static com.hyperwallet.android.model.HyperwalletTransferMethod.TransferMethodFields.TYPE; import static com.hyperwallet.android.model.HyperwalletTransferMethod.TransferMethodTypes.BANK_ACCOUNT; import static com.hyperwallet.android.model.HyperwalletTransferMethod.TransferMethodTypes.BANK_CARD; +import static com.hyperwallet.android.model.HyperwalletTransferMethod.TransferMethodTypes.PAYPAL_ACCOUNT; import android.os.Handler; @@ -34,6 +35,7 @@ import com.hyperwallet.android.model.HyperwalletBankCard; import com.hyperwallet.android.model.HyperwalletStatusTransition; import com.hyperwallet.android.model.HyperwalletTransferMethod; +import com.hyperwallet.android.model.PayPalAccount; import com.hyperwallet.android.model.paging.HyperwalletPageList; public class TransferMethodRepositoryImpl implements TransferMethodRepository { @@ -55,6 +57,8 @@ public void createTransferMethod(final HyperwalletTransferMethod transferMethod, case BANK_CARD: createBankCard(transferMethod, callback); break; + case PAYPAL_ACCOUNT: + createPayPalAccount(transferMethod, callback); default: //no default action } } @@ -178,4 +182,26 @@ public Handler getHandler() { } }); } + + private void createPayPalAccount(@NonNull final HyperwalletTransferMethod transferMethod, + @NonNull final LoadTransferMethodCallback callback) { + PayPalAccount payPalAccount = (PayPalAccount) transferMethod; + + getHyperwallet().createPayPalAccount(payPalAccount, new HyperwalletListener() { + @Override + public void onSuccess(@Nullable PayPalAccount result) { + callback.onTransferMethodLoaded(result); + } + + @Override + public void onFailure(HyperwalletException exception) { + callback.onError(exception.getHyperwalletErrors()); + } + + @Override + public Handler getHandler() { + return mHandler; + } + }); + } } diff --git a/ui/src/main/java/com/hyperwallet/android/ui/transfermethod/AddTransferMethodFragment.java b/ui/src/main/java/com/hyperwallet/android/ui/transfermethod/AddTransferMethodFragment.java index 131ec7e0e..698d9e324 100644 --- a/ui/src/main/java/com/hyperwallet/android/ui/transfermethod/AddTransferMethodFragment.java +++ b/ui/src/main/java/com/hyperwallet/android/ui/transfermethod/AddTransferMethodFragment.java @@ -21,6 +21,7 @@ import static com.hyperwallet.android.model.HyperwalletTransferMethod.TransferMethodFields.TYPE; import static com.hyperwallet.android.model.HyperwalletTransferMethod.TransferMethodTypes.BANK_ACCOUNT; import static com.hyperwallet.android.model.HyperwalletTransferMethod.TransferMethodTypes.BANK_CARD; +import static com.hyperwallet.android.model.HyperwalletTransferMethod.TransferMethodTypes.PAYPAL_ACCOUNT; import android.app.Activity; import android.content.Context; @@ -48,6 +49,7 @@ import com.hyperwallet.android.model.HyperwalletBankCard; import com.hyperwallet.android.model.HyperwalletError; import com.hyperwallet.android.model.HyperwalletTransferMethod; +import com.hyperwallet.android.model.PayPalAccount; import com.hyperwallet.android.model.meta.Fee; import com.hyperwallet.android.model.meta.HyperwalletField; import com.hyperwallet.android.ui.HyperwalletLocalBroadcast; @@ -466,6 +468,11 @@ private void triggerSubmit() { mTransferMethod = new HyperwalletBankCard.Builder(). transferMethodCountry(mCountry).transferMethodCurrency(mCurrency).build(); break; + case PAYPAL_ACCOUNT: + mTransferMethod = new PayPalAccount.Builder() + .transferMethodCountry(mCountry) + .transferMethodCurrency(mCurrency) + .build(); default: mTransferMethod = new HyperwalletTransferMethod(); mTransferMethod.setField(TRANSFER_METHOD_COUNTRY, mCountry); diff --git a/ui/src/test/java/com/hyperwallet/android/ui/repository/TransferMethodRepositoryImplTest.java b/ui/src/test/java/com/hyperwallet/android/ui/repository/TransferMethodRepositoryImplTest.java index 3178ef652..a7a4d4ae6 100644 --- a/ui/src/test/java/com/hyperwallet/android/ui/repository/TransferMethodRepositoryImplTest.java +++ b/ui/src/test/java/com/hyperwallet/android/ui/repository/TransferMethodRepositoryImplTest.java @@ -15,10 +15,12 @@ import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; +import static com.hyperwallet.android.model.HyperwalletStatusTransition.StatusDefinition.ACTIVATED; import static com.hyperwallet.android.model.HyperwalletStatusTransition.StatusDefinition.DE_ACTIVATED; import static com.hyperwallet.android.model.HyperwalletTransferMethod.TransferMethodFields.BANK_ACCOUNT_ID; import static com.hyperwallet.android.model.HyperwalletTransferMethod.TransferMethodFields.BANK_NAME; import static com.hyperwallet.android.model.HyperwalletTransferMethod.TransferMethodFields.STATUS; +import static com.hyperwallet.android.model.HyperwalletTransferMethod.TransferMethodFields.TOKEN; import static com.hyperwallet.android.model.HyperwalletTransferMethod.TransferMethodFields.TRANSFER_METHOD_COUNTRY; import static com.hyperwallet.android.model.HyperwalletTransferMethod.TransferMethodFields.TRANSFER_METHOD_CURRENCY; import static com.hyperwallet.android.model.HyperwalletTransferMethod.TransferMethodFields.TYPE; @@ -33,6 +35,7 @@ import com.hyperwallet.android.model.HyperwalletStatusTransition; import com.hyperwallet.android.model.HyperwalletTransferMethod; import com.hyperwallet.android.model.HyperwalletTransferMethodPagination; +import com.hyperwallet.android.model.PayPalAccount; import com.hyperwallet.android.model.paging.HyperwalletPageList; import org.junit.Before; @@ -66,6 +69,8 @@ public class TransferMethodRepositoryImplTest { @Captor private ArgumentCaptor mBankCardArgumentCaptor; @Captor + private ArgumentCaptor mPayPalAccountArgumentCaptor; + @Captor private ArgumentCaptor mStatusTransitionArgumentCaptor; @Captor private ArgumentCaptor> mListTransferMethodCaptor; @@ -420,7 +425,6 @@ public void testCreateTransferMethod_callsListenerWithErrorOnBankCardFailure() { .Builder("CA", "CAD", "1232345456784", "2019-05", "234") .build(); - final HyperwalletError error = new HyperwalletError("bank card test message", "BANK_CARD_TEST_CODE"); doAnswer(new Answer() { @@ -446,4 +450,80 @@ public Object answer(InvocationOnMock invocation) { verify(mockCallback, never()).onTransferMethodLoaded(any(HyperwalletTransferMethod.class)); assertThat(mErrorsArgumentCaptor.getValue().getErrors(), hasItem(error)); } + + @Test + public void testCreateTransferMethod_createdPayPalAccountSuccessfully() { + // prepare + final PayPalAccount returnedPayPalAccount = new PayPalAccount.Builder() + .transferMethodCurrency("USD") + .transferMethodCountry("US") + .email("money@mail.com") + .token("trm-token-1342242314") + .build(); + + doAnswer(new Answer() { + @Override + public Object answer(InvocationOnMock invocation) { + HyperwalletListener listener = (HyperwalletListener) invocation.getArguments()[1]; + returnedPayPalAccount.setField(STATUS, ACTIVATED); + listener.onSuccess(returnedPayPalAccount); + return listener; + } + }).when(mHyperwallet).createPayPalAccount(any(PayPalAccount.class), + ArgumentMatchers.>any()); + + TransferMethodRepository.LoadTransferMethodCallback mockCallback = mock( + TransferMethodRepository.LoadTransferMethodCallback.class); + PayPalAccount parameter = new PayPalAccount.Builder().build(); + + // test + mTransferMethodRepository.createTransferMethod(parameter, mockCallback); + + // verify + verify(mockCallback).onTransferMethodLoaded(mPayPalAccountArgumentCaptor.capture()); + verify(mockCallback, never()).onError(any(HyperwalletErrors.class)); + + // assert + PayPalAccount payPalAccount = mPayPalAccountArgumentCaptor.getValue(); + assertThat(payPalAccount, is(notNullValue())); + assertThat(payPalAccount.getCountry(), is("US")); + assertThat(payPalAccount.getCurrency(), is("USD")); + assertThat(payPalAccount.getEmail(), is("money@mail.com")); + assertThat(payPalAccount.getField(STATUS), is(ACTIVATED)); + assertThat(payPalAccount.getField(TOKEN), is("trm-token-1342242314")); + } + + @Test + public void testCreateTransferMethod_createPayPalAccountWithFailure() { + // prepare + final HyperwalletError returnedError = new HyperwalletError("PayPal test message", "PAYPAL_TEST_CODE"); + + doAnswer(new Answer() { + @Override + public Object answer(InvocationOnMock invocation) { + HyperwalletListener listener = (HyperwalletListener) invocation.getArguments()[1]; + + List errorList = new ArrayList<>(); + errorList.add(returnedError); + + listener.onFailure(new HyperwalletException(new HyperwalletErrors(errorList))); + return listener; + } + }).when(mHyperwallet).createPayPalAccount(any(PayPalAccount.class), + ArgumentMatchers.>any()); + + TransferMethodRepository.LoadTransferMethodCallback mockCallback = mock( + TransferMethodRepository.LoadTransferMethodCallback.class); + PayPalAccount parameter = new PayPalAccount.Builder().build(); + + // test + mTransferMethodRepository.createTransferMethod(parameter, mockCallback); + + // verify + verify(mockCallback, never()).onTransferMethodLoaded(any(HyperwalletTransferMethod.class)); + verify(mockCallback).onError(mErrorsArgumentCaptor.capture()); + + // assert + assertThat(mErrorsArgumentCaptor.getValue().getErrors(), hasItem(returnedError)); + } } \ No newline at end of file From ad7b55b8690147d9c5dd628c5009fd8a267cb7ea Mon Sep 17 00:00:00 2001 From: Peter Olamit Date: Thu, 9 May 2019 14:58:32 -0700 Subject: [PATCH 2/5] fixed some issues --- .../android/ui/repository/TransferMethodRepositoryImpl.java | 1 + .../android/ui/transfermethod/AddTransferMethodFragment.java | 1 + 2 files changed, 2 insertions(+) diff --git a/ui/src/main/java/com/hyperwallet/android/ui/repository/TransferMethodRepositoryImpl.java b/ui/src/main/java/com/hyperwallet/android/ui/repository/TransferMethodRepositoryImpl.java index aa22f6278..169a116ec 100644 --- a/ui/src/main/java/com/hyperwallet/android/ui/repository/TransferMethodRepositoryImpl.java +++ b/ui/src/main/java/com/hyperwallet/android/ui/repository/TransferMethodRepositoryImpl.java @@ -59,6 +59,7 @@ public void createTransferMethod(final HyperwalletTransferMethod transferMethod, break; case PAYPAL_ACCOUNT: createPayPalAccount(transferMethod, callback); + break; default: //no default action } } diff --git a/ui/src/main/java/com/hyperwallet/android/ui/transfermethod/AddTransferMethodFragment.java b/ui/src/main/java/com/hyperwallet/android/ui/transfermethod/AddTransferMethodFragment.java index 698d9e324..28d977e7a 100644 --- a/ui/src/main/java/com/hyperwallet/android/ui/transfermethod/AddTransferMethodFragment.java +++ b/ui/src/main/java/com/hyperwallet/android/ui/transfermethod/AddTransferMethodFragment.java @@ -473,6 +473,7 @@ private void triggerSubmit() { .transferMethodCountry(mCountry) .transferMethodCurrency(mCurrency) .build(); + break; default: mTransferMethod = new HyperwalletTransferMethod(); mTransferMethod.setField(TRANSFER_METHOD_COUNTRY, mCountry); From 6c983a32a644a060023626d8544eb9acdbc6d113 Mon Sep 17 00:00:00 2001 From: Peter Olamit Date: Thu, 9 May 2019 15:50:07 -0700 Subject: [PATCH 3/5] update test case namings --- .../TransferMethodRepositoryImplTest.java | 21 +++++++------------ 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/ui/src/test/java/com/hyperwallet/android/ui/repository/TransferMethodRepositoryImplTest.java b/ui/src/test/java/com/hyperwallet/android/ui/repository/TransferMethodRepositoryImplTest.java index 36f54661a..77244db89 100644 --- a/ui/src/test/java/com/hyperwallet/android/ui/repository/TransferMethodRepositoryImplTest.java +++ b/ui/src/test/java/com/hyperwallet/android/ui/repository/TransferMethodRepositoryImplTest.java @@ -489,7 +489,7 @@ public Object answer(InvocationOnMock invocation) { } @Test - public void testCreateTransferMethod_createdPayPalAccountSuccessfully() { + public void testCreateTransferMethod_payPalAccountWithSuccess() { // prepare final PayPalAccount returnedPayPalAccount = new PayPalAccount.Builder() .transferMethodCurrency("USD") @@ -509,16 +509,14 @@ public Object answer(InvocationOnMock invocation) { }).when(mHyperwallet).createPayPalAccount(any(PayPalAccount.class), ArgumentMatchers.>any()); - TransferMethodRepository.LoadTransferMethodCallback mockCallback = mock( - TransferMethodRepository.LoadTransferMethodCallback.class); PayPalAccount parameter = new PayPalAccount.Builder().build(); // test - mTransferMethodRepository.createTransferMethod(parameter, mockCallback); + mTransferMethodRepository.createTransferMethod(parameter, mLoadTransferMethodCallback); // verify - verify(mockCallback).onTransferMethodLoaded(mPayPalAccountArgumentCaptor.capture()); - verify(mockCallback, never()).onError(any(HyperwalletErrors.class)); + verify(mLoadTransferMethodCallback).onTransferMethodLoaded(mPayPalAccountArgumentCaptor.capture()); + verify(mLoadTransferMethodCallback, never()).onError(any(HyperwalletErrors.class)); // assert PayPalAccount payPalAccount = mPayPalAccountArgumentCaptor.getValue(); @@ -531,7 +529,7 @@ public Object answer(InvocationOnMock invocation) { } @Test - public void testCreateTransferMethod_createPayPalAccountWithFailure() { + public void testCreateTransferMethod_payPalAccountWithError() { // prepare final HyperwalletError returnedError = new HyperwalletError("PayPal test message", "PAYPAL_TEST_CODE"); @@ -548,17 +546,14 @@ public Object answer(InvocationOnMock invocation) { } }).when(mHyperwallet).createPayPalAccount(any(PayPalAccount.class), ArgumentMatchers.>any()); - - TransferMethodRepository.LoadTransferMethodCallback mockCallback = mock( - TransferMethodRepository.LoadTransferMethodCallback.class); PayPalAccount parameter = new PayPalAccount.Builder().build(); // test - mTransferMethodRepository.createTransferMethod(parameter, mockCallback); + mTransferMethodRepository.createTransferMethod(parameter, mLoadTransferMethodCallback); // verify - verify(mockCallback, never()).onTransferMethodLoaded(any(HyperwalletTransferMethod.class)); - verify(mockCallback).onError(mErrorsArgumentCaptor.capture()); + verify(mLoadTransferMethodCallback, never()).onTransferMethodLoaded(any(HyperwalletTransferMethod.class)); + verify(mLoadTransferMethodCallback).onError(mErrorsArgumentCaptor.capture()); // assert assertThat(mErrorsArgumentCaptor.getValue().getErrors(), hasItem(returnedError)); From 9e03a3ea867f02112b794c6603f694e2ea5d5674 Mon Sep 17 00:00:00 2001 From: Peter Olamit Date: Thu, 9 May 2019 15:50:54 -0700 Subject: [PATCH 4/5] update test case namings --- .../android/ui/repository/TransferMethodRepositoryImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/src/main/java/com/hyperwallet/android/ui/repository/TransferMethodRepositoryImpl.java b/ui/src/main/java/com/hyperwallet/android/ui/repository/TransferMethodRepositoryImpl.java index 7b35a31a1..7bc72f0c9 100644 --- a/ui/src/main/java/com/hyperwallet/android/ui/repository/TransferMethodRepositoryImpl.java +++ b/ui/src/main/java/com/hyperwallet/android/ui/repository/TransferMethodRepositoryImpl.java @@ -48,7 +48,7 @@ Hyperwallet getHyperwallet() { } @Override - public void createTransferMethod(final HyperwalletTransferMethod transferMethod, + public void createTransferMethod(@NonNull final HyperwalletTransferMethod transferMethod, LoadTransferMethodCallback callback) { switch (transferMethod.getField(TYPE)) { case BANK_ACCOUNT: From 84c78728e035159339f5df2dc0226d4aa8448c57 Mon Sep 17 00:00:00 2001 From: Peter Olamit Date: Thu, 9 May 2019 15:58:10 -0700 Subject: [PATCH 5/5] added paypal header title --- .../android/ui/transfermethod/TransferMethodUtils.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ui/src/main/java/com/hyperwallet/android/ui/transfermethod/TransferMethodUtils.java b/ui/src/main/java/com/hyperwallet/android/ui/transfermethod/TransferMethodUtils.java index 37444ba38..7eb96f386 100644 --- a/ui/src/main/java/com/hyperwallet/android/ui/transfermethod/TransferMethodUtils.java +++ b/ui/src/main/java/com/hyperwallet/android/ui/transfermethod/TransferMethodUtils.java @@ -20,6 +20,7 @@ import static com.hyperwallet.android.model.HyperwalletTransferMethod.TransferMethodTypes.BANK_ACCOUNT; import static com.hyperwallet.android.model.HyperwalletTransferMethod.TransferMethodTypes.BANK_CARD; import static com.hyperwallet.android.model.HyperwalletTransferMethod.TransferMethodTypes.PAPER_CHECK; +import static com.hyperwallet.android.model.HyperwalletTransferMethod.TransferMethodTypes.PAYPAL_ACCOUNT; import static com.hyperwallet.android.model.HyperwalletTransferMethod.TransferMethodTypes.PREPAID_CARD; import static com.hyperwallet.android.model.HyperwalletTransferMethod.TransferMethodTypes.WIRE_ACCOUNT; @@ -114,6 +115,9 @@ public static String getTransferMethodName(@NonNull final Context context, case WIRE_ACCOUNT: title = context.getString(R.string.wire_account); break; + case PAYPAL_ACCOUNT: + title = context.getString(R.string.paypal_account); + break; default: title = transferMethodType.toLowerCase(Locale.ROOT) + context.getString( R.string.not_translated_in_braces);