diff --git a/settings.gradle b/settings.gradle index 35f8b65f3..3f286eb1e 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,2 +1,2 @@ -include ':ui', ':common', ':receipt', ':userrepository' +include ':ui', ':common', ':receipt', ':userrepository', ':transfermethodrepository' //add libraries here diff --git a/transfermethodrepository/.gitignore b/transfermethodrepository/.gitignore new file mode 100644 index 000000000..796b96d1c --- /dev/null +++ b/transfermethodrepository/.gitignore @@ -0,0 +1 @@ +/build diff --git a/transfermethodrepository/build.gradle b/transfermethodrepository/build.gradle new file mode 100644 index 000000000..fcf28601b --- /dev/null +++ b/transfermethodrepository/build.gradle @@ -0,0 +1,8 @@ +apply from: "$rootProject.projectDir/android-library.gradle" +apply from: "$rootProject.projectDir/publish.gradle" + +dependencies { + androidTestImplementation "androidx.test:rules:$testRulesVersion" + testImplementation "org.robolectric:robolectric:$robolectricVersion" + testImplementation "com.squareup.okhttp3:mockwebserver:$mockWebServerVersion" +} \ No newline at end of file diff --git a/transfermethodrepository/config/jacoco-settings.gradle b/transfermethodrepository/config/jacoco-settings.gradle new file mode 100644 index 000000000..f1b0a7c45 --- /dev/null +++ b/transfermethodrepository/config/jacoco-settings.gradle @@ -0,0 +1,78 @@ +apply plugin: 'jacoco' + +final def jacocoVersion = "0.8.2" + +jacoco { + toolVersion = jacocoVersion +} + +android { + testOptions { + unitTests { + includeAndroidResources = true + returnDefaultValues = true + } + unitTests.all { + jacoco { + includeNoLocationClasses = true + } + } + } +} + +def fileFilter = ['**/BuildConfig.*'] + +def debugClassPaths = [ + '**/intermediates/javac/debug/*/classes/**' +] + +final def coverageSourceDirs = ["$project.projectDir/src/main/java/*"] + +task jacocoTestReport(type: JacocoReport, dependsOn: 'testDebugUnitTest') { + + group = 'Reporting' + description = 'Generate Jacoco coverage reports.' + reports { + html { + enabled = true + destination file("$project.buildDir/reports/jacoco") + } + } + + classDirectories = fileTree( + dir: "${buildDir}", + includes: debugClassPaths, + excludes: fileFilter + ) + + additionalSourceDirs = files(coverageSourceDirs) + sourceDirectories = files(coverageSourceDirs) + executionData = files("${project.buildDir}/jacoco/testDebugUnitTest.exec") +} + +task jacocoTestCoverageVerification(type: JacocoCoverageVerification, dependsOn: 'jacocoTestReport') { + + group = 'Verification' + classDirectories = fileTree( + dir: "${buildDir}", + includes: debugClassPaths, + excludes: fileFilter + ) + additionalSourceDirs = files(coverageSourceDirs) + sourceDirectories = files(coverageSourceDirs) + executionData = files("${project.buildDir}/jacoco/testDebugUnitTest.exec") + + violationRules { + setFailOnViolation(true) + + rule { + element = 'CLASS' + limit { + value = 'COVEREDRATIO' + counter = 'BRANCH' + minimum = 0.65 + } + } + } +} + diff --git a/transfermethodrepository/config/lint.xml b/transfermethodrepository/config/lint.xml new file mode 100644 index 000000000..9242eccb2 --- /dev/null +++ b/transfermethodrepository/config/lint.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/transfermethodrepository/proguard-rules.pro b/transfermethodrepository/proguard-rules.pro new file mode 100644 index 000000000..f1b424510 --- /dev/null +++ b/transfermethodrepository/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/transfermethodrepository/src/main/AndroidManifest.xml b/transfermethodrepository/src/main/AndroidManifest.xml new file mode 100644 index 000000000..dfdab902d --- /dev/null +++ b/transfermethodrepository/src/main/AndroidManifest.xml @@ -0,0 +1,2 @@ + diff --git a/ui/src/main/java/com/hyperwallet/android/ui/repository/TransferMethodConfigurationRepository.java b/transfermethodrepository/src/main/java/com/hyperwallet/android/ui/transfermethod/repository/TransferMethodConfigurationRepository.java similarity index 97% rename from ui/src/main/java/com/hyperwallet/android/ui/repository/TransferMethodConfigurationRepository.java rename to transfermethodrepository/src/main/java/com/hyperwallet/android/ui/transfermethod/repository/TransferMethodConfigurationRepository.java index 08c9694e3..31389ee50 100644 --- a/ui/src/main/java/com/hyperwallet/android/ui/repository/TransferMethodConfigurationRepository.java +++ b/transfermethodrepository/src/main/java/com/hyperwallet/android/ui/transfermethod/repository/TransferMethodConfigurationRepository.java @@ -24,7 +24,7 @@ * USE OR OTHER DEALINGS * IN THE SOFTWARE. */ -package com.hyperwallet.android.ui.repository; +package com.hyperwallet.android.ui.transfermethod.repository; import androidx.annotation.NonNull; import androidx.annotation.Nullable; diff --git a/ui/src/main/java/com/hyperwallet/android/ui/repository/TransferMethodConfigurationRepositoryImpl.java b/transfermethodrepository/src/main/java/com/hyperwallet/android/ui/transfermethod/repository/TransferMethodConfigurationRepositoryImpl.java similarity index 96% rename from ui/src/main/java/com/hyperwallet/android/ui/repository/TransferMethodConfigurationRepositoryImpl.java rename to transfermethodrepository/src/main/java/com/hyperwallet/android/ui/transfermethod/repository/TransferMethodConfigurationRepositoryImpl.java index b8384793f..abf89e227 100644 --- a/ui/src/main/java/com/hyperwallet/android/ui/repository/TransferMethodConfigurationRepositoryImpl.java +++ b/transfermethodrepository/src/main/java/com/hyperwallet/android/ui/transfermethod/repository/TransferMethodConfigurationRepositoryImpl.java @@ -24,7 +24,7 @@ * USE OR OTHER DEALINGS * IN THE SOFTWARE. */ -package com.hyperwallet.android.ui.repository; +package com.hyperwallet.android.ui.transfermethod.repository; import android.os.Handler; @@ -39,7 +39,7 @@ import com.hyperwallet.android.model.graphql.HyperwalletTransferMethodConfigurationKey; import com.hyperwallet.android.model.graphql.query.HyperwalletTransferMethodConfigurationFieldQuery; import com.hyperwallet.android.model.graphql.query.HyperwalletTransferMethodConfigurationKeysQuery; -import com.hyperwallet.android.ui.common.util.EspressoIdlingResource; +import com.hyperwallet.android.ui.transfermethod.repository.util.EspressoIdlingResource; import java.util.HashMap; import java.util.Map; @@ -50,7 +50,8 @@ public class TransferMethodConfigurationRepositoryImpl implements TransferMethod private final Map mFieldMap; private HyperwalletTransferMethodConfigurationKey mTransferMethodConfigurationKey; - TransferMethodConfigurationRepositoryImpl() { + //todo use default modifier after RepositoryFactory is removed + public TransferMethodConfigurationRepositoryImpl() { mHandler = new Handler(); mFieldMap = new HashMap<>(); } diff --git a/ui/src/main/java/com/hyperwallet/android/ui/repository/TransferMethodRepository.java b/transfermethodrepository/src/main/java/com/hyperwallet/android/ui/transfermethod/repository/TransferMethodRepository.java similarity index 98% rename from ui/src/main/java/com/hyperwallet/android/ui/repository/TransferMethodRepository.java rename to transfermethodrepository/src/main/java/com/hyperwallet/android/ui/transfermethod/repository/TransferMethodRepository.java index 37baebfc9..dce02d886 100644 --- a/ui/src/main/java/com/hyperwallet/android/ui/repository/TransferMethodRepository.java +++ b/transfermethodrepository/src/main/java/com/hyperwallet/android/ui/transfermethod/repository/TransferMethodRepository.java @@ -14,7 +14,7 @@ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -package com.hyperwallet.android.ui.repository; +package com.hyperwallet.android.ui.transfermethod.repository; import androidx.annotation.NonNull; diff --git a/transfermethodrepository/src/main/java/com/hyperwallet/android/ui/transfermethod/repository/TransferMethodRepositoryFactory.java b/transfermethodrepository/src/main/java/com/hyperwallet/android/ui/transfermethod/repository/TransferMethodRepositoryFactory.java new file mode 100644 index 000000000..5cada16b2 --- /dev/null +++ b/transfermethodrepository/src/main/java/com/hyperwallet/android/ui/transfermethod/repository/TransferMethodRepositoryFactory.java @@ -0,0 +1,31 @@ +package com.hyperwallet.android.ui.transfermethod.repository; + +public class TransferMethodRepositoryFactory { + private static TransferMethodRepositoryFactory sInstance; + private TransferMethodRepository mTransferMethodRepository; + private TransferMethodConfigurationRepository mTransferMethodConfigurationRepository; + + private TransferMethodRepositoryFactory() { + mTransferMethodRepository = new TransferMethodRepositoryImpl(); + mTransferMethodConfigurationRepository = new TransferMethodConfigurationRepositoryImpl(); + } + + public static synchronized TransferMethodRepositoryFactory getInstance() { + if (sInstance == null) { + sInstance = new TransferMethodRepositoryFactory(); + } + return sInstance; + } + + public static void clearInstance() { + sInstance = null; + } + + public TransferMethodRepository getTransferMethodRepository() { + return mTransferMethodRepository; + } + + public TransferMethodConfigurationRepository getTransferMethodConfigurationRepository() { + return mTransferMethodConfigurationRepository; + } +} diff --git a/ui/src/main/java/com/hyperwallet/android/ui/repository/TransferMethodRepositoryImpl.java b/transfermethodrepository/src/main/java/com/hyperwallet/android/ui/transfermethod/repository/TransferMethodRepositoryImpl.java similarity index 99% rename from ui/src/main/java/com/hyperwallet/android/ui/repository/TransferMethodRepositoryImpl.java rename to transfermethodrepository/src/main/java/com/hyperwallet/android/ui/transfermethod/repository/TransferMethodRepositoryImpl.java index 17aab2028..69f450ec2 100644 --- a/ui/src/main/java/com/hyperwallet/android/ui/repository/TransferMethodRepositoryImpl.java +++ b/transfermethodrepository/src/main/java/com/hyperwallet/android/ui/transfermethod/repository/TransferMethodRepositoryImpl.java @@ -14,7 +14,7 @@ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -package com.hyperwallet.android.ui.repository; +package com.hyperwallet.android.ui.transfermethod.repository; import static com.hyperwallet.android.model.HyperwalletStatusTransition.StatusDefinition.ACTIVATED; import static com.hyperwallet.android.model.transfermethod.HyperwalletTransferMethod.TransferMethodFields.TOKEN; diff --git a/transfermethodrepository/src/main/java/com/hyperwallet/android/ui/transfermethod/repository/util/EspressoIdlingResource.java b/transfermethodrepository/src/main/java/com/hyperwallet/android/ui/transfermethod/repository/util/EspressoIdlingResource.java new file mode 100644 index 000000000..75dacbae7 --- /dev/null +++ b/transfermethodrepository/src/main/java/com/hyperwallet/android/ui/transfermethod/repository/util/EspressoIdlingResource.java @@ -0,0 +1,24 @@ +package com.hyperwallet.android.ui.transfermethod.repository.util; + +import androidx.test.espresso.IdlingResource; +import androidx.test.espresso.idling.CountingIdlingResource; + +public class EspressoIdlingResource { + + private static final String RESOURCE = "GLOBAL"; + + private static CountingIdlingResource mCountingIdlingResource = + new CountingIdlingResource(RESOURCE); + + public static void increment() { + mCountingIdlingResource.increment(); + } + + public static void decrement() { + mCountingIdlingResource.decrement(); + } + + public static IdlingResource getIdlingResource() { + return mCountingIdlingResource; + } +} diff --git a/ui/src/test/java/com/hyperwallet/android/ui/repository/FieldMapKeyTest.java b/transfermethodrepository/src/test/java/com/hyperwallet/android/ui/transfermethod/repository/FieldMapKeyTest.java similarity index 89% rename from ui/src/test/java/com/hyperwallet/android/ui/repository/FieldMapKeyTest.java rename to transfermethodrepository/src/test/java/com/hyperwallet/android/ui/transfermethod/repository/FieldMapKeyTest.java index 297575fa0..1c0f53d8d 100644 --- a/ui/src/test/java/com/hyperwallet/android/ui/repository/FieldMapKeyTest.java +++ b/transfermethodrepository/src/test/java/com/hyperwallet/android/ui/transfermethod/repository/FieldMapKeyTest.java @@ -1,8 +1,10 @@ -package com.hyperwallet.android.ui.repository; +package com.hyperwallet.android.ui.transfermethod.repository; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; +import com.hyperwallet.android.ui.transfermethod.repository.FieldMapKey; + import org.junit.Test; public class FieldMapKeyTest { diff --git a/ui/src/test/java/com/hyperwallet/android/ui/repository/TransferMethodConfigurationRepositoryImplTest.java b/transfermethodrepository/src/test/java/com/hyperwallet/android/ui/transfermethod/repository/TransferMethodConfigurationRepositoryImplTest.java similarity index 98% rename from ui/src/test/java/com/hyperwallet/android/ui/repository/TransferMethodConfigurationRepositoryImplTest.java rename to transfermethodrepository/src/test/java/com/hyperwallet/android/ui/transfermethod/repository/TransferMethodConfigurationRepositoryImplTest.java index 7bcc36886..77d19b782 100644 --- a/ui/src/test/java/com/hyperwallet/android/ui/repository/TransferMethodConfigurationRepositoryImplTest.java +++ b/transfermethodrepository/src/test/java/com/hyperwallet/android/ui/transfermethod/repository/TransferMethodConfigurationRepositoryImplTest.java @@ -1,4 +1,4 @@ -package com.hyperwallet.android.ui.repository; +package com.hyperwallet.android.ui.transfermethod.repository; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.not; @@ -32,7 +32,7 @@ import com.hyperwallet.android.model.graphql.keyed.HyperwalletTransferMethodConfigurationKeyResult; import com.hyperwallet.android.model.graphql.query.HyperwalletTransferMethodConfigurationFieldQuery; import com.hyperwallet.android.model.graphql.query.HyperwalletTransferMethodConfigurationKeysQuery; -import com.hyperwallet.android.ui.rule.HyperwalletExternalResourceManager; +import com.hyperwallet.android.ui.transfermethod.repository.rule.HyperwalletExternalResourceManager; import com.hyperwallet.android.util.JsonUtils; import org.hamcrest.collection.IsEmptyCollection; diff --git a/transfermethodrepository/src/test/java/com/hyperwallet/android/ui/transfermethod/repository/TransferMethodRepositoryFactoryTest.java b/transfermethodrepository/src/test/java/com/hyperwallet/android/ui/transfermethod/repository/TransferMethodRepositoryFactoryTest.java new file mode 100644 index 000000000..7e89c5a03 --- /dev/null +++ b/transfermethodrepository/src/test/java/com/hyperwallet/android/ui/transfermethod/repository/TransferMethodRepositoryFactoryTest.java @@ -0,0 +1,39 @@ +package com.hyperwallet.android.ui.transfermethod.repository; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.not; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.hamcrest.MatcherAssert.assertThat; + +import org.junit.Test; + +public class TransferMethodRepositoryFactoryTest { + @Test + public void testGetInstance_verifyRepositoriesInitialized() { + TransferMethodRepositoryFactory repositoryFactory = TransferMethodRepositoryFactory.getInstance(); + assertThat(repositoryFactory, is(notNullValue())); + assertThat(repositoryFactory.getTransferMethodRepository(), is(notNullValue())); + assertThat(repositoryFactory.getTransferMethodConfigurationRepository(), is(notNullValue())); + } + + @Test + public void testClearInstance_verifyRepositoryCleared() { + TransferMethodRepositoryFactory repositoryFactory = TransferMethodRepositoryFactory.getInstance(); + + TransferMethodRepository transferMethodRepository = repositoryFactory.getTransferMethodRepository(); + TransferMethodConfigurationRepository configurationRepository = + repositoryFactory.getTransferMethodConfigurationRepository(); + TransferMethodRepositoryFactory currentRepositoryFactory = TransferMethodRepositoryFactory.getInstance(); + assertThat(repositoryFactory, is(currentRepositoryFactory)); + assertThat(transferMethodRepository, is(currentRepositoryFactory.getTransferMethodRepository())); + assertThat(configurationRepository, is(currentRepositoryFactory.getTransferMethodConfigurationRepository())); + + TransferMethodRepositoryFactory.clearInstance(); + + TransferMethodRepositoryFactory anotherRepositoryFactory = TransferMethodRepositoryFactory.getInstance(); + assertThat(repositoryFactory, is(not(anotherRepositoryFactory))); + assertThat(transferMethodRepository, is(not(anotherRepositoryFactory.getTransferMethodRepository()))); + assertThat(configurationRepository, + is(not(anotherRepositoryFactory.getTransferMethodConfigurationRepository()))); + } +} \ No newline at end of file diff --git a/ui/src/test/java/com/hyperwallet/android/ui/repository/TransferMethodRepositoryImplTest.java b/transfermethodrepository/src/test/java/com/hyperwallet/android/ui/transfermethod/repository/TransferMethodRepositoryImplTest.java similarity index 99% rename from ui/src/test/java/com/hyperwallet/android/ui/repository/TransferMethodRepositoryImplTest.java rename to transfermethodrepository/src/test/java/com/hyperwallet/android/ui/transfermethod/repository/TransferMethodRepositoryImplTest.java index 59c3d3ee9..0e7b396c0 100644 --- a/ui/src/test/java/com/hyperwallet/android/ui/repository/TransferMethodRepositoryImplTest.java +++ b/transfermethodrepository/src/test/java/com/hyperwallet/android/ui/transfermethod/repository/TransferMethodRepositoryImplTest.java @@ -1,4 +1,4 @@ -package com.hyperwallet.android.ui.repository; +package com.hyperwallet.android.ui.transfermethod.repository; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; diff --git a/transfermethodrepository/src/test/java/com/hyperwallet/android/ui/transfermethod/repository/rule/HyperwalletExternalResourceManager.java b/transfermethodrepository/src/test/java/com/hyperwallet/android/ui/transfermethod/repository/rule/HyperwalletExternalResourceManager.java new file mode 100644 index 000000000..423bf796e --- /dev/null +++ b/transfermethodrepository/src/test/java/com/hyperwallet/android/ui/transfermethod/repository/rule/HyperwalletExternalResourceManager.java @@ -0,0 +1,74 @@ +package com.hyperwallet.android.ui.transfermethod.repository.rule; + +import org.junit.rules.TestWatcher; +import org.junit.runner.Description; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.StringWriter; +import java.io.Writer; +import java.net.URL; +import java.util.logging.Level; +import java.util.logging.Logger; + +public class HyperwalletExternalResourceManager extends TestWatcher { + + private static final String EMPTY = ""; + private ClassLoader classLoader; + private Logger logger; + + @Override + protected void starting(Description description) { + super.starting(description); + classLoader = description.getTestClass().getClassLoader(); + logger = Logger.getLogger(description.getTestClass().getName()); + } + + + public String getResourceContent(final String resourceName) { + if (resourceName == null) { + throw new IllegalArgumentException("Parameter resourceName cannot be null"); + } + + return getContent(resourceName); + } + + private String getContent(final String resourceName) { + + URL resource = classLoader.getResource(resourceName); + InputStream inputStream = null; + Writer writer = new StringWriter(); + String resourceContent = EMPTY; + if (resource != null) { + try { + inputStream = resource.openStream(); + BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8")); + String line = reader.readLine(); + while (line != null) { + writer.write(line); + line = reader.readLine(); + } + resourceContent = writer.toString(); + + } catch (Exception e) { + logger.log(Level.WARNING, "There was an error loading an external resource", e); + } finally { + try { + if (inputStream != null) { + inputStream.close(); + } + } catch (Exception e) { + logger.log(Level.SEVERE, "There was an error closing input stream", e); + } + try { + writer.close(); + } catch (IOException e) { + logger.log(Level.SEVERE, "There was an error closing writer", e); + } + } + } + return resourceContent; + } +} diff --git a/transfermethodrepository/src/test/resources/error_tmc_keys_response.json b/transfermethodrepository/src/test/resources/error_tmc_keys_response.json new file mode 100644 index 000000000..3f28d6252 --- /dev/null +++ b/transfermethodrepository/src/test/resources/error_tmc_keys_response.json @@ -0,0 +1,13 @@ +{ + "errors": [ + { + "message": "Validation error of type FieldUndefined: Field 'nodess' in type 'TransferMethodConfigurationConnection' is undefined @ 'transferMethodConfigurations/nodess'", + "locations": [ + { + "line": 4, + "column": 3 + } + ] + } + ] +} \ No newline at end of file diff --git a/transfermethodrepository/src/test/resources/successful_tmc_fields_bank_account_response.json b/transfermethodrepository/src/test/resources/successful_tmc_fields_bank_account_response.json new file mode 100644 index 000000000..238492d0b --- /dev/null +++ b/transfermethodrepository/src/test/resources/successful_tmc_fields_bank_account_response.json @@ -0,0 +1,1250 @@ +{ + "data": { + "transferMethodUIConfigurations": { + "nodes": [ + { + "country": "US", + "currency": "USD", + "transferMethodType": "BANK_ACCOUNT", + "profile": "INDIVIDUAL", + "fieldGroups": { + "nodes": [ + { + "group": "ACCOUNT_INFORMATION", + "fields": [ + { + "category": "ACCOUNT", + "dataType": "NUMBER", + "isEditable": true, + "label": "Routing Number", + "maxLength": 9, + "minLength": 9, + "name": "branchId", + "placeholder": "", + "regularExpression": "^[0-9]{9}$", + "isRequired": true, + "validationMessage": { + "length": "The exact length of this field is 9.", + "pattern": "is invalid length or format.", + "empty": "You must provide a value for this field" + } + }, + { + "category": "ACCOUNT", + "dataType": "NUMBER", + "isEditable": true, + "label": "Account Number", + "maxLength": 17, + "minLength": 4, + "name": "bankAccountId", + "placeholder": "", + "regularExpression": "^(?![0-]+$)[0-9-]{4,17}$", + "isRequired": true, + "validationMessage": { + "length": "The minimum length of this field is 4 and maximum length is 17.", + "pattern": "is invalid length or format.", + "empty": "You must provide a value for this field" + } + }, + { + "category": "ACCOUNT", + "dataType": "SELECTION", + "isEditable": true, + "fieldSelectionOptions": [ + { + "label": "Checking", + "value": "Checking" + }, + { + "label": "Savings", + "value": "Savings" + } + ], + "label": "Account Type", + "name": "bankAccountPurpose", + "placeholder": "", + "isRequired": true, + "validationMessage": { + "length": "", + "pattern": "is invalid length or format.", + "empty": "You must provide a value for this field" + } + } + ] + }, + { + "group": "INTERMEDIARY_ACCOUNT", + "fields": [ + { + "category": "ACCOUNT", + "dataType": "SELECTION", + "isEditable": true, + "fieldSelectionOptions": [ + { + "label": "Self", + "value": "SELF" + } + ], + "label": "Relationship", + "name": "bankAccountRelationship", + "placeholder": "", + "isRequired": true, + "value": "SELF", + "validationMessage": { + "length": "", + "pattern": "is invalid length or format.", + "empty": "You must provide a value for this field" + } + } + ] + }, + { + "group": "ACCOUNT_HOLDER", + "fields": [ + { + "category": "PROFILE", + "dataType": "TEXT", + "isEditable": false, + "label": "First Name", + "name": "firstName", + "placeholder": "", + "regularExpression": "^[\\sa-zA-Z0-9\\-.,'\\u00C0-\\u00FF\\u0100-\\u017F\\u0180-\\u024F]{1,50}$", + "isRequired": true, + "value": "Brody", + "validationMessage": { + "length": "", + "pattern": "is invalid length or format.", + "empty": "You must provide a value for this field" + } + }, + { + "category": "PROFILE", + "dataType": "TEXT", + "isEditable": true, + "label": "Middle Name", + "name": "middleName", + "placeholder": "", + "regularExpression": "^[\\sa-zA-Z0-9\\-.,'\\u00C0-\\u00FF\\u0100-\\u017F\\u0180-\\u024F]{1,50}$", + "isRequired": false, + "validationMessage": { + "length": "", + "pattern": "is invalid length or format.", + "empty": "You must provide a value for this field" + } + }, + { + "category": "PROFILE", + "dataType": "TEXT", + "isEditable": true, + "label": "Last Name", + "name": "lastName", + "placeholder": "", + "regularExpression": "^[\\sa-zA-Z0-9\\-.,'\\u00C0-\\u00FF\\u0100-\\u017F\\u0180-\\u024F]{1,50}$", + "isRequired": true, + "value": "Nehru", + "validationMessage": { + "length": "", + "pattern": "is invalid length or format.", + "empty": "You must provide a value for this field" + } + }, + { + "category": "PROFILE", + "dataType": "DATE", + "isEditable": true, + "label": "Date of Birth", + "name": "dateOfBirth", + "placeholder": "", + "isRequired": false, + "value": "2000-01-01", + "validationMessage": { + "length": "", + "pattern": "is invalid length or format.", + "empty": "You must provide a value for this field" + } + } + ] + }, + { + "group": "CONTACT_INFORMATION", + "fields": [ + { + "category": "PROFILE", + "dataType": "PHONE", + "isEditable": true, + "label": "Phone Number", + "name": "phoneNumber", + "placeholder": "", + "regularExpression": "^(?=.{7,17}$)[\\+]{0,1}[0-9\\(\\)\\ \\.\\-]{1,}$", + "isRequired": false, + "value": "+1 604 6666666", + "validationMessage": { + "length": "", + "pattern": "is invalid length or format.", + "empty": "You must provide a value for this field" + } + }, + { + "category": "PROFILE", + "dataType": "PHONE", + "isEditable": true, + "label": "Mobile Number", + "name": "mobileNumber", + "placeholder": "", + "regularExpression": "^(?=.{7,17}$)[\\+]{0,1}[0-9\\(\\)\\ \\.\\-]{1,}$", + "isRequired": false, + "value": "604 666 6666", + "validationMessage": { + "length": "", + "pattern": "is invalid length or format.", + "empty": "You must provide a value for this field" + } + } + ] + }, + { + "group": "ADDRESS", + "fields": [ + { + "category": "ADDRESS", + "dataType": "SELECTION", + "isEditable": false, + "fieldSelectionOptions": [ + { + "label": "Afghanistan", + "value": "AF" + }, + { + "label": "\u00c5land Islands", + "value": "AX" + }, + { + "label": "Albania", + "value": "AL" + }, + { + "label": "Algeria", + "value": "DZ" + }, + { + "label": "American Samoa", + "value": "AS" + }, + { + "label": "Andorra", + "value": "AD" + }, + { + "label": "Angola", + "value": "AO" + }, + { + "label": "Anguilla", + "value": "AI" + }, + { + "label": "Antarctica", + "value": "AQ" + }, + { + "label": "Antigua and Barbuda", + "value": "AG" + }, + { + "label": "Argentina", + "value": "AR" + }, + { + "label": "Armenia", + "value": "AM" + }, + { + "label": "Aruba", + "value": "AW" + }, + { + "label": "Australia", + "value": "AU" + }, + { + "label": "Austria", + "value": "AT" + }, + { + "label": "Azerbaijan", + "value": "AZ" + }, + { + "label": "Bahamas", + "value": "BS" + }, + { + "label": "Bahrain", + "value": "BH" + }, + { + "label": "Bangladesh", + "value": "BD" + }, + { + "label": "Barbados", + "value": "BB" + }, + { + "label": "Belgium", + "value": "BE" + }, + { + "label": "Belize", + "value": "BZ" + }, + { + "label": "Benin", + "value": "BJ" + }, + { + "label": "Bermuda", + "value": "BM" + }, + { + "label": "Bhutan", + "value": "BT" + }, + { + "label": "Bolivia", + "value": "BO" + }, + { + "label": "Caribbean Netherlands", + "value": "BQ" + }, + { + "label": "Bosnia and Herzegovina", + "value": "BA" + }, + { + "label": "Botswana", + "value": "BW" + }, + { + "label": "Bouvet Island", + "value": "BV" + }, + { + "label": "Brazil", + "value": "BR" + }, + { + "label": "British Indian Ocean Territory", + "value": "IO" + }, + { + "label": "Brunei", + "value": "BN" + }, + { + "label": "Bulgaria", + "value": "BG" + }, + { + "label": "Burkina Faso", + "value": "BF" + }, + { + "label": "Burundi", + "value": "BI" + }, + { + "label": "Cambodia", + "value": "KH" + }, + { + "label": "Cameroon", + "value": "CM" + }, + { + "label": "Canada", + "value": "CA" + }, + { + "label": "Cape Verde", + "value": "CV" + }, + { + "label": "Cayman Islands", + "value": "KY" + }, + { + "label": "Chad", + "value": "TD" + }, + { + "label": "Chile", + "value": "CL" + }, + { + "label": "China", + "value": "CN" + }, + { + "label": "Christmas Island", + "value": "CX" + }, + { + "label": "Cocos [Keeling] Islands", + "value": "CC" + }, + { + "label": "Colombia", + "value": "CO" + }, + { + "label": "Comoros", + "value": "KM" + }, + { + "label": "Congo - Brazzaville", + "value": "CG" + }, + { + "label": "Cook Islands", + "value": "CK" + }, + { + "label": "Costa Rica", + "value": "CR" + }, + { + "label": "C\u00f4te d\u2019Ivoire", + "value": "CI" + }, + { + "label": "Croatia", + "value": "HR" + }, + { + "label": "Cura\u00e7ao", + "value": "CW" + }, + { + "label": "Cyprus", + "value": "CY" + }, + { + "label": "Czech Republic", + "value": "CZ" + }, + { + "label": "Denmark", + "value": "DK" + }, + { + "label": "Djibouti", + "value": "DJ" + }, + { + "label": "Dominica", + "value": "DM" + }, + { + "label": "Dominican Republic", + "value": "DO" + }, + { + "label": "Timor-Leste", + "value": "TL" + }, + { + "label": "Ecuador", + "value": "EC" + }, + { + "label": "Egypt", + "value": "EG" + }, + { + "label": "El Salvador", + "value": "SV" + }, + { + "label": "Equatorial Guinea", + "value": "GQ" + }, + { + "label": "Estonia", + "value": "EE" + }, + { + "label": "Ethiopia", + "value": "ET" + }, + { + "label": "Falkland Islands", + "value": "FK" + }, + { + "label": "Faroe Islands", + "value": "FO" + }, + { + "label": "Fiji", + "value": "FJ" + }, + { + "label": "Finland", + "value": "FI" + }, + { + "label": "France", + "value": "FR" + }, + { + "label": "French Guiana", + "value": "GF" + }, + { + "label": "French Polynesia", + "value": "PF" + }, + { + "label": "French Southern Territories", + "value": "TF" + }, + { + "label": "Gabon", + "value": "GA" + }, + { + "label": "Gambia", + "value": "GM" + }, + { + "label": "Georgia", + "value": "GE" + }, + { + "label": "Germany", + "value": "DE" + }, + { + "label": "Ghana", + "value": "GH" + }, + { + "label": "Gibraltar", + "value": "GI" + }, + { + "label": "Greece", + "value": "GR" + }, + { + "label": "Greenland", + "value": "GL" + }, + { + "label": "Grenada", + "value": "GD" + }, + { + "label": "Guadeloupe", + "value": "GP" + }, + { + "label": "Guam", + "value": "GU" + }, + { + "label": "Guatemala", + "value": "GT" + }, + { + "label": "Guernsey", + "value": "GG" + }, + { + "label": "Guinea", + "value": "GN" + }, + { + "label": "Guyana", + "value": "GY" + }, + { + "label": "Haiti", + "value": "HT" + }, + { + "label": "Heard Island and McDonald Islands", + "value": "HM" + }, + { + "label": "Honduras", + "value": "HN" + }, + { + "label": "Hong Kong SAR China", + "value": "HK" + }, + { + "label": "Hungary", + "value": "HU" + }, + { + "label": "Iceland", + "value": "IS" + }, + { + "label": "India", + "value": "IN" + }, + { + "label": "Indonesia", + "value": "ID" + }, + { + "label": "Ireland", + "value": "IE" + }, + { + "label": "Isle of Man", + "value": "IM" + }, + { + "label": "Israel", + "value": "IL" + }, + { + "label": "Italy", + "value": "IT" + }, + { + "label": "Jamaica", + "value": "JM" + }, + { + "label": "Japan", + "value": "JP" + }, + { + "label": "Jersey", + "value": "JE" + }, + { + "label": "Jordan", + "value": "JO" + }, + { + "label": "Kazakhstan", + "value": "KZ" + }, + { + "label": "Kenya", + "value": "KE" + }, + { + "label": "Kiribati", + "value": "KI" + }, + { + "label": "South Korea", + "value": "KR" + }, + { + "label": "Kosovo", + "value": "XK" + }, + { + "label": "Kuwait", + "value": "KW" + }, + { + "label": "Kyrgyzstan", + "value": "KG" + }, + { + "label": "Laos", + "value": "LA" + }, + { + "label": "Latvia", + "value": "LV" + }, + { + "label": "Lesotho", + "value": "LS" + }, + { + "label": "Liechtenstein", + "value": "LI" + }, + { + "label": "Lithuania", + "value": "LT" + }, + { + "label": "Luxembourg", + "value": "LU" + }, + { + "label": "Macau SAR China", + "value": "MO" + }, + { + "label": "Macedonia", + "value": "MK" + }, + { + "label": "Madagascar", + "value": "MG" + }, + { + "label": "Malawi", + "value": "MW" + }, + { + "label": "Malaysia", + "value": "MY" + }, + { + "label": "Maldives", + "value": "MV" + }, + { + "label": "Mali", + "value": "ML" + }, + { + "label": "Malta", + "value": "MT" + }, + { + "label": "Marshall Islands", + "value": "MH" + }, + { + "label": "Martinique", + "value": "MQ" + }, + { + "label": "Mauritania", + "value": "MR" + }, + { + "label": "Mauritius", + "value": "MU" + }, + { + "label": "Mayotte", + "value": "YT" + }, + { + "label": "Mexico", + "value": "MX" + }, + { + "label": "Micronesia", + "value": "FM" + }, + { + "label": "Moldova", + "value": "MD" + }, + { + "label": "Monaco", + "value": "MC" + }, + { + "label": "Mongolia", + "value": "MN" + }, + { + "label": "Montenegro", + "value": "ME" + }, + { + "label": "Montserrat", + "value": "MS" + }, + { + "label": "Morocco", + "value": "MA" + }, + { + "label": "Mozambique", + "value": "MZ" + }, + { + "label": "Namibia", + "value": "NA" + }, + { + "label": "Nauru", + "value": "NR" + }, + { + "label": "Nepal", + "value": "NP" + }, + { + "label": "Netherlands", + "value": "NL" + }, + { + "label": "Netherlands Antilles", + "value": "AN" + }, + { + "label": "New Caledonia", + "value": "NC" + }, + { + "label": "New Zealand", + "value": "NZ" + }, + { + "label": "Nicaragua", + "value": "NI" + }, + { + "label": "Niger", + "value": "NE" + }, + { + "label": "Nigeria", + "value": "NG" + }, + { + "label": "Niue", + "value": "NU" + }, + { + "label": "Norfolk Island", + "value": "NF" + }, + { + "label": "Northern Mariana Islands", + "value": "MP" + }, + { + "label": "Norway", + "value": "NO" + }, + { + "label": "Oman", + "value": "OM" + }, + { + "label": "Pakistan", + "value": "PK" + }, + { + "label": "Palau", + "value": "PW" + }, + { + "label": "Palestinian Territories", + "value": "PS" + }, + { + "label": "Panama", + "value": "PA" + }, + { + "label": "Papua New Guinea", + "value": "PG" + }, + { + "label": "Paraguay", + "value": "PY" + }, + { + "label": "Peru", + "value": "PE" + }, + { + "label": "Philippines", + "value": "PH" + }, + { + "label": "Pitcairn Islands", + "value": "PN" + }, + { + "label": "Poland", + "value": "PL" + }, + { + "label": "Portugal", + "value": "PT" + }, + { + "label": "Puerto Rico", + "value": "PR" + }, + { + "label": "Qatar", + "value": "QA" + }, + { + "label": "R\u00e9union", + "value": "RE" + }, + { + "label": "Romania", + "value": "RO" + }, + { + "label": "Russia", + "value": "RU" + }, + { + "label": "Rwanda", + "value": "RW" + }, + { + "label": "Saint Kitts and Nevis", + "value": "KN" + }, + { + "label": "Saint Lucia", + "value": "LC" + }, + { + "label": "Saint Martin", + "value": "MF" + }, + { + "label": "Saint Vincent and the Grenadines", + "value": "VC" + }, + { + "label": "Samoa", + "value": "WS" + }, + { + "label": "San Marino", + "value": "SM" + }, + { + "label": "S\u00e3o Tom\u00e9 and Pr\u00edncipe", + "value": "ST" + }, + { + "label": "Saudi Arabia", + "value": "SA" + }, + { + "label": "Senegal", + "value": "SN" + }, + { + "label": "Serbia", + "value": "RS" + }, + { + "label": "Seychelles", + "value": "SC" + }, + { + "label": "Sierra Leone", + "value": "SL" + }, + { + "label": "Singapore", + "value": "SG" + }, + { + "label": "Sint Maarten", + "value": "SX" + }, + { + "label": "Slovakia", + "value": "SK" + }, + { + "label": "Slovenia", + "value": "SI" + }, + { + "label": "Solomon Islands", + "value": "SB" + }, + { + "label": "South Africa", + "value": "ZA" + }, + { + "label": "South Georgia and the South Sandwich Islands", + "value": "GS" + }, + { + "label": "South Sudan", + "value": "SS" + }, + { + "label": "Spain", + "value": "ES" + }, + { + "label": "Sri Lanka", + "value": "LK" + }, + { + "label": "Saint Barth\u00e9lemy", + "value": "BL" + }, + { + "label": "Saint Helena", + "value": "SH" + }, + { + "label": "Saint Pierre and Miquelon", + "value": "PM" + }, + { + "label": "Suriname", + "value": "SR" + }, + { + "label": "Svalbard and Jan Mayen", + "value": "SJ" + }, + { + "label": "Swaziland", + "value": "SZ" + }, + { + "label": "Sweden", + "value": "SE" + }, + { + "label": "Switzerland", + "value": "CH" + }, + { + "label": "Taiwan", + "value": "TW" + }, + { + "label": "Tajikistan", + "value": "TJ" + }, + { + "label": "Tanzania", + "value": "TZ" + }, + { + "label": "Thailand", + "value": "TH" + }, + { + "label": "Togo", + "value": "TG" + }, + { + "label": "Tokelau", + "value": "TK" + }, + { + "label": "Tonga", + "value": "TO" + }, + { + "label": "Trinidad and Tobago", + "value": "TT" + }, + { + "label": "Tunisia", + "value": "TN" + }, + { + "label": "Turkey", + "value": "TR" + }, + { + "label": "Turkmenistan", + "value": "TM" + }, + { + "label": "Turks and Caicos Islands", + "value": "TC" + }, + { + "label": "Tuvalu", + "value": "TV" + }, + { + "label": "Uganda", + "value": "UG" + }, + { + "label": "Ukraine", + "value": "UA" + }, + { + "label": "United Arab Emirates", + "value": "AE" + }, + { + "label": "United Kingdom", + "value": "GB" + }, + { + "label": "United States", + "value": "US" + }, + { + "label": "U.S. Outlying Islands", + "value": "UM" + }, + { + "label": "Uruguay", + "value": "UY" + }, + { + "label": "Uzbekistan", + "value": "UZ" + }, + { + "label": "Vanuatu", + "value": "VU" + }, + { + "label": "Vatican City", + "value": "VA" + }, + { + "label": "Venezuela", + "value": "VE" + }, + { + "label": "Vietnam", + "value": "VN" + }, + { + "label": "British Virgin Islands", + "value": "VG" + }, + { + "label": "U.S. Virgin Islands", + "value": "VI" + }, + { + "label": "Wallis and Futuna", + "value": "WF" + }, + { + "label": "Western Sahara", + "value": "EH" + }, + { + "label": "Zambia", + "value": "ZM" + } + ], + "label": "Country", + "name": "country", + "placeholder": "", + "isRequired": true, + "value": "CA", + "validationMessage": { + "length": "", + "pattern": "is invalid length or format.", + "empty": "You must provide a value for this field" + } + }, + { + "category": "ADDRESS", + "dataType": "TEXT", + "isEditable": true, + "label": "State\/Province", + "name": "stateProvince", + "placeholder": "", + "regularExpression": "^[\\sa-zA-Z0-9\\-().,'\\u00C0-\\u00FF\\u0100-\\u017F\\u0180-\\u024F]{2,50}$", + "isRequired": true, + "value": "BC", + "validationMessage": { + "length": "", + "pattern": "is invalid length or format.", + "empty": "You must provide a value for this field" + } + }, + { + "category": "ADDRESS", + "dataType": "TEXT", + "isEditable": true, + "label": "Street", + "name": "addressLine1", + "placeholder": "", + "regularExpression": "^[\\sa-zA-Z0-9\\\/\\-:().,#;'\u00b0&\\u00C0-\\u00FF\\u0100-\\u017F\\u0180-\\u024F]{2,100}$", + "isRequired": true, + "value": "950 Granville Street", + "validationMessage": { + "length": "", + "pattern": "is invalid length or format.", + "empty": "You must provide a value for this field" + } + }, + { + "category": "ADDRESS", + "dataType": "TEXT", + "isEditable": true, + "label": "City", + "name": "city", + "placeholder": "", + "regularExpression": "^[\\sa-zA-Z0-9\\-().,'\\u00C0-\\u00FF\\u0100-\\u017F\\u0180-\\u024F]{2,50}$", + "isRequired": true, + "value": "Vancouver", + "validationMessage": { + "length": "", + "pattern": "is invalid length or format.", + "empty": "You must provide a value for this field" + } + }, + { + "category": "ADDRESS", + "dataType": "TEXT", + "isEditable": true, + "label": "Zip\/Postal Code", + "name": "postalCode", + "placeholder": "", + "regularExpression": "^(?![\\-]+$)[\\sa-zA-Z0-9\\-]{2,16}$", + "isRequired": true, + "value": "V6Z1L2", + "validationMessage": { + "length": "", + "pattern": "is invalid length or format.", + "empty": "You must provide a value for this field" + } + } + ] + } + ] + } + } + ] + }, + "fees": { + "nodes": [ + { + "country": "US", + "currency": "USD", + "transferMethodType": "BANK_ACCOUNT", + "value": "2.00", + "feeRateType": "FLAT" + } + ] + }, + "processingTimes": { + "nodes": [ + { + "country": "US", + "currency": "USD", + "transferMethodType": "BANK_ACCOUNT", + "value": "1-2 Business days" + } + ] + } + } +} \ No newline at end of file diff --git a/transfermethodrepository/src/test/resources/successful_tmc_keys_response.json b/transfermethodrepository/src/test/resources/successful_tmc_keys_response.json new file mode 100644 index 000000000..64d4c6d00 --- /dev/null +++ b/transfermethodrepository/src/test/resources/successful_tmc_keys_response.json @@ -0,0 +1,412 @@ +{ + "data": { + "countries": { + "nodes": [ + { + "code": "CA", + "name": "Canada", + "currencies": { + "nodes": [ + { + "code": "CAD", + "name": "Canadian Dollar", + "transferMethodTypes": { + "nodes": [ + { + "code": "BANK_ACCOUNT", + "name": "Bank Account", + "fees": { + "nodes": [ + { + "country": "CA", + "currency": "CAD", + "transferMethodType": "BANK_ACCOUNT", + "value": "2.20", + "feeRateType": "FLAT" + } + ] + }, + "processingTimes": { + "nodes": [ + { + "value": "1-2 Business days", + "country": "CA", + "currency": "CAD", + "transferMethodType": "BANK_ACCOUNT" + } + ] + } + }, + { + "code": "PAYPAL_ACCOUNT", + "name": "PayPal Account", + "fees": { + "nodes": [ + { + "country": "CA", + "currency": "CAD", + "transferMethodType": "PAYPAL_ACCOUNT", + "value": "0.25", + "feeRateType": "FLAT" + } + ] + }, + "processingTimes": { + "nodes": [ + { + "value": "IMMEDIATE", + "country": "CA", + "currency": "CAD", + "transferMethodType": "PAYPAL_ACCOUNT" + } + ] + } + } + ] + } + }, + { + "code": "USD", + "name": "United States Dollar", + "transferMethodTypes": { + "nodes": [ + { + "code": "BANK_ACCOUNT", + "name": "Bank Account", + "fees": { + "nodes": [ + { + "country": "CA", + "currency": "USD", + "transferMethodType": "BANK_ACCOUNT", + "value": "2.00", + "feeRateType": "FLAT" + } + ] + }, + "processingTimes": { + "nodes": [ + { + "value": "1-2 Business days", + "country": "CA", + "currency": "USD", + "transferMethodType": "BANK_ACCOUNT" + } + ] + } + } + ] + } + } + ] + } + }, + { + "code": "HR", + "name": "Croatia", + "currencies": { + "nodes": [ + { + "code": "EUR", + "name": "Euro", + "transferMethodTypes": { + "nodes": [ + { + "code": "BANK_ACCOUNT", + "name": "Bank Account", + "fees": { + "nodes": [ + { + "country": "HR", + "currency": "EUR", + "transferMethodType": "BANK_ACCOUNT", + "value": "1.50", + "feeRateType": "FLAT" + } + ] + }, + "processingTimes": { + "nodes": [ + { + "value": "2-3 Business days", + "country": "HR", + "currency": "EUR", + "transferMethodType": "BANK_ACCOUNT" + } + ] + } + } + ] + } + }, + { + "code": "HRK", + "name": "Croatian Kuna", + "transferMethodTypes": { + "nodes": [ + { + "code": "BANK_ACCOUNT", + "name": "Bank Account", + "fees": { + "nodes": [ + { + "country": "HR", + "currency": "HRK", + "transferMethodType": "BANK_ACCOUNT", + "value": "1.50", + "feeRateType": "FLAT" + } + ] + }, + "processingTimes": { + "nodes": [ + { + "value": "1-2 Business days", + "country": "HR", + "currency": "HRK", + "transferMethodType": "BANK_ACCOUNT" + } + ] + } + } + ] + } + } + ] + } + }, + { + "code": "MX", + "name": "Mexico", + "currencies": { + "nodes": [ + { + "code": "MXN", + "name": "Mexican Peso", + "transferMethodTypes": { + "nodes": [ + { + "code": "BANK_ACCOUNT", + "name": "Bank Account", + "fees": { + "nodes": [ + { + "country": "MX", + "currency": "MXN", + "transferMethodType": "BANK_ACCOUNT", + "value": "26.15", + "feeRateType": "FLAT" + } + ] + }, + "processingTimes": { + "nodes": [ + { + "value": "1-2 Business days", + "country": "MX", + "currency": "MXN", + "transferMethodType": "BANK_ACCOUNT" + } + ] + } + } + ] + } + } + ] + } + }, + { + "code": "GB", + "name": "United Kingdom", + "currencies": { + "nodes": [ + { + "code": "EUR", + "name": "Euro", + "transferMethodTypes": { + "nodes": [ + { + "code": "BANK_ACCOUNT", + "name": "Bank Account", + "fees": { + "nodes": [ + { + "country": "GB", + "currency": "EUR", + "transferMethodType": "BANK_ACCOUNT", + "value": "1.50", + "feeRateType": "FLAT" + } + ] + }, + "processingTimes": { + "nodes": [ + { + "value": "2-4 Business days", + "country": "GB", + "currency": "EUR", + "transferMethodType": "BANK_ACCOUNT" + } + ] + } + } + ] + } + }, + { + "code": "GBP", + "name": "British Pound", + "transferMethodTypes": { + "nodes": [ + { + "code": "BANK_ACCOUNT", + "name": "Bank Account", + "fees": { + "nodes": [ + { + "country": "GB", + "currency": "GBP", + "transferMethodType": "BANK_ACCOUNT", + "value": "1.20", + "feeRateType": "FLAT" + } + ] + }, + "processingTimes": { + "nodes": [ + { + "value": "1-2 Business days", + "country": "GB", + "currency": "GBP", + "transferMethodType": "BANK_ACCOUNT" + } + ] + } + } + ] + } + } + ] + } + }, + { + "code": "US", + "name": "United States", + "currencies": { + "nodes": [ + { + "code": "USD", + "name": "United States Dollar", + "transferMethodTypes": { + "nodes": [ + { + "code": "BANK_ACCOUNT", + "name": "Bank Account", + "fees": { + "nodes": [ + { + "country": "US", + "currency": "USD", + "transferMethodType": "BANK_ACCOUNT", + "value": "2.00", + "feeRateType": "FLAT" + } + ] + }, + "processingTimes": { + "nodes": [ + { + "value": "1-2 Business days", + "country": "US", + "currency": "USD", + "transferMethodType": "BANK_ACCOUNT" + } + ] + } + }, + { + "code": "BANK_CARD", + "name": "Debit Card", + "fees": { + "nodes": [ + { + "country": "US", + "currency": "USD", + "transferMethodType": "BANK_CARD", + "value": "1.75", + "feeRateType": "FLAT" + } + ] + }, + "processingTimes": { + "nodes": [ + { + "value": "IMMEDIATE", + "country": "US", + "currency": "USD", + "transferMethodType": "BANK_CARD" + } + ] + } + }, + { + "code": "WIRE_ACCOUNT", + "name": "Wire Transfer", + "fees": { + "nodes": [ + { + "country": "US", + "currency": "USD", + "transferMethodType": "WIRE_ACCOUNT", + "value": "20.00", + "feeRateType": "FLAT" + } + ] + }, + "processingTimes": { + "nodes": [ + { + "value": "1-3 Business days", + "country": "US", + "currency": "USD", + "transferMethodType": "WIRE_ACCOUNT" + } + ] + } + }, + { + "code": "PAYPAL_ACCOUNT", + "name": "PayPal Account", + "fees": { + "nodes": [ + { + "country": "US", + "currency": "USD", + "transferMethodType": "PAYPAL_ACCOUNT", + "value": "0.25", + "feeRateType": "FLAT" + } + ] + }, + "processingTimes": { + "nodes": [ + { + "value": "IMMEDIATE", + "country": "US", + "currency": "USD", + "transferMethodType": "PAYPAL_ACCOUNT" + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } +} \ No newline at end of file diff --git a/ui/build.gradle b/ui/build.gradle index 16c16fe83..99aa02b2b 100644 --- a/ui/build.gradle +++ b/ui/build.gradle @@ -11,6 +11,7 @@ dependencies { api project(":common") api project(":receipt") api project(":userrepository") + api project(":transfermethodrepository") androidTestImplementation "androidx.test:rules:$testRulesVersion" androidTestImplementation "androidx.test.espresso:espresso-contrib:$espressoVersion" diff --git a/ui/src/main/java/com/hyperwallet/android/ui/repository/RepositoryFactory.java b/ui/src/main/java/com/hyperwallet/android/ui/repository/RepositoryFactory.java index 7095b6110..a8f35dafa 100644 --- a/ui/src/main/java/com/hyperwallet/android/ui/repository/RepositoryFactory.java +++ b/ui/src/main/java/com/hyperwallet/android/ui/repository/RepositoryFactory.java @@ -27,6 +27,11 @@ package com.hyperwallet.android.ui.repository; +import com.hyperwallet.android.ui.transfermethod.repository.TransferMethodConfigurationRepository; +import com.hyperwallet.android.ui.transfermethod.repository.TransferMethodConfigurationRepositoryImpl; +import com.hyperwallet.android.ui.transfermethod.repository.TransferMethodRepository; +import com.hyperwallet.android.ui.transfermethod.repository.TransferMethodRepositoryImpl; + @Deprecated public class RepositoryFactory { private static RepositoryFactory sInstance; 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 447624e31..a18ee00e6 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 @@ -58,6 +58,7 @@ import com.hyperwallet.android.ui.HyperwalletLocalBroadcast; import com.hyperwallet.android.ui.R; import com.hyperwallet.android.ui.repository.RepositoryFactory; +import com.hyperwallet.android.ui.transfermethod.repository.TransferMethodRepositoryFactory; import com.hyperwallet.android.ui.view.WidgetDateDialogFragment; import com.hyperwallet.android.ui.view.WidgetSelectionDialogFragment; import com.hyperwallet.android.ui.view.widget.AbstractWidget; @@ -202,7 +203,7 @@ public void onClick(View v) { public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); - RepositoryFactory factory = RepositoryFactory.getInstance(); + TransferMethodRepositoryFactory factory = TransferMethodRepositoryFactory.getInstance(); mPresenter = new AddTransferMethodPresenter(this, factory.getTransferMethodConfigurationRepository(), factory.getTransferMethodRepository()); diff --git a/ui/src/main/java/com/hyperwallet/android/ui/transfermethod/AddTransferMethodPresenter.java b/ui/src/main/java/com/hyperwallet/android/ui/transfermethod/AddTransferMethodPresenter.java index d0fd40750..bcccca6e2 100644 --- a/ui/src/main/java/com/hyperwallet/android/ui/transfermethod/AddTransferMethodPresenter.java +++ b/ui/src/main/java/com/hyperwallet/android/ui/transfermethod/AddTransferMethodPresenter.java @@ -21,8 +21,8 @@ import com.hyperwallet.android.model.HyperwalletErrors; import com.hyperwallet.android.model.graphql.HyperwalletTransferMethodConfigurationField; import com.hyperwallet.android.model.transfermethod.HyperwalletTransferMethod; -import com.hyperwallet.android.ui.repository.TransferMethodConfigurationRepository; -import com.hyperwallet.android.ui.repository.TransferMethodRepository; +import com.hyperwallet.android.ui.transfermethod.repository.TransferMethodConfigurationRepository; +import com.hyperwallet.android.ui.transfermethod.repository.TransferMethodRepository; public class AddTransferMethodPresenter implements AddTransferMethodContract.Presenter { diff --git a/ui/src/main/java/com/hyperwallet/android/ui/transfermethod/ListTransferMethodFragment.java b/ui/src/main/java/com/hyperwallet/android/ui/transfermethod/ListTransferMethodFragment.java index e38385540..306776f4d 100644 --- a/ui/src/main/java/com/hyperwallet/android/ui/transfermethod/ListTransferMethodFragment.java +++ b/ui/src/main/java/com/hyperwallet/android/ui/transfermethod/ListTransferMethodFragment.java @@ -50,7 +50,7 @@ import com.hyperwallet.android.ui.R; import com.hyperwallet.android.ui.common.view.HorizontalDividerItemDecorator; import com.hyperwallet.android.ui.common.view.OneClickListener; -import com.hyperwallet.android.ui.repository.RepositoryFactory; +import com.hyperwallet.android.ui.transfermethod.repository.TransferMethodRepositoryFactory; import java.util.ArrayList; import java.util.List; @@ -179,7 +179,7 @@ public void onOneClick(View v) { @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); - RepositoryFactory factory = RepositoryFactory.getInstance(); + TransferMethodRepositoryFactory factory = TransferMethodRepositoryFactory.getInstance(); mPresenter = new ListTransferMethodPresenter(factory.getTransferMethodRepository(), this); } diff --git a/ui/src/main/java/com/hyperwallet/android/ui/transfermethod/ListTransferMethodPresenter.java b/ui/src/main/java/com/hyperwallet/android/ui/transfermethod/ListTransferMethodPresenter.java index 4ad64b5d1..1a84893b3 100644 --- a/ui/src/main/java/com/hyperwallet/android/ui/transfermethod/ListTransferMethodPresenter.java +++ b/ui/src/main/java/com/hyperwallet/android/ui/transfermethod/ListTransferMethodPresenter.java @@ -21,7 +21,7 @@ import com.hyperwallet.android.model.HyperwalletErrors; import com.hyperwallet.android.model.HyperwalletStatusTransition; import com.hyperwallet.android.model.transfermethod.HyperwalletTransferMethod; -import com.hyperwallet.android.ui.repository.TransferMethodRepository; +import com.hyperwallet.android.ui.transfermethod.repository.TransferMethodRepository; import java.util.List; diff --git a/ui/src/main/java/com/hyperwallet/android/ui/transfermethod/SelectTransferMethodPresenter.java b/ui/src/main/java/com/hyperwallet/android/ui/transfermethod/SelectTransferMethodPresenter.java index bc6305bb3..61f13fff5 100644 --- a/ui/src/main/java/com/hyperwallet/android/ui/transfermethod/SelectTransferMethodPresenter.java +++ b/ui/src/main/java/com/hyperwallet/android/ui/transfermethod/SelectTransferMethodPresenter.java @@ -31,7 +31,7 @@ import com.hyperwallet.android.model.graphql.keyed.Currency; import com.hyperwallet.android.model.graphql.keyed.HyperwalletTransferMethodType; import com.hyperwallet.android.model.user.HyperwalletUser; -import com.hyperwallet.android.ui.repository.TransferMethodConfigurationRepository; +import com.hyperwallet.android.ui.transfermethod.repository.TransferMethodConfigurationRepository; import com.hyperwallet.android.ui.user.repository.UserRepository; import java.util.ArrayList; diff --git a/ui/src/test/java/com/hyperwallet/android/ui/repository/RepositoryFactoryTest.java b/ui/src/test/java/com/hyperwallet/android/ui/repository/RepositoryFactoryTest.java index 050534fc8..65fa4d4fa 100644 --- a/ui/src/test/java/com/hyperwallet/android/ui/repository/RepositoryFactoryTest.java +++ b/ui/src/test/java/com/hyperwallet/android/ui/repository/RepositoryFactoryTest.java @@ -5,6 +5,9 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.notNullValue; +import com.hyperwallet.android.ui.transfermethod.repository.TransferMethodConfigurationRepository; +import com.hyperwallet.android.ui.transfermethod.repository.TransferMethodRepository; + import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; diff --git a/ui/src/test/java/com/hyperwallet/android/ui/transfermethod/AddTransferMethodPresenterTest.java b/ui/src/test/java/com/hyperwallet/android/ui/transfermethod/AddTransferMethodPresenterTest.java index 399c188bb..ba80af20c 100644 --- a/ui/src/test/java/com/hyperwallet/android/ui/transfermethod/AddTransferMethodPresenterTest.java +++ b/ui/src/test/java/com/hyperwallet/android/ui/transfermethod/AddTransferMethodPresenterTest.java @@ -24,9 +24,9 @@ import com.hyperwallet.android.model.graphql.field.HyperwalletTransferMethodConfiguration; import com.hyperwallet.android.model.transfermethod.HyperwalletBankAccount; import com.hyperwallet.android.model.transfermethod.HyperwalletTransferMethod; -import com.hyperwallet.android.ui.repository.TransferMethodConfigurationRepository; -import com.hyperwallet.android.ui.repository.TransferMethodRepository; +import com.hyperwallet.android.ui.transfermethod.repository.TransferMethodConfigurationRepository; import com.hyperwallet.android.ui.rule.HyperwalletExternalResourceManager; +import com.hyperwallet.android.ui.transfermethod.repository.TransferMethodRepository; import org.json.JSONObject; import org.junit.Before; diff --git a/ui/src/test/java/com/hyperwallet/android/ui/transfermethod/ListTransferMethodPresenterTest.java b/ui/src/test/java/com/hyperwallet/android/ui/transfermethod/ListTransferMethodPresenterTest.java index b1d95f838..7db248566 100644 --- a/ui/src/test/java/com/hyperwallet/android/ui/transfermethod/ListTransferMethodPresenterTest.java +++ b/ui/src/test/java/com/hyperwallet/android/ui/transfermethod/ListTransferMethodPresenterTest.java @@ -38,7 +38,7 @@ import com.hyperwallet.android.model.HyperwalletStatusTransition; import com.hyperwallet.android.model.transfermethod.HyperwalletBankAccount; import com.hyperwallet.android.model.transfermethod.HyperwalletTransferMethod; -import com.hyperwallet.android.ui.repository.TransferMethodRepository; +import com.hyperwallet.android.ui.transfermethod.repository.TransferMethodRepository; import org.junit.Before; import org.junit.Rule; diff --git a/ui/src/test/java/com/hyperwallet/android/ui/transfermethod/SelectTransferMethodPresenterTest.java b/ui/src/test/java/com/hyperwallet/android/ui/transfermethod/SelectTransferMethodPresenterTest.java index ba504577f..479d02882 100644 --- a/ui/src/test/java/com/hyperwallet/android/ui/transfermethod/SelectTransferMethodPresenterTest.java +++ b/ui/src/test/java/com/hyperwallet/android/ui/transfermethod/SelectTransferMethodPresenterTest.java @@ -21,11 +21,11 @@ import com.hyperwallet.android.model.graphql.keyed.HyperwalletTransferMethodConfigurationKeyResult; import com.hyperwallet.android.model.transfermethod.HyperwalletTransferMethod; import com.hyperwallet.android.model.user.HyperwalletUser; -import com.hyperwallet.android.ui.repository.TransferMethodConfigurationRepository; -import com.hyperwallet.android.ui.repository.TransferMethodConfigurationRepositoryImpl; -import com.hyperwallet.android.ui.rule.HyperwalletExternalResourceManager; +import com.hyperwallet.android.ui.transfermethod.repository.TransferMethodConfigurationRepository; +import com.hyperwallet.android.ui.transfermethod.repository.TransferMethodConfigurationRepositoryImpl; import com.hyperwallet.android.ui.user.repository.UserRepository; import com.hyperwallet.android.ui.user.repository.UserRepositoryImpl; +import com.hyperwallet.android.ui.rule.HyperwalletExternalResourceManager; import org.hamcrest.Matchers; import org.json.JSONObject;