From 85de0086be4f833bab14d1c8f5e03bd39a6b06dd Mon Sep 17 00:00:00 2001 From: Vikas Wagh Date: Fri, 6 Aug 2021 15:39:26 -0700 Subject: [PATCH 1/2] DTSERWTHRE-750 Remove default country logic during Transfer method creation --- .../view/SelectTransferMethodPresenter.java | 8 +- .../SelectTransferMethodPresenterTest.java | 84 +++++++++++++++---- .../src/test/resources/user_al_response.json | 26 ++++++ 3 files changed, 98 insertions(+), 20 deletions(-) create mode 100644 transfermethodui/src/test/resources/user_al_response.json diff --git a/transfermethodui/src/main/java/com/hyperwallet/android/ui/transfermethod/view/SelectTransferMethodPresenter.java b/transfermethodui/src/main/java/com/hyperwallet/android/ui/transfermethod/view/SelectTransferMethodPresenter.java index 7e529c0c6..845807692 100644 --- a/transfermethodui/src/main/java/com/hyperwallet/android/ui/transfermethod/view/SelectTransferMethodPresenter.java +++ b/transfermethodui/src/main/java/com/hyperwallet/android/ui/transfermethod/view/SelectTransferMethodPresenter.java @@ -17,8 +17,6 @@ */ package com.hyperwallet.android.ui.transfermethod.view; -import static com.hyperwallet.android.ExceptionMapper.EC_UNEXPECTED_EXCEPTION; - import android.text.TextUtils; import androidx.annotation.NonNull; @@ -41,9 +39,9 @@ import java.util.Set; import java.util.TreeMap; -public class SelectTransferMethodPresenter implements SelectTransferMethodContract.Presenter { +import static com.hyperwallet.android.ExceptionMapper.EC_UNEXPECTED_EXCEPTION; - private static final String DEFAULT_COUNTRY_CODE = "US"; +public class SelectTransferMethodPresenter implements SelectTransferMethodContract.Presenter { private final TransferMethodConfigurationRepository mTransferMethodConfigurationRepository; private final UserRepository mUserRepository; @@ -82,7 +80,7 @@ public void onKeysLoaded(@Nullable final HyperwalletTransferMethodConfigurationK : key.getCountry(countryCode); if (country == null) { // param and user country is null - country = key.getCountry(DEFAULT_COUNTRY_CODE); + country = key.getCountries().iterator().next(); } String currencyCodeString = currencyCode; diff --git a/transfermethodui/src/test/java/com/hyperwallet/android/ui/transfermethod/SelectTransferMethodPresenterTest.java b/transfermethodui/src/test/java/com/hyperwallet/android/ui/transfermethod/SelectTransferMethodPresenterTest.java index c179c48f7..36ca70617 100644 --- a/transfermethodui/src/test/java/com/hyperwallet/android/ui/transfermethod/SelectTransferMethodPresenterTest.java +++ b/transfermethodui/src/test/java/com/hyperwallet/android/ui/transfermethod/SelectTransferMethodPresenterTest.java @@ -1,20 +1,5 @@ package com.hyperwallet.android.ui.transfermethod; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.is; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyString; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.atLeastOnce; -import static org.mockito.Mockito.doAnswer; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; -import static org.mockito.MockitoAnnotations.initMocks; - -import static com.hyperwallet.android.ExceptionMapper.EC_UNEXPECTED_EXCEPTION; - import com.hyperwallet.android.model.Error; import com.hyperwallet.android.model.Errors; import com.hyperwallet.android.model.graphql.HyperwalletTransferMethodConfigurationKey; @@ -31,6 +16,7 @@ import com.hyperwallet.android.ui.user.repository.UserRepositoryImpl; import org.hamcrest.Matchers; +import org.json.JSONException; import org.json.JSONObject; import org.junit.Before; import org.junit.Rule; @@ -48,6 +34,20 @@ import java.util.List; import java.util.TreeMap; +import static com.hyperwallet.android.ExceptionMapper.EC_UNEXPECTED_EXCEPTION; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.is; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyString; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.atLeastOnce; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import static org.mockito.MockitoAnnotations.initMocks; + @RunWith(RobolectricTestRunner.class) public class SelectTransferMethodPresenterTest { @@ -1073,4 +1073,58 @@ public Object answer(InvocationOnMock invocation) { selectTransferMethodPresenter.loadTransferMethodTypes(false, "CA", "CAD"); verify(view).showErrorLoadTransferMethodTypes(ArgumentMatchers.anyList()); } + + @Test + public void loadTransferMethodConfigurationKeys_userWithCountryNotPresentInProgramCountries() throws JSONException { + // User's country is Albania which is not present in mResult successful_tmc_keys_response.json + String userResponseBody = externalResourceManager.getResourceContent("user_al_response.json"); + final JSONObject userJsonObject = new JSONObject(userResponseBody); + final User user = new User(userJsonObject); + + when(view.isActive()).thenReturn(true); + doAnswer(new Answer() { + @Override + public Object answer(InvocationOnMock invocation) { + TransferMethodConfigurationRepository.LoadKeysCallback callback = + (TransferMethodConfigurationRepository.LoadKeysCallback) invocation.getArguments()[0]; + callback.onKeysLoaded(mResult); + return callback; + } + }).when(mTransferMethodConfigurationRepository).getKeys(any( + TransferMethodConfigurationRepository.LoadKeysCallback.class)); + doAnswer(new Answer() { + @Override + public Object answer(InvocationOnMock invocation) { + TransferMethodConfigurationRepository.LoadKeysCallback callback = + (TransferMethodConfigurationRepository.LoadKeysCallback) invocation.getArguments()[2]; + callback.onKeysLoaded(mFeeAndProcessingTimeResult); + return callback; + } + }).when(mTransferMethodConfigurationRepository).getTransferMethodTypesFeeAndProcessingTime(anyString(), anyString(), any( + TransferMethodConfigurationRepository.LoadKeysCallback.class)); + doAnswer(new Answer() { + @Override + public Object answer(InvocationOnMock invocation) { + UserRepository.LoadUserCallback userCallback = + (UserRepository.LoadUserCallback) invocation.getArguments()[0]; + userCallback.onUserLoaded(user); + return userCallback; + } + }).when(mUserRepository).loadUser(any( + UserRepository.LoadUserCallback.class)); + + selectTransferMethodPresenter.loadTransferMethodConfigurationKeys(true, null, null); + + // Canada is first country in successful_tmc_keys_response.json + verify(view).showTransferMethodCountry("CA"); + verify(view).showTransferMethodCurrency("CAD"); + verify(view).showTransferMethodTypes(ArgumentMatchers.anyList()); + verify(view, never()).showErrorLoadTransferMethodConfigurationKeys( + ArgumentMatchers.anyList()); + verify(view, never()).showErrorLoadCurrency(ArgumentMatchers.anyList()); + verify(view, never()).showErrorLoadTransferMethodTypes(ArgumentMatchers.anyList()); + verify(view, never()).showErrorLoadCountrySelection(ArgumentMatchers.anyList()); + verify(view, never()).showErrorLoadCurrencySelection(ArgumentMatchers.anyList()); + verify(view, never()).showAddTransferMethod(anyString(), anyString(), anyString(), anyString()); + } } diff --git a/transfermethodui/src/test/resources/user_al_response.json b/transfermethodui/src/test/resources/user_al_response.json new file mode 100644 index 000000000..a10d5a906 --- /dev/null +++ b/transfermethodui/src/test/resources/user_al_response.json @@ -0,0 +1,26 @@ +{ + "token": "usr-token-5", + "status": "PRE_ACTIVATED", + "createdOn": "2017-10-30T22:15:45", + "clientUserId": "123456", + "profileType": "INDIVIDUAL", + "firstName": "Person", + "lastName": "FromAlbania", + "dateOfBirth": "1991-01-01", + "email": "user+5satF1xV@hyperwallet.com", + "addressLine1": "950 Granville", + "city": "Gjirokaster", + "stateProvince": "Gjirokaster", + "country": "AL", + "postalCode": "443001", + "language": "en", + "programToken": "prg-token-2", + "links": [ + { + "params": { + "rel": "self" + }, + "href": "https://localhost/rest/v3/users/usr-token-5" + } + ] +} \ No newline at end of file From bbee770ab2e80f813716c2ae06723827e4b6b6b8 Mon Sep 17 00:00:00 2001 From: Vikas Wagh Date: Fri, 6 Aug 2021 15:45:50 -0700 Subject: [PATCH 2/2] refactor --- .../view/SelectTransferMethodPresenter.java | 4 +-- .../SelectTransferMethodPresenterTest.java | 29 ++++++++++--------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/transfermethodui/src/main/java/com/hyperwallet/android/ui/transfermethod/view/SelectTransferMethodPresenter.java b/transfermethodui/src/main/java/com/hyperwallet/android/ui/transfermethod/view/SelectTransferMethodPresenter.java index 845807692..28583e43e 100644 --- a/transfermethodui/src/main/java/com/hyperwallet/android/ui/transfermethod/view/SelectTransferMethodPresenter.java +++ b/transfermethodui/src/main/java/com/hyperwallet/android/ui/transfermethod/view/SelectTransferMethodPresenter.java @@ -17,6 +17,8 @@ */ package com.hyperwallet.android.ui.transfermethod.view; +import static com.hyperwallet.android.ExceptionMapper.EC_UNEXPECTED_EXCEPTION; + import android.text.TextUtils; import androidx.annotation.NonNull; @@ -39,8 +41,6 @@ import java.util.Set; import java.util.TreeMap; -import static com.hyperwallet.android.ExceptionMapper.EC_UNEXPECTED_EXCEPTION; - public class SelectTransferMethodPresenter implements SelectTransferMethodContract.Presenter { private final TransferMethodConfigurationRepository mTransferMethodConfigurationRepository; diff --git a/transfermethodui/src/test/java/com/hyperwallet/android/ui/transfermethod/SelectTransferMethodPresenterTest.java b/transfermethodui/src/test/java/com/hyperwallet/android/ui/transfermethod/SelectTransferMethodPresenterTest.java index 36ca70617..7e941e228 100644 --- a/transfermethodui/src/test/java/com/hyperwallet/android/ui/transfermethod/SelectTransferMethodPresenterTest.java +++ b/transfermethodui/src/test/java/com/hyperwallet/android/ui/transfermethod/SelectTransferMethodPresenterTest.java @@ -1,5 +1,20 @@ package com.hyperwallet.android.ui.transfermethod; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.is; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyString; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.atLeastOnce; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import static org.mockito.MockitoAnnotations.initMocks; + +import static com.hyperwallet.android.ExceptionMapper.EC_UNEXPECTED_EXCEPTION; + import com.hyperwallet.android.model.Error; import com.hyperwallet.android.model.Errors; import com.hyperwallet.android.model.graphql.HyperwalletTransferMethodConfigurationKey; @@ -34,20 +49,6 @@ import java.util.List; import java.util.TreeMap; -import static com.hyperwallet.android.ExceptionMapper.EC_UNEXPECTED_EXCEPTION; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.is; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyString; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.atLeastOnce; -import static org.mockito.Mockito.doAnswer; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; -import static org.mockito.MockitoAnnotations.initMocks; - @RunWith(RobolectricTestRunner.class) public class SelectTransferMethodPresenterTest {