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;