From f0b9191cd378c4de4cdbf537a74c4a6241f346f4 Mon Sep 17 00:00:00 2001 From: Flavio Mattos Date: Wed, 8 May 2019 16:56:42 -0700 Subject: [PATCH 1/4] HW-52538 add support to deactivate paypal account --- .../TransferMethodRepositoryImpl.java | 26 ++ ui/src/main/res/values/strings.xml | 2 + .../TransferMethodRepositoryImplTest.java | 310 ++++++++++-------- 3 files changed, 202 insertions(+), 136 deletions(-) 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..36c0a9f69 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; @@ -89,6 +90,10 @@ public void deactivateTransferMethod(@NonNull final HyperwalletTransferMethod tr break; case BANK_CARD: deactivateBankCardAccount(transferMethod, callback); + break; + case PAYPAL_ACCOUNT: + deactivatePayPalAccount(transferMethod, callback); + break; default: //no default action } } @@ -135,6 +140,27 @@ public Handler getHandler() { }); } + private void deactivatePayPalAccount(@NonNull final HyperwalletTransferMethod transferMethod, + @NonNull final DeactivateTransferMethodCallback callback) { + getHyperwallet().deactivatePayPalAccount(transferMethod.getField(TOKEN), null, + new HyperwalletListener() { + @Override + public void onSuccess(@Nullable HyperwalletStatusTransition result) { + callback.onTransferMethodDeactivated(result); + } + + @Override + public void onFailure(HyperwalletException exception) { + callback.onError(exception.getHyperwalletErrors()); + } + + @Override + public Handler getHandler() { + return mHandler; + } + }); + } + private void createBankAccount(final HyperwalletTransferMethod transferMethod, final LoadTransferMethodCallback callback) { HyperwalletBankAccount bankAccount = (HyperwalletBankAccount) transferMethod; diff --git a/ui/src/main/res/values/strings.xml b/ui/src/main/res/values/strings.xml index 4774946af..c503cb39b 100644 --- a/ui/src/main/res/values/strings.xml +++ b/ui/src/main/res/values/strings.xml @@ -72,12 +72,14 @@ Wire Account Paper Check Prepaid Card + PayPal Account \uE000 \uE005 \uE00D \uE002 \uE00E + \uE021 Search Hint Search Country 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..c6e68027e 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 @@ -10,9 +10,7 @@ import static org.mockito.Mockito.any; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; -import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static com.hyperwallet.android.model.HyperwalletStatusTransition.StatusDefinition.DE_ACTIVATED; @@ -33,6 +31,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; @@ -59,6 +58,12 @@ public class TransferMethodRepositoryImplTest { @Mock private Hyperwallet mHyperwallet; + @Mock + private TransferMethodRepository.DeactivateTransferMethodCallback mDeactivateTransferMethodCallback; + @Mock + private TransferMethodRepository.LoadTransferMethodListCallback mLoadTransferMethodListCallback; + @Mock + private TransferMethodRepository.LoadTransferMethodCallback mLoadTransferMethodCallback; @Captor private ArgumentCaptor mErrorsArgumentCaptor; @Captor @@ -82,7 +87,7 @@ public void setup() { } @Test - public void testCreateTransferMethod_callsListenerWithBankAccountOnSuccess() { + public void testCreateTransferMethod_bankAccountWithSuccess() { HyperwalletBankAccount bankAccount = new HyperwalletBankAccount .Builder("CA", "CAD", "3423423432") .build(); @@ -100,14 +105,12 @@ public Object answer(InvocationOnMock invocation) { } }).when(mHyperwallet).createBankAccount(any(HyperwalletBankAccount.class), ArgumentMatchers.>any()); - TransferMethodRepository.LoadTransferMethodCallback mockCallback = mock( - TransferMethodRepository.LoadTransferMethodCallback.class); // test - mTransferMethodRepository.createTransferMethod(bankAccount, mockCallback); + mTransferMethodRepository.createTransferMethod(bankAccount, mLoadTransferMethodCallback); - verify(mockCallback).onTransferMethodLoaded(mBankAccountArgumentCaptor.capture()); - verify(mockCallback, never()).onError(any(HyperwalletErrors.class)); + verify(mLoadTransferMethodCallback).onTransferMethodLoaded(mBankAccountArgumentCaptor.capture()); + verify(mLoadTransferMethodCallback, never()).onError(any(HyperwalletErrors.class)); HyperwalletBankAccount transferMethod = mBankAccountArgumentCaptor.getValue(); assertThat(transferMethod, is(notNullValue())); @@ -119,7 +122,7 @@ public Object answer(InvocationOnMock invocation) { } @Test - public void testCreateTransferMethod_callsListenerWithErrorOnFailure() { + public void testCreateTransferMethod_bankAccountWithError() { HyperwalletBankAccount bankAccount = new HyperwalletBankAccount .Builder("US", "USD", "23432432") .build(); @@ -139,113 +142,86 @@ public Object answer(InvocationOnMock invocation) { } }).when(mHyperwallet).createBankAccount(any(HyperwalletBankAccount.class), ArgumentMatchers.>any()); - TransferMethodRepository.LoadTransferMethodCallback mockCallback = mock( - TransferMethodRepository.LoadTransferMethodCallback.class); // test - mTransferMethodRepository.createTransferMethod(bankAccount, mockCallback); + mTransferMethodRepository.createTransferMethod(bankAccount, mLoadTransferMethodCallback); - verify(mockCallback).onError(mErrorsArgumentCaptor.capture()); - verify(mockCallback, never()).onTransferMethodLoaded(any(HyperwalletTransferMethod.class)); + verify(mLoadTransferMethodCallback).onError(mErrorsArgumentCaptor.capture()); + verify(mLoadTransferMethodCallback, never()).onTransferMethodLoaded(any(HyperwalletTransferMethod.class)); assertThat(mErrorsArgumentCaptor.getValue().getErrors(), hasItem(error)); } + @Test - public void testLoadTransferMethod_userContextHasBankAccount() { + public void testDeactivateTransferMethod_bankAccountWithSuccess() { HyperwalletBankAccount bankAccount = new HyperwalletBankAccount .Builder("CA", "CAD", "3423423432") + .token("trm-854c4ec1-9161-49d6-92e2-b8d15aa4bf56") .build(); - - List accounts = new ArrayList<>(); - accounts.add(bankAccount); - final HyperwalletPageList pageList = new HyperwalletPageList<>(accounts); - - doAnswer(new Answer() { - @Override - public Object answer(InvocationOnMock invocation) { - HyperwalletListener listener = (HyperwalletListener) invocation.getArguments()[1]; - listener.onSuccess(pageList); - return listener; - } - }).when(mHyperwallet).listTransferMethods((HyperwalletTransferMethodPagination) any(), - ArgumentMatchers.>>any()); - TransferMethodRepository.LoadTransferMethodListCallback mockCallback = mock( - TransferMethodRepository.LoadTransferMethodListCallback.class); - - // test - mTransferMethodRepository.loadTransferMethod(mockCallback); - - verify(mockCallback).onTransferMethodListLoaded(mListTransferMethodCaptor.capture()); - verify(mockCallback, never()).onError(any(HyperwalletErrors.class)); - - List transferMethods = mListTransferMethodCaptor.getValue(); - assertThat(transferMethods, hasSize(1)); - assertThat(transferMethods.get(0).getField(TRANSFER_METHOD_COUNTRY), is("CA")); - assertThat(transferMethods.get(0).getField(TRANSFER_METHOD_CURRENCY), is("CAD")); - assertThat(transferMethods.get(0).getField(BANK_ACCOUNT_ID), is("3423423432")); - } - - @Test - public void testLoadTransferMethod_userContextEmptyAccounts() { - + bankAccount.setField(STATUS, HyperwalletStatusTransition.StatusDefinition.ACTIVATED); doAnswer(new Answer() { @Override public Object answer(InvocationOnMock invocation) { - HyperwalletListener listener = (HyperwalletListener) invocation.getArguments()[1]; - listener.onSuccess(null); + HyperwalletStatusTransition statusTransition = new HyperwalletStatusTransition(DE_ACTIVATED); + statusTransition.setNotes("Closing this account."); + HyperwalletListener listener = (HyperwalletListener) invocation.getArguments()[2]; + listener.onSuccess(statusTransition); return listener; } - }).when(mHyperwallet).listTransferMethods((HyperwalletTransferMethodPagination) any(), - ArgumentMatchers.>>any()); - TransferMethodRepository.LoadTransferMethodListCallback mockCallback = mock( - TransferMethodRepository.LoadTransferMethodListCallback.class); + }).when(mHyperwallet).deactivateBankAccount(anyString(), ArgumentMatchers.isNull(), + ArgumentMatchers.>any()); // test - mTransferMethodRepository.loadTransferMethod(mockCallback); + mTransferMethodRepository.deactivateTransferMethod(bankAccount, mDeactivateTransferMethodCallback); - verify(mockCallback).onTransferMethodListLoaded(mListTransferMethodCaptor.capture()); - verify(mockCallback, never()).onError(any(HyperwalletErrors.class)); + verify(mDeactivateTransferMethodCallback).onTransferMethodDeactivated( + mStatusTransitionArgumentCaptor.capture()); + verify(mDeactivateTransferMethodCallback, never()).onError(any(HyperwalletErrors.class)); - List transferMethods = mListTransferMethodCaptor.getValue(); - assertThat(transferMethods, is(nullValue())); + HyperwalletStatusTransition statusTransition = mStatusTransitionArgumentCaptor.getValue(); + assertThat(statusTransition, is(notNullValue())); + assertThat(statusTransition.getTransition(), is(DE_ACTIVATED)); + assertThat(statusTransition.getNotes(), is("Closing this account.")); } @Test - public void testLoadTransferMethod_hasErrors() { - + public void testDeactivateTransferMethod_bankAccountWithError() { + HyperwalletBankAccount bankAccount = new HyperwalletBankAccount + .Builder("CA", "CAD", "3423423432") + .token("trm-854c4ec1-9161-49d6-92e2-b8d15aa4bf56") + .build(); + bankAccount.setField(STATUS, HyperwalletStatusTransition.StatusDefinition.ACTIVATED); final HyperwalletError error = new HyperwalletError("test message", "TEST_CODE"); - doAnswer(new Answer() { @Override public Object answer(InvocationOnMock invocation) { - HyperwalletListener listener = (HyperwalletListener) invocation.getArguments()[1]; + HyperwalletListener listener = (HyperwalletListener) invocation.getArguments()[2]; List errorList = new ArrayList<>(); errorList.add(error); HyperwalletErrors errors = new HyperwalletErrors(errorList); listener.onFailure(new HyperwalletException(errors)); return listener; } - }).when(mHyperwallet).listTransferMethods((HyperwalletTransferMethodPagination) any(), - ArgumentMatchers.>>any()); - TransferMethodRepository.LoadTransferMethodListCallback mockCallback = mock( - TransferMethodRepository.LoadTransferMethodListCallback.class); + }).when(mHyperwallet).deactivateBankAccount(anyString(), ArgumentMatchers.isNull(), + ArgumentMatchers.>any()); // test - mTransferMethodRepository.loadTransferMethod(mockCallback); + mTransferMethodRepository.deactivateTransferMethod(bankAccount, mDeactivateTransferMethodCallback); - verify(mockCallback, never()).onTransferMethodListLoaded(ArgumentMatchers.anyList()); - verify(mockCallback).onError(mErrorsArgumentCaptor.capture()); + verify(mDeactivateTransferMethodCallback, never()).onTransferMethodDeactivated( + any(HyperwalletStatusTransition.class)); + verify(mDeactivateTransferMethodCallback).onError(mErrorsArgumentCaptor.capture()); assertThat(mErrorsArgumentCaptor.getValue().getErrors(), hasItem(error)); } @Test - public void testDeactivateBankAccount_successfullyDeactivatedBankAccount() { - HyperwalletBankAccount bankAccount = new HyperwalletBankAccount - .Builder("CA", "CAD", "3423423432") - .token("some token") + public void testDeactivateTransferMethod_bankCardWithSuccess() { + HyperwalletBankCard bankCard = new HyperwalletBankCard + .Builder("CA", "CAD", "1232345456784", "2019-05", "234") + .token("trm-854c4ec1-9161-49d6-92e2-b8d15aa4bf56") .build(); - bankAccount.setField(STATUS, HyperwalletStatusTransition.StatusDefinition.ACTIVATED); + bankCard.setField(STATUS, HyperwalletStatusTransition.StatusDefinition.ACTIVATED); doAnswer(new Answer() { @Override public Object answer(InvocationOnMock invocation) { @@ -255,17 +231,15 @@ public Object answer(InvocationOnMock invocation) { listener.onSuccess(statusTransition); return listener; } - }).when(mHyperwallet).deactivateBankAccount(anyString(), ArgumentMatchers.isNull(), + }).when(mHyperwallet).deactivateBankCard(anyString(), ArgumentMatchers.isNull(), ArgumentMatchers.>any()); - TransferMethodRepository.DeactivateTransferMethodCallback mockCallback = mock( - TransferMethodRepository.DeactivateTransferMethodCallback.class); - // test - mTransferMethodRepository.deactivateTransferMethod(bankAccount, mockCallback); + mTransferMethodRepository.deactivateTransferMethod(bankCard, mDeactivateTransferMethodCallback); - verify(mockCallback).onTransferMethodDeactivated(mStatusTransitionArgumentCaptor.capture()); - verify(mockCallback, never()).onError(any(HyperwalletErrors.class)); + verify(mDeactivateTransferMethodCallback).onTransferMethodDeactivated( + mStatusTransitionArgumentCaptor.capture()); + verify(mDeactivateTransferMethodCallback, never()).onError(any(HyperwalletErrors.class)); HyperwalletStatusTransition statusTransition = mStatusTransitionArgumentCaptor.getValue(); assertThat(statusTransition, is(notNullValue())); @@ -274,15 +248,12 @@ public Object answer(InvocationOnMock invocation) { } @Test - public void testDeactivateBankAccount_hasErrorOnDeactivate() { - TransferMethodRepositoryImpl mTransferMethodRepository = spy(TransferMethodRepositoryImpl.class); - doReturn(mHyperwallet).when(mTransferMethodRepository).getHyperwallet(); - - HyperwalletBankAccount bankAccount = new HyperwalletBankAccount - .Builder("CA", "CAD", "3423423432") - .token("some token") + public void testDeactivateTransferMethod_bankCardWithError() { + HyperwalletBankCard bankCard = new HyperwalletBankCard + .Builder("CA", "CAD", "1232345456784", "2019-05", "234") + .token("trm-854c4ec1-9161-49d6-92e2-b8d15aa4bf56") .build(); - bankAccount.setField(STATUS, HyperwalletStatusTransition.StatusDefinition.ACTIVATED); + bankCard.setField(STATUS, HyperwalletStatusTransition.StatusDefinition.ACTIVATED); final HyperwalletError error = new HyperwalletError("test message", "TEST_CODE"); doAnswer(new Answer() { @Override @@ -294,27 +265,23 @@ public Object answer(InvocationOnMock invocation) { listener.onFailure(new HyperwalletException(errors)); return listener; } - }).when(mHyperwallet).deactivateBankAccount(anyString(), ArgumentMatchers.isNull(), + }).when(mHyperwallet).deactivateBankCard(anyString(), ArgumentMatchers.isNull(), ArgumentMatchers.>any()); - TransferMethodRepository.DeactivateTransferMethodCallback mockCallback = mock( - TransferMethodRepository.DeactivateTransferMethodCallback.class); // test - mTransferMethodRepository.deactivateTransferMethod(bankAccount, mockCallback); + mTransferMethodRepository.deactivateTransferMethod(bankCard, mDeactivateTransferMethodCallback); - verify(mockCallback, never()).onTransferMethodDeactivated(any(HyperwalletStatusTransition.class)); - verify(mockCallback).onError(mErrorsArgumentCaptor.capture()); + verify(mDeactivateTransferMethodCallback, never()).onTransferMethodDeactivated( + any(HyperwalletStatusTransition.class)); + verify(mDeactivateTransferMethodCallback).onError(mErrorsArgumentCaptor.capture()); assertThat(mErrorsArgumentCaptor.getValue().getErrors(), hasItem(error)); } @Test - public void testDeactivateBankCard_successfullyDeactivatedBankCard() { - HyperwalletBankCard bankCard = new HyperwalletBankCard - .Builder("CA", "CAD", "1232345456784", "2019-05", "234") - .token("some token") - .build(); - bankCard.setField(STATUS, HyperwalletStatusTransition.StatusDefinition.ACTIVATED); + public void testDeactivateTransferMethod_payPalAccountWithSuccess() { + PayPalAccount payPalAccount = new PayPalAccount.Builder("US", "US", "jsmith4@hyperwallet.com") + .token("trm-854c4ec1-9161-49d6-92e2-b8d15aa4bf56").build(); doAnswer(new Answer() { @Override public Object answer(InvocationOnMock invocation) { @@ -324,17 +291,15 @@ public Object answer(InvocationOnMock invocation) { listener.onSuccess(statusTransition); return listener; } - }).when(mHyperwallet).deactivateBankCard(anyString(), ArgumentMatchers.isNull(), + }).when(mHyperwallet).deactivatePayPalAccount(anyString(), ArgumentMatchers.isNull(), ArgumentMatchers.>any()); - TransferMethodRepository.DeactivateTransferMethodCallback mockCallback = mock( - TransferMethodRepository.DeactivateTransferMethodCallback.class); - // test - mTransferMethodRepository.deactivateTransferMethod(bankCard, mockCallback); + mTransferMethodRepository.deactivateTransferMethod(payPalAccount, mDeactivateTransferMethodCallback); - verify(mockCallback).onTransferMethodDeactivated(mStatusTransitionArgumentCaptor.capture()); - verify(mockCallback, never()).onError(any(HyperwalletErrors.class)); + verify(mDeactivateTransferMethodCallback).onTransferMethodDeactivated( + mStatusTransitionArgumentCaptor.capture()); + verify(mDeactivateTransferMethodCallback, never()).onError(any(HyperwalletErrors.class)); HyperwalletStatusTransition statusTransition = mStatusTransitionArgumentCaptor.getValue(); assertThat(statusTransition, is(notNullValue())); @@ -343,15 +308,10 @@ public Object answer(InvocationOnMock invocation) { } @Test - public void testDeactivateBankCard_hasErrorOnDeactivate() { - TransferMethodRepositoryImpl mTransferMethodRepository = spy(TransferMethodRepositoryImpl.class); - doReturn(mHyperwallet).when(mTransferMethodRepository).getHyperwallet(); - - HyperwalletBankCard bankCard = new HyperwalletBankCard - .Builder("CA", "CAD", "1232345456784", "2019-05", "234") - .token("some token") - .build(); - bankCard.setField(STATUS, HyperwalletStatusTransition.StatusDefinition.ACTIVATED); + public void testDeactivateTransferMethod_payPalAccountWithError() { + PayPalAccount payPalAccount = new PayPalAccount.Builder("US", "US", "jsmith4@hyperwallet.com") + .token("trm-854c4ec1-9161-49d6-92e2-b8d15aa4bf56").build(); + payPalAccount.setField(STATUS, HyperwalletStatusTransition.StatusDefinition.ACTIVATED); final HyperwalletError error = new HyperwalletError("test message", "TEST_CODE"); doAnswer(new Answer() { @Override @@ -363,23 +323,22 @@ public Object answer(InvocationOnMock invocation) { listener.onFailure(new HyperwalletException(errors)); return listener; } - }).when(mHyperwallet).deactivateBankCard(anyString(), ArgumentMatchers.isNull(), + }).when(mHyperwallet).deactivatePayPalAccount(anyString(), ArgumentMatchers.isNull(), ArgumentMatchers.>any()); - TransferMethodRepository.DeactivateTransferMethodCallback mockCallback = mock( - TransferMethodRepository.DeactivateTransferMethodCallback.class); // test - mTransferMethodRepository.deactivateTransferMethod(bankCard, mockCallback); + mTransferMethodRepository.deactivateTransferMethod(payPalAccount, mDeactivateTransferMethodCallback); - verify(mockCallback, never()).onTransferMethodDeactivated(any(HyperwalletStatusTransition.class)); - verify(mockCallback).onError(mErrorsArgumentCaptor.capture()); + verify(mDeactivateTransferMethodCallback, never()).onTransferMethodDeactivated( + any(HyperwalletStatusTransition.class)); + verify(mDeactivateTransferMethodCallback).onError(mErrorsArgumentCaptor.capture()); assertThat(mErrorsArgumentCaptor.getValue().getErrors(), hasItem(error)); } @Test - public void testCreateTransferMethod_callsListenerWithBankCardOnSuccess() { + public void testCreateTransferMethod_bankCardWithSuccess() { HyperwalletBankCard bankCard = new HyperwalletBankCard .Builder("CA", "CAD", "1232345456784", "2019-05", "234") .build(); @@ -398,14 +357,12 @@ public Object answer(InvocationOnMock invocation) { } }).when(mHyperwallet).createBankCard(any(HyperwalletBankCard.class), ArgumentMatchers.>any()); - TransferMethodRepository.LoadTransferMethodCallback mockCallback = mock( - TransferMethodRepository.LoadTransferMethodCallback.class); // test - mTransferMethodRepository.createTransferMethod(bankCard, mockCallback); + mTransferMethodRepository.createTransferMethod(bankCard, mLoadTransferMethodCallback); - verify(mockCallback).onTransferMethodLoaded(mBankCardArgumentCaptor.capture()); - verify(mockCallback, never()).onError(any(HyperwalletErrors.class)); + verify(mLoadTransferMethodCallback).onTransferMethodLoaded(mBankCardArgumentCaptor.capture()); + verify(mLoadTransferMethodCallback, never()).onError(any(HyperwalletErrors.class)); HyperwalletBankCard transferMethod = mBankCardArgumentCaptor.getValue(); assertThat(transferMethod, is(notNullValue())); @@ -415,7 +372,7 @@ public Object answer(InvocationOnMock invocation) { } @Test - public void testCreateTransferMethod_callsListenerWithErrorOnBankCardFailure() { + public void testCreateTransferMethod_bankCardWithError() { HyperwalletBankCard bankCard = new HyperwalletBankCard .Builder("CA", "CAD", "1232345456784", "2019-05", "234") .build(); @@ -436,14 +393,95 @@ public Object answer(InvocationOnMock invocation) { } }).when(mHyperwallet).createBankCard(any(HyperwalletBankCard.class), ArgumentMatchers.>any()); - TransferMethodRepository.LoadTransferMethodCallback mockCallback = mock( - TransferMethodRepository.LoadTransferMethodCallback.class); // test - mTransferMethodRepository.createTransferMethod(bankCard, mockCallback); + mTransferMethodRepository.createTransferMethod(bankCard, mLoadTransferMethodCallback); + + verify(mLoadTransferMethodCallback).onError(mErrorsArgumentCaptor.capture()); + verify(mLoadTransferMethodCallback, never()).onTransferMethodLoaded(any(HyperwalletTransferMethod.class)); + assertThat(mErrorsArgumentCaptor.getValue().getErrors(), hasItem(error)); + } + + + @Test + public void testLoadTransferMethod_returnsBankAccount() { + HyperwalletBankAccount bankAccount = new HyperwalletBankAccount + .Builder("CA", "CAD", "3423423432") + .build(); + + List accounts = new ArrayList<>(); + accounts.add(bankAccount); + final HyperwalletPageList pageList = new HyperwalletPageList<>(accounts); + + doAnswer(new Answer() { + @Override + public Object answer(InvocationOnMock invocation) { + HyperwalletListener listener = (HyperwalletListener) invocation.getArguments()[1]; + listener.onSuccess(pageList); + return listener; + } + }).when(mHyperwallet).listTransferMethods((HyperwalletTransferMethodPagination) any(), + ArgumentMatchers.>>any()); + + // test + mTransferMethodRepository.loadTransferMethod(mLoadTransferMethodListCallback); + + verify(mLoadTransferMethodListCallback).onTransferMethodListLoaded(mListTransferMethodCaptor.capture()); + verify(mLoadTransferMethodListCallback, never()).onError(any(HyperwalletErrors.class)); + + List transferMethods = mListTransferMethodCaptor.getValue(); + assertThat(transferMethods, hasSize(1)); + assertThat(transferMethods.get(0).getField(TRANSFER_METHOD_COUNTRY), is("CA")); + assertThat(transferMethods.get(0).getField(TRANSFER_METHOD_CURRENCY), is("CAD")); + assertThat(transferMethods.get(0).getField(BANK_ACCOUNT_ID), is("3423423432")); + } + + @Test + public void testLoadTransferMethod_returnsNoAccounts() { + doAnswer(new Answer() { + @Override + public Object answer(InvocationOnMock invocation) { + HyperwalletListener listener = (HyperwalletListener) invocation.getArguments()[1]; + listener.onSuccess(null); + return listener; + } + }).when(mHyperwallet).listTransferMethods((HyperwalletTransferMethodPagination) any(), + ArgumentMatchers.>>any()); + + // test + mTransferMethodRepository.loadTransferMethod(mLoadTransferMethodListCallback); + + verify(mLoadTransferMethodListCallback).onTransferMethodListLoaded(mListTransferMethodCaptor.capture()); + verify(mLoadTransferMethodListCallback, never()).onError(any(HyperwalletErrors.class)); + + List transferMethods = mListTransferMethodCaptor.getValue(); + assertThat(transferMethods, is(nullValue())); + } + + @Test + public void testLoadTransferMethod_withError() { + final HyperwalletError error = new HyperwalletError("test message", "TEST_CODE"); + + doAnswer(new Answer() { + @Override + public Object answer(InvocationOnMock invocation) { + HyperwalletListener listener = (HyperwalletListener) invocation.getArguments()[1]; + List errorList = new ArrayList<>(); + errorList.add(error); + HyperwalletErrors errors = new HyperwalletErrors(errorList); + listener.onFailure(new HyperwalletException(errors)); + return listener; + } + }).when(mHyperwallet).listTransferMethods((HyperwalletTransferMethodPagination) any(), + ArgumentMatchers.>>any()); + + // test + mTransferMethodRepository.loadTransferMethod(mLoadTransferMethodListCallback); + + verify(mLoadTransferMethodListCallback, never()).onTransferMethodListLoaded( + ArgumentMatchers.anyList()); + verify(mLoadTransferMethodListCallback).onError(mErrorsArgumentCaptor.capture()); - verify(mockCallback).onError(mErrorsArgumentCaptor.capture()); - verify(mockCallback, never()).onTransferMethodLoaded(any(HyperwalletTransferMethod.class)); assertThat(mErrorsArgumentCaptor.getValue().getErrors(), hasItem(error)); } } \ No newline at end of file From 21fe1aa329dee37613e62f62b2c3b8cb0395c61b Mon Sep 17 00:00:00 2001 From: Flavio Mattos Date: Wed, 8 May 2019 17:18:19 -0700 Subject: [PATCH 2/4] HW-52538 remove suffix account --- ui/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/src/main/res/values/strings.xml b/ui/src/main/res/values/strings.xml index c503cb39b..a06fc44a9 100644 --- a/ui/src/main/res/values/strings.xml +++ b/ui/src/main/res/values/strings.xml @@ -72,7 +72,7 @@ Wire Account Paper Check Prepaid Card - PayPal Account + PayPal \uE000 \uE005 From 18aaf8a1c0c0376d47da9a5f1b4e11fbf5792183 Mon Sep 17 00:00:00 2001 From: Shyang Koong Date: Thu, 9 May 2019 10:58:26 -0700 Subject: [PATCH 3/4] Remove and list paypal test --- .../ui/ListTransferMethodTest.java | 77 ++++++++++++++++++- .../transfer_method_list_response.json | 17 ++++ ...d_list_single_paypal_account_response.json | 32 ++++++++ 3 files changed, 124 insertions(+), 2 deletions(-) create mode 100644 ui/src/test/resources/transfer_method_list_single_paypal_account_response.json diff --git a/ui/src/androidTest/java/com/hyperwallet/android/transfermethod/ui/ListTransferMethodTest.java b/ui/src/androidTest/java/com/hyperwallet/android/transfermethod/ui/ListTransferMethodTest.java index c9c491101..9c7038a6f 100644 --- a/ui/src/androidTest/java/com/hyperwallet/android/transfermethod/ui/ListTransferMethodTest.java +++ b/ui/src/androidTest/java/com/hyperwallet/android/transfermethod/ui/ListTransferMethodTest.java @@ -90,7 +90,6 @@ public void testListTransferMethod_userHasMultipleTransferMethods() { mActivityTestRule.launchActivity(null); // assert - onView(withId(R.id.toolbar)).check(matches(isDisplayed())); onView(allOf(instanceOf(TextView.class), withParent(withId(R.id.toolbar)))) .check(matches(withText(R.string.title_activity_list_transfer_method))); onView(withId(R.id.fab)).check(matches(isDisplayed())); @@ -146,7 +145,17 @@ public void testListTransferMethod_userHasMultipleTransferMethods() { onView(withId(R.id.list_transfer_method_item)).check( matches(atPosition(4, hasDescendant(withDrawable(R.drawable.ic_three_dots_16dp))))); - onView(withId(R.id.list_transfer_method_item)).check(new RecyclerViewCountAssertion(5)); + onView(withId(R.id.list_transfer_method_item)).check( + matches(atPosition(5, hasDescendant(withText(R.string.paypal_account_font_icon))))); + onView(withId(R.id.list_transfer_method_item)).check( + matches(atPosition(5, hasDescendant(withText(R.string.paypal_account))))); + onView(withId(R.id.list_transfer_method_item)).check( + matches(atPosition(5, hasDescendant(withText("United States"))))); + //TODO: Try to check for non existence of transfer_method_type_description_2 + onView(withId(R.id.list_transfer_method_item)).check( + matches(atPosition(5, hasDescendant(withDrawable(R.drawable.ic_three_dots_16dp))))); + + onView(withId(R.id.list_transfer_method_item)).check(new RecyclerViewCountAssertion(6)); } @@ -337,6 +346,70 @@ public void onReceive(Context context, Intent intent) { } + @Test + public void testListTransferMethod_removePayPalAccount() throws InterruptedException { + mMockWebServer.mockResponse().withHttpResponseCode(HTTP_OK).withBody(sResourceManager + .getResourceContent("transfer_method_list_single_paypal_account_response.json")).mock(); + mMockWebServer.mockResponse().withHttpResponseCode(HTTP_OK).withBody(sResourceManager + .getResourceContent("transfer_method_deactivate_success.json")).mock(); + mMockWebServer.mockResponse().withHttpResponseCode(HTTP_NO_CONTENT).withBody("").mock(); + + + final CountDownLatch gate = new CountDownLatch(1); + final BroadcastReceiver br = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + gate.countDown(); + + HyperwalletStatusTransition statusTransition = intent.getParcelableExtra( + "hyperwallet-local-broadcast-payload"); + assertThat("Transition is not valid", statusTransition.getTransition(), is(DE_ACTIVATED)); + } + }; + + // run test + mActivityTestRule.launchActivity(null); + LocalBroadcastManager.getInstance(mActivityTestRule.getActivity().getApplicationContext()) + .registerReceiver(br, new IntentFilter("ACTION_HYPERWALLET_TRANSFER_METHOD_DEACTIVATED")); + + // assert + onView(withId(R.id.toolbar)).check(matches(isDisplayed())); + onView(allOf(instanceOf(TextView.class), withParent(withId(R.id.toolbar)))) + .check(matches(withText(R.string.title_activity_list_transfer_method))); + onView(withId(R.id.fab)).check(matches(isDisplayed())); + + onView(withId(R.id.list_transfer_method_item)).check( + matches(atPosition(0, hasDescendant(withText(R.string.paypal_account_font_icon))))); + onView(withId(R.id.list_transfer_method_item)).check( + matches(atPosition(0, hasDescendant(withText(R.string.paypal_account))))); + onView(withId(R.id.list_transfer_method_item)).check( + matches(atPosition(0, hasDescendant(withText("United States"))))); + onView(withId(R.id.list_transfer_method_item)).check( + matches(atPosition(0, hasDescendant(withDrawable(R.drawable.ic_three_dots_16dp))))); + + onView(allOf(instanceOf(ImageButton.class), hasSibling(withText(R.string.paypal_account)))).perform(click()) + .inRoot(Matchers.instanceOf(MenuItem.class)); + onView(withDrawable(R.drawable.ic_trash)).check(matches(isDisplayed())); + onView(withText(R.string.menu_remove_account)).check(matches(isDisplayed())).perform(click()); + + // confirmation dialog is shown before deletion + onView(withText(R.string.transfer_method_remove_confirmation_title)).check(matches(isDisplayed())); + onView(withText(R.string.transfer_method_remove_confirmation)).check(matches(isDisplayed())); + onView(withId(android.R.id.button1)).check(matches(withText(R.string.remove_button_label))); + onView(withId(android.R.id.button2)).check(matches(withText(R.string.cancel_button_label))); + + onView(withId(android.R.id.button1)).perform(click()); + + gate.await(5, SECONDS); + LocalBroadcastManager.getInstance(mActivityTestRule.getActivity().getApplicationContext()).unregisterReceiver( + br); + assertThat("Action is not broadcasted", gate.getCount(), is(0L)); + + onView(withId(R.id.empty_transfer_method_list_layout)).check(matches(isDisplayed())); + onView(withText(R.string.empty_list_transfer_method_information)).check(matches(isDisplayed())); + + } + @Test public void testListTransferMethod_removeBankAccountClickCancel() throws InterruptedException { mMockWebServer.mockResponse().withHttpResponseCode(HTTP_OK).withBody(sResourceManager diff --git a/ui/src/test/resources/transfer_method_list_response.json b/ui/src/test/resources/transfer_method_list_response.json index a83276744..221efcdc8 100644 --- a/ui/src/test/resources/transfer_method_list_response.json +++ b/ui/src/test/resources/transfer_method_list_response.json @@ -146,6 +146,23 @@ "href": "https://localhost:8181/rest/v3/users/usr-a51c7522-ccba-4bcf-a6a7-bc59dae8f9b0/bank-accounts/trm-13141cde-56a1-4bde-ab82-534fde4d1cdb" } ] + }, + { + "token": "trm-f3f3d205-b7fb-4292-bd40-fbe814c7efd3", + "type": "PAYPAL_ACCOUNT", + "status": "ACTIVATED", + "createdOn": "2019-05-08T20:28:38", + "transferMethodCountry": "US", + "transferMethodCurrency": "USD", + "email": "honey.thigpen@ukbuilder.com", + "links": [ + { + "params": { + "rel": "self" + }, + "href": "https://localhost:8181/rest/v3/users/usr-fa76a738-f43d-48b9-9a7a-7048d44a5d2d/transfer-methods/trm-f3f3d205-b7fb-4292-bd40-fbe814c7efd3" + } + ] } ], "links": [ diff --git a/ui/src/test/resources/transfer_method_list_single_paypal_account_response.json b/ui/src/test/resources/transfer_method_list_single_paypal_account_response.json new file mode 100644 index 000000000..14837f4d3 --- /dev/null +++ b/ui/src/test/resources/transfer_method_list_single_paypal_account_response.json @@ -0,0 +1,32 @@ +{ + "count": 1, + "offset": 0, + "limit": 10, + "data": [ + { + "token": "trm-f3f3d205-b7fb-4292-bd40-fbe814c7efd3", + "type": "PAYPAL_ACCOUNT", + "status": "ACTIVATED", + "createdOn": "2019-05-08T20:28:38", + "transferMethodCountry": "US", + "transferMethodCurrency": "USD", + "email": "honey.thigpen@ukbuilder.com", + "links": [ + { + "params": { + "rel": "self" + }, + "href": "https://localhost:8181/rest/v3/users/usr-fa76a738-f43d-48b9-9a7a-7048d44a5d2d/transfer-methods/trm-f3f3d205-b7fb-4292-bd40-fbe814c7efd3" + } + ] + } + ], + "links": [ + { + "params": { + "rel": "self" + }, + "href": "https://localhost:8181/rest/v3/users/usr-fa76a738-f43d-48b9-9a7a-7048d44a5d2d/transfer-methods?offset=0&limit=10&sortBy=-createdOn&status=ACTIVATED" + } + ] +} \ No newline at end of file From d7915aefef16ba2f326429181761c788d8dd4caf Mon Sep 17 00:00:00 2001 From: Flavio Mattos Date: Thu, 9 May 2019 15:26:31 -0700 Subject: [PATCH 4/4] update prepaid card icon mapping --- ui/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/src/main/res/values/strings.xml b/ui/src/main/res/values/strings.xml index a06fc44a9..7e43ad98f 100644 --- a/ui/src/main/res/values/strings.xml +++ b/ui/src/main/res/values/strings.xml @@ -78,7 +78,7 @@ \uE005 \uE00D \uE002 - \uE00E + \uE00A \uE021 Search Hint