This is an automated email from the ASF dual-hosted git repository.

adamsaghy pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract.git


The following commit(s) were added to refs/heads/develop by this push:
     new 28e9a6213 FINERACT-1911: Assign Data Table to Transaction - validation
28e9a6213 is described below

commit 28e9a62137c98dbb15b5247b025c7b36c4b12f7b
Author: jmarta <marta.jankov...@dpc.hu>
AuthorDate: Tue Aug 29 12:34:06 2023 +0200

    FINERACT-1911: Assign Data Table to Transaction - validation
---
 .../DatatableCommandFromApiJsonDeserializer.java   | 65 +++++++++-----
 .../fineract/integrationtests/BatchApiTest.java    | 16 ++--
 .../EntityDatatableChecksIntegrationTest.java      |  2 +-
 .../common/system/DatatableHelper.java             | 30 +++----
 .../datatable/DatatableAdvancedQueryTest.java      | 12 +--
 .../datatable/DatatableIntegrationTest.java        | 99 ++++++++++++++--------
 6 files changed, 136 insertions(+), 88 deletions(-)

diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/serialization/DatatableCommandFromApiJsonDeserializer.java
 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/serialization/DatatableCommandFromApiJsonDeserializer.java
index 0a8f20068..0d2d96da5 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/serialization/DatatableCommandFromApiJsonDeserializer.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/serialization/DatatableCommandFromApiJsonDeserializer.java
@@ -132,7 +132,7 @@ public class DatatableCommandFromApiJsonDeserializer {
         EntityTables entityTable = EntityTables.fromEntityName(apptableName);
         validateEntitySubType(baseDataValidator, element, entityTable);
 
-        final String fkColumnName = 
entityTable.getForeignKeyColumnNameOnDatatable();
+        final String fkColumnName = entityTable == null ? null : 
entityTable.getForeignKeyColumnNameOnDatatable();
 
         final Boolean multiRow = 
this.fromApiJsonHelper.extractBooleanNamed(API_PARAM_MULTIROW, element);
         
baseDataValidator.reset().parameter(API_PARAM_MULTIROW).value(multiRow).ignoreIfNull().notBlank().isOneOfTheseValues(true,
 false);
@@ -303,16 +303,17 @@ public class DatatableCommandFromApiJsonDeserializer {
         if (type == null) {
             return;
         }
-        final Integer length = 
this.fromApiJsonHelper.extractIntegerSansLocaleNamed(API_FIELD_LENGTH, column);
-        JdbcJavaType jdbcType = mapApiTypeToJdbcType(type);
-        validator = 
validator.reset().parameter(API_FIELD_LENGTH).value(length);
-        if (jdbcType.hasPrecision(databaseTypeResolver.databaseType())) {
-            if (jdbcType.isStringType() && length == null) {
-                validator.failWithCode("must.be.provided.when.type.is.String");
-            }
-            validator.ignoreIfNull().positiveAmount();
-        } // else, the precision is ignored
-
+        JdbcJavaType jdbcType = mapApiTypeToJdbcType(type, false);
+        if (jdbcType != null) {
+            final Integer length = 
this.fromApiJsonHelper.extractIntegerSansLocaleNamed(API_FIELD_LENGTH, column);
+            validator = 
validator.reset().parameter(API_FIELD_LENGTH).value(length);
+            if (jdbcType.hasPrecision(databaseTypeResolver.databaseType())) {
+                if (jdbcType.isStringType() && length == null) {
+                    
validator.failWithCode("must.be.provided.when.type.is.String");
+                }
+                validator.ignoreIfNull().positiveAmount();
+            } // else, the precision is ignored
+        }
         final String code = 
this.fromApiJsonHelper.extractStringNamed(API_FIELD_CODE, column);
         if (type.equalsIgnoreCase(API_FIELD_TYPE_DROPDOWN)) {
             if (code != null) {
@@ -325,20 +326,38 @@ public class DatatableCommandFromApiJsonDeserializer {
         }
     }
 
+    private static JdbcJavaType mapApiTypeToJdbcType(@NotNull String apiType, 
boolean fail) {
+        switch (apiType.toLowerCase()) {
+            case API_FIELD_TYPE_STRING:
+                return VARCHAR;
+            case API_FIELD_TYPE_NUMBER, API_FIELD_TYPE_DROPDOWN:
+                return INTEGER;
+            case API_FIELD_TYPE_BOOLEAN:
+                return BOOLEAN;
+            case API_FIELD_TYPE_DECIMAL:
+                return DECIMAL;
+            case API_FIELD_TYPE_DATE:
+                return DATE;
+            case API_FIELD_TYPE_DATETIME:
+                return DATETIME;
+            case API_FIELD_TYPE_TIMESTAMP:
+                return TIMESTAMP;
+            case API_FIELD_TYPE_TEXT:
+                return TEXT;
+            default: {
+                if (fail) {
+                    throw new 
PlatformDataIntegrityException("error.msg.datatable.column.type.invalid",
+                            "Column type " + apiType + " is not supported.");
+                } else {
+                    return null;
+                }
+            }
+        }
+    }
+
     @NotNull
     public static JdbcJavaType mapApiTypeToJdbcType(@NotNull String apiType) {
-        return switch (apiType.toLowerCase()) {
-            case API_FIELD_TYPE_STRING -> VARCHAR;
-            case API_FIELD_TYPE_NUMBER, API_FIELD_TYPE_DROPDOWN -> INTEGER;
-            case API_FIELD_TYPE_BOOLEAN -> BOOLEAN;
-            case API_FIELD_TYPE_DECIMAL -> DECIMAL;
-            case API_FIELD_TYPE_DATE -> DATE;
-            case API_FIELD_TYPE_DATETIME -> DATETIME;
-            case API_FIELD_TYPE_TIMESTAMP -> TIMESTAMP;
-            case API_FIELD_TYPE_TEXT -> TEXT;
-            default -> throw new 
PlatformDataIntegrityException("error.msg.datatable.column.type.invalid",
-                    "Column type " + apiType + " is not supported.");
-        };
+        return mapApiTypeToJdbcType(apiType, true);
     }
 
     private void validateEntitySubType(final DataValidatorBuilder 
baseDataValidator, final JsonElement element,
diff --git 
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/BatchApiTest.java
 
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/BatchApiTest.java
index 0c6dd7df7..bd2e5d2d4 100644
--- 
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/BatchApiTest.java
+++ 
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/BatchApiTest.java
@@ -1405,8 +1405,8 @@ public class BatchApiTest {
         columnMap.put("apptableName", LOAN_APP_TABLE_NAME);
         columnMap.put("entitySubType", "PERSON");
         columnMap.put("multiRow", true);
-        DatatableHelper.addDatatableColumns(datatableColumnsList, columnName1, 
"String", true, 10, null);
-        DatatableHelper.addDatatableColumns(datatableColumnsList, columnName2, 
"String", false, 10, null);
+        DatatableHelper.addDatatableColumn(datatableColumnsList, columnName1, 
"String", true, 10, null);
+        DatatableHelper.addDatatableColumn(datatableColumnsList, columnName2, 
"String", false, 10, null);
         columnMap.put("columns", datatableColumnsList);
         final String datatableRequestJsonString = new Gson().toJson(columnMap);
         LOG.info("CreateDataTable map : {}", datatableRequestJsonString);
@@ -2063,8 +2063,8 @@ public class BatchApiTest {
         columnMap.put("apptableName", LOAN_APP_TABLE_NAME);
         columnMap.put("entitySubType", "PERSON");
         columnMap.put("multiRow", false);
-        DatatableHelper.addDatatableColumns(datatableColumnsList, columnName1, 
"String", true, 10, null);
-        DatatableHelper.addDatatableColumns(datatableColumnsList, columnName2, 
"String", false, 10, null);
+        DatatableHelper.addDatatableColumn(datatableColumnsList, columnName1, 
"String", true, 10, null);
+        DatatableHelper.addDatatableColumn(datatableColumnsList, columnName2, 
"String", false, 10, null);
         columnMap.put("columns", datatableColumnsList);
         final String datatableRequestJsonString = new Gson().toJson(columnMap);
         LOG.info("CreateDataTable map : {}", datatableRequestJsonString);
@@ -2128,8 +2128,8 @@ public class BatchApiTest {
         columnMap.put("apptableName", LOAN_APP_TABLE_NAME);
         columnMap.put("entitySubType", "PERSON");
         columnMap.put("multiRow", false);
-        DatatableHelper.addDatatableColumns(datatableColumnsList, columnName1, 
"String", true, 15, null);
-        DatatableHelper.addDatatableColumns(datatableColumnsList, columnName2, 
"String", false, 15, null);
+        DatatableHelper.addDatatableColumn(datatableColumnsList, columnName1, 
"String", true, 15, null);
+        DatatableHelper.addDatatableColumn(datatableColumnsList, columnName2, 
"String", false, 15, null);
         columnMap.put("columns", datatableColumnsList);
         final String datatableRequestJsonString = new Gson().toJson(columnMap);
         LOG.info("CreateDataTable map : {}", datatableRequestJsonString);
@@ -2182,8 +2182,8 @@ public class BatchApiTest {
         columnMap.put("apptableName", LOAN_APP_TABLE_NAME);
         columnMap.put("entitySubType", "PERSON");
         columnMap.put("multiRow", true);
-        DatatableHelper.addDatatableColumns(datatableColumnsList, columnName1, 
"String", true, 10, null);
-        DatatableHelper.addDatatableColumns(datatableColumnsList, columnName2, 
"String", false, 10, null);
+        DatatableHelper.addDatatableColumn(datatableColumnsList, columnName1, 
"String", true, 10, null);
+        DatatableHelper.addDatatableColumn(datatableColumnsList, columnName2, 
"String", false, 10, null);
         columnMap.put("columns", datatableColumnsList);
         final String datatableRequestJsonString = new Gson().toJson(columnMap);
         LOG.info("CreateDataTable map : {}", datatableRequestJsonString);
diff --git 
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/organisation/EntityDatatableChecksIntegrationTest.java
 
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/organisation/EntityDatatableChecksIntegrationTest.java
index 17c458691..03c7661ed 100644
--- 
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/organisation/EntityDatatableChecksIntegrationTest.java
+++ 
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/organisation/EntityDatatableChecksIntegrationTest.java
@@ -567,7 +567,7 @@ public class EntityDatatableChecksIntegrationTest {
                 .toLowerCase();
 
         String itsAString = "itsastring";
-        DatatableHelper.addDatatableColumns(datatableColumnsList, itsAString, 
"String", true, 10, null);
+        DatatableHelper.addDatatableColumn(datatableColumnsList, itsAString, 
"String", true, 10, null);
 
         // Person Subtype
         columnMap.put("datatableName", datatableNamePerson);
diff --git 
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/system/DatatableHelper.java
 
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/system/DatatableHelper.java
index 5bdd75972..f40e11a96 100644
--- 
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/system/DatatableHelper.java
+++ 
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/system/DatatableHelper.java
@@ -188,14 +188,14 @@ public class DatatableHelper extends IntegrationTest {
             map.put("entitySubType", "");
         }
         map.put("multiRow", multiRow);
-        addDatatableColumns(datatableColumnsList, "itsABoolean", "Boolean", 
false, null, null);
-        addDatatableColumns(datatableColumnsList, "itsADate", "Date", true, 
null, null);
-        addDatatableColumns(datatableColumnsList, "itsADatetime", "Datetime", 
true, null, null);
-        addDatatableColumns(datatableColumnsList, "itsADecimal", "Decimal", 
true, null, null);
-        addDatatableColumns(datatableColumnsList, "itsADropdown", "Dropdown", 
false, null, codeName);
-        addDatatableColumns(datatableColumnsList, "itsANumber", "Number", 
true, null, null);
-        addDatatableColumns(datatableColumnsList, "itsAString", "String", 
true, 10, null);
-        addDatatableColumns(datatableColumnsList, "itsAText", "Text", true, 
null, null);
+        addDatatableColumn(datatableColumnsList, "itsABoolean", "Boolean", 
false, null, null);
+        addDatatableColumn(datatableColumnsList, "itsADate", "Date", true, 
null, null);
+        addDatatableColumn(datatableColumnsList, "itsADatetime", "Datetime", 
true, null, null);
+        addDatatableColumn(datatableColumnsList, "itsADecimal", "Decimal", 
true, null, null);
+        addDatatableColumn(datatableColumnsList, "itsADropdown", "Dropdown", 
false, null, codeName);
+        addDatatableColumn(datatableColumnsList, "itsANumber", "Number", true, 
null, null);
+        addDatatableColumn(datatableColumnsList, "itsAString", "String", true, 
10, null);
+        addDatatableColumn(datatableColumnsList, "itsAText", "Text", true, 
null, null);
         map.put("columns", datatableColumnsList);
         String requestJsonString = new Gson().toJson(map);
         LOG.info("map : {}", requestJsonString);
@@ -209,10 +209,10 @@ public class DatatableHelper extends IntegrationTest {
         map.put("apptableName", apptableName);
         map.put("entitySubType", "PERSON");
         map.put("multiRow", multiRow);
-        addDatatableColumns(datatableColumnsList, "Spouse Name", "String", 
true, 25, null);
-        addDatatableColumns(datatableColumnsList, "Number of Dependents", 
"Number", true, null, null);
-        addDatatableColumns(datatableColumnsList, "Time of Visit", "DateTime", 
false, null, null);
-        addDatatableColumns(datatableColumnsList, "Date of Approval", "Date", 
false, null, null);
+        addDatatableColumn(datatableColumnsList, "Spouse Name", "String", 
true, 25, null);
+        addDatatableColumn(datatableColumnsList, "Number of Dependents", 
"Number", true, null, null);
+        addDatatableColumn(datatableColumnsList, "Time of Visit", "DateTime", 
false, null, null);
+        addDatatableColumn(datatableColumnsList, "Date of Approval", "Date", 
false, null, null);
         map.put("columns", datatableColumnsList);
         String requestJsonString = new Gson().toJson(map);
         LOG.info("map : {}", requestJsonString);
@@ -232,7 +232,7 @@ public class DatatableHelper extends IntegrationTest {
         return requestJsonString;
     }
 
-    public static List<HashMap<String, Object>> 
addDatatableColumns(List<HashMap<String, Object>> datatableColumnsList, String 
columnName,
+    public static HashMap<String, Object> 
addDatatableColumn(List<HashMap<String, Object>> datatableColumnsList, String 
columnName,
             String columnType, boolean isMandatory, Integer length, String 
codeName) {
         final HashMap<String, Object> datatableColumnMap = new HashMap<>();
 
@@ -249,10 +249,10 @@ public class DatatableHelper extends IntegrationTest {
         }
 
         datatableColumnsList.add(datatableColumnMap);
-        return datatableColumnsList;
+        return datatableColumnMap;
     }
 
-    public static List<HashMap<String, Object>> 
addDatatableColumnsWithUniqueAndIndex(List<HashMap<String, Object>> 
datatableColumnsList,
+    public static List<HashMap<String, Object>> 
addDatatableColumnWithUniqueAndIndex(List<HashMap<String, Object>> 
datatableColumnsList,
             String columnName, String columnType, boolean isMandatory, Integer 
length, String codeName, boolean isUnique,
             boolean isIndexed) {
 
diff --git 
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/datatable/DatatableAdvancedQueryTest.java
 
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/datatable/DatatableAdvancedQueryTest.java
index 5df73fb1d..e47b1de62 100644
--- 
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/datatable/DatatableAdvancedQueryTest.java
+++ 
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/datatable/DatatableAdvancedQueryTest.java
@@ -315,13 +315,13 @@ public class DatatableAdvancedQueryTest {
         request.put(API_PARAM_MULTIROW, multiRow);
 
         final List<HashMap<String, Object>> datatableColumns = new 
ArrayList<>();
-        
DatatableHelper.addDatatableColumnsWithUniqueAndIndex(datatableColumns, 
COLUMN_STRING, API_FIELD_TYPE_STRING, true, 50, null,
+        DatatableHelper.addDatatableColumnWithUniqueAndIndex(datatableColumns, 
COLUMN_STRING, API_FIELD_TYPE_STRING, true, 50, null,
                 !multiRow, true);
-        DatatableHelper.addDatatableColumns(datatableColumns, COLUMN_TEXT, 
API_FIELD_TYPE_TEXT, false, null, null);
-        DatatableHelper.addDatatableColumns(datatableColumns, COLUMN_DATE, 
API_FIELD_TYPE_DATE, true, null, null);
-        DatatableHelper.addDatatableColumns(datatableColumns, COLUMN_BOOLEAN, 
API_FIELD_TYPE_BOOLEAN, false, null, null);
-        DatatableHelper.addDatatableColumns(datatableColumns, COLUMN_INTEGER, 
API_FIELD_TYPE_NUMBER, false, null, null);
-        DatatableHelper.addDatatableColumns(datatableColumns, COLUMN_DECIMAL, 
API_FIELD_TYPE_DECIMAL, false, null, null);
+        DatatableHelper.addDatatableColumn(datatableColumns, COLUMN_TEXT, 
API_FIELD_TYPE_TEXT, false, null, null);
+        DatatableHelper.addDatatableColumn(datatableColumns, COLUMN_DATE, 
API_FIELD_TYPE_DATE, true, null, null);
+        DatatableHelper.addDatatableColumn(datatableColumns, COLUMN_BOOLEAN, 
API_FIELD_TYPE_BOOLEAN, false, null, null);
+        DatatableHelper.addDatatableColumn(datatableColumns, COLUMN_INTEGER, 
API_FIELD_TYPE_NUMBER, false, null, null);
+        DatatableHelper.addDatatableColumn(datatableColumns, COLUMN_DECIMAL, 
API_FIELD_TYPE_DECIMAL, false, null, null);
         request.put(API_PARAM_COLUMNS, datatableColumns);
 
         String requestJson = new Gson().toJson(request);
diff --git 
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/datatable/DatatableIntegrationTest.java
 
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/datatable/DatatableIntegrationTest.java
index 3a0f6c5be..a66697575 100644
--- 
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/datatable/DatatableIntegrationTest.java
+++ 
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/datatable/DatatableIntegrationTest.java
@@ -18,10 +18,12 @@
  */
 package org.apache.fineract.integrationtests.datatable;
 
+import static 
org.apache.fineract.integrationtests.common.system.DatatableHelper.addDatatableColumn;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
@@ -127,7 +129,6 @@ public class DatatableIntegrationTest extends 
IntegrationTest {
         final HashMap<String, Object> columnMap = new HashMap<>();
         final List<HashMap<String, Object>> datatableColumnsList = new 
ArrayList<>();
         columnMap.put("datatableName", 
Utils.uniqueRandomStringGenerator(CLIENT_APP_TABLE_NAME + "_", 
5).toLowerCase().toLowerCase());
-        columnMap.put("apptableName", CLIENT_APP_TABLE_NAME);
         columnMap.put("entitySubType", "PERSON");
         columnMap.put("multiRow", false);
         String itsABoolean = "itsaboolean";
@@ -141,27 +142,55 @@ public class DatatableIntegrationTest extends 
IntegrationTest {
         String tst_tst_tst_cd_itsADropdown = tst_tst_tst + "_cd_itsadropdown";
         String dateFormat = "dateFormat";
 
-        DatatableHelper.addDatatableColumns(datatableColumnsList, itsABoolean, 
"Boolean", false, null, null);
-        DatatableHelper.addDatatableColumns(datatableColumnsList, itsADate, 
"Date", true, null, null);
-        DatatableHelper.addDatatableColumns(datatableColumnsList, 
itsADatetime, "Datetime", true, null, null);
-        DatatableHelper.addDatatableColumns(datatableColumnsList, itsADecimal, 
"Decimal", true, null, null);
-        DatatableHelper.addDatatableColumns(datatableColumnsList, 
itsADropdown, "Dropdown", false, null, tst_tst_tst);
-        DatatableHelper.addDatatableColumns(datatableColumnsList, itsANumber, 
"Number", true, null, null);
-        DatatableHelper.addDatatableColumns(datatableColumnsList, itsAString, 
"String", true, 10, null);
-        DatatableHelper.addDatatableColumns(datatableColumnsList, itsAText, 
"Text", true, null, null);
+        addDatatableColumn(datatableColumnsList, itsABoolean, "Boolean", 
false, null, null);
+        addDatatableColumn(datatableColumnsList, itsADate, "Date", true, null, 
null);
+        addDatatableColumn(datatableColumnsList, itsADatetime, "Datetime", 
true, null, null);
+        addDatatableColumn(datatableColumnsList, itsADecimal, "Decimal", true, 
null, null);
+        addDatatableColumn(datatableColumnsList, itsADropdown, "Dropdown", 
false, null, tst_tst_tst);
+        addDatatableColumn(datatableColumnsList, itsANumber, "Number", true, 
null, null);
+        addDatatableColumn(datatableColumnsList, itsAString, "String", true, 
10, null);
         columnMap.put("columns", datatableColumnsList);
+
+        // try to create datatable without apptable
+        columnMap.put("apptableName", null);
+        String errorRequestJsonString = new Gson().toJson(columnMap);
+        ResponseSpecification responseSpecError400 = new 
ResponseSpecBuilder().expectStatusCode(400).build();
+        this.datatableHelper = new DatatableHelper(this.requestSpec, 
responseSpecError400);
+        HashMap<String, Object> errorResponse = 
this.datatableHelper.createDatatable(errorRequestJsonString, "");
+        assertEquals("validation.msg.validation.errors.exist", ((Map) 
errorResponse).get("userMessageGlobalisationCode"));
+        List errors = (List) ((Map) errorResponse).get("errors");
+        assertEquals(2, errors.size());
+        assertEquals("validation.msg.datatable.apptableName.cannot.be.blank", 
((Map) errors.get(0)).get("userMessageGlobalisationCode"));
+        
assertEquals("validation.msg.datatable.apptableName.is.not.one.of.expected.enumerations",
+                ((Map) errors.get(1)).get("userMessageGlobalisationCode"));
+        // set valid apptable name
+        columnMap.put("apptableName", CLIENT_APP_TABLE_NAME);
+
+        // try to create datatable with invalid column type
+        HashMap<String, Object> textColumn = 
addDatatableColumn(datatableColumnsList, itsAText, "Invalid", true, null, null);
+        errorRequestJsonString = new Gson().toJson(columnMap);
+        errorResponse = 
this.datatableHelper.createDatatable(errorRequestJsonString, "");
+        assertEquals("validation.msg.validation.errors.exist", ((Map) 
errorResponse).get("userMessageGlobalisationCode"));
+        errors = (List) ((Map) errorResponse).get("errors");
+        assertEquals(1, errors.size());
+        Map error = (Map) errors.get(0);
+        
assertEquals("validation.msg.datatable.type.is.not.one.of.expected.enumerations",
 error.get("userMessageGlobalisationCode"));
+        assertTrue(((String) 
error.get("defaultUserMessage")).contains("string, number, boolean, decimal, 
date, datetime, text, dropdown"));
+        // set valid type
+        textColumn.put("type", "Text");
+
         String datatabelRequestJsonString = new Gson().toJson(columnMap);
         LOG.info("map : {}", datatabelRequestJsonString);
+        this.datatableHelper = new DatatableHelper(this.requestSpec, 
this.responseSpec);
 
         HashMap<String, Object> datatableResponse = 
this.datatableHelper.createDatatable(datatabelRequestJsonString, "");
         String datatableName = (String) 
datatableResponse.get("resourceIdentifier");
         DatatableHelper.verifyDatatableCreatedOnServer(this.requestSpec, 
this.responseSpec, datatableName);
 
         // try to create with the same name
-        ResponseSpecification responseSpecError400 = new 
ResponseSpecBuilder().expectStatusCode(400).build();
         this.datatableHelper = new DatatableHelper(this.requestSpec, 
responseSpecError400);
-        HashMap<String, Object> response = 
this.datatableHelper.createDatatable(datatabelRequestJsonString, "");
-        assertEquals("validation.msg.validation.errors.exist", ((Map) 
response).get("userMessageGlobalisationCode"));
+        errorResponse = 
this.datatableHelper.createDatatable(datatabelRequestJsonString, "");
+        assertEquals("validation.msg.validation.errors.exist", ((Map) 
errorResponse).get("userMessageGlobalisationCode"));
         this.datatableHelper = new DatatableHelper(this.requestSpec, 
this.responseSpec);
 
         // creating client with datatables
@@ -326,9 +355,9 @@ public class DatatableIntegrationTest extends 
IntegrationTest {
         String itsAString = "itsAString";
         String dateFormat = "dateFormat";
 
-        DatatableHelper.addDatatableColumns(datatableColumnsList, itsADate, 
"Date", true, null, null);
-        DatatableHelper.addDatatableColumns(datatableColumnsList, itsADecimal, 
"Decimal", true, null, null);
-        DatatableHelper.addDatatableColumns(datatableColumnsList, itsAString, 
"String", true, 10, null);
+        addDatatableColumn(datatableColumnsList, itsADate, "Date", true, null, 
null);
+        addDatatableColumn(datatableColumnsList, itsADecimal, "Decimal", true, 
null, null);
+        addDatatableColumn(datatableColumnsList, itsAString, "String", true, 
10, null);
         columnMap.put("columns", datatableColumnsList);
         String datatabelRequestJsonString = new Gson().toJson(columnMap);
         LOG.info("map : {}", datatabelRequestJsonString);
@@ -425,14 +454,14 @@ public class DatatableIntegrationTest extends 
IntegrationTest {
         columnMap.put("apptableName", LOAN_APP_TABLE_NAME);
         columnMap.put("entitySubType", "");
         columnMap.put("multiRow", true);
-        DatatableHelper.addDatatableColumns(datatableColumnsList, 
"itsABoolean", "Boolean", false, null, null);
-        DatatableHelper.addDatatableColumns(datatableColumnsList, "itsADate", 
"Date", false, null, null);
-        DatatableHelper.addDatatableColumns(datatableColumnsList, 
"itsADatetime", "Datetime", false, null, null);
-        DatatableHelper.addDatatableColumns(datatableColumnsList, 
"itsADecimal", "Decimal", false, null, null);
-        DatatableHelper.addDatatableColumns(datatableColumnsList, 
"itsADropdown", "Dropdown", false, null, "TST_TST_TST");
-        DatatableHelper.addDatatableColumns(datatableColumnsList, 
"itsANumber", "Number", false, null, null);
-        DatatableHelper.addDatatableColumns(datatableColumnsList, 
"itsAString", "String", false, 10, null);
-        DatatableHelper.addDatatableColumns(datatableColumnsList, "itsAText", 
"Text", false, null, null);
+        addDatatableColumn(datatableColumnsList, "itsABoolean", "Boolean", 
false, null, null);
+        addDatatableColumn(datatableColumnsList, "itsADate", "Date", false, 
null, null);
+        addDatatableColumn(datatableColumnsList, "itsADatetime", "Datetime", 
false, null, null);
+        addDatatableColumn(datatableColumnsList, "itsADecimal", "Decimal", 
false, null, null);
+        addDatatableColumn(datatableColumnsList, "itsADropdown", "Dropdown", 
false, null, "TST_TST_TST");
+        addDatatableColumn(datatableColumnsList, "itsANumber", "Number", 
false, null, null);
+        addDatatableColumn(datatableColumnsList, "itsAString", "String", 
false, 10, null);
+        addDatatableColumn(datatableColumnsList, "itsAText", "Text", false, 
null, null);
         columnMap.put("columns", datatableColumnsList);
         String datatabelRequestJsonString = new Gson().toJson(columnMap);
         LOG.info("map : {}", datatabelRequestJsonString);
@@ -556,8 +585,8 @@ public class DatatableIntegrationTest extends 
IntegrationTest {
         columnMap.put("apptableName", CLIENT_APP_TABLE_NAME);
         columnMap.put("entitySubType", CLIENT_PERSON_SUBTYPE_NAME);
         columnMap.put("multiRow", false);
-        DatatableHelper.addDatatableColumns(datatableColumnsList, 
"itsANumber", "Number", false, null, null);
-        DatatableHelper.addDatatableColumns(datatableColumnsList, 
"itsAString", "String", false, 10, null);
+        addDatatableColumn(datatableColumnsList, "itsANumber", "Number", 
false, null, null);
+        addDatatableColumn(datatableColumnsList, "itsAString", "String", 
false, 10, null);
         columnMap.put("columns", datatableColumnsList);
         String datatabelRequestJsonString = new Gson().toJson(columnMap);
         LOG.info("map : {}", datatabelRequestJsonString);
@@ -597,7 +626,7 @@ public class DatatableIntegrationTest extends 
IntegrationTest {
         columnMap.put("apptableName", CLIENT_APP_TABLE_NAME);
         columnMap.put("entitySubType", CLIENT_PERSON_SUBTYPE_NAME);
         datatableColumnsList = new ArrayList<>();
-        DatatableHelper.addDatatableColumns(datatableColumnsList, "itsAText", 
"Text", false, null, null);
+        addDatatableColumn(datatableColumnsList, "itsAText", "Text", false, 
null, null);
         columnMap.put("addColumns", datatableColumnsList);
         datatabelRequestJsonString = new Gson().toJson(columnMap);
         LOG.info("map to update : {}", datatabelRequestJsonString);
@@ -643,7 +672,7 @@ public class DatatableIntegrationTest extends 
IntegrationTest {
         List<Map<String, Object>> dropColumnsList = 
Collections.singletonList(Collections.singletonMap("name", "itsANumber"));
         columnMap.put("dropColumns", dropColumnsList);
         ArrayList<HashMap<String, Object>> changeColumnsList = new 
ArrayList<>();
-        DatatableHelper.addDatatableColumns(changeColumnsList, "itsAString", 
null, false, 100, null);
+        addDatatableColumn(changeColumnsList, "itsAString", null, false, 100, 
null);
         columnMap.put("changeColumns", changeColumnsList);
         datatabelRequestJsonString = new Gson().toJson(columnMap);
         LOG.info("map to update : {}", datatabelRequestJsonString);
@@ -689,14 +718,14 @@ public class DatatableIntegrationTest extends 
IntegrationTest {
         columnMap.put("apptableName", LOAN_APP_TABLE_NAME);
         columnMap.put("entitySubType", "");
         columnMap.put("multiRow", true);
-        DatatableHelper.addDatatableColumns(datatableColumnsList, 
"itsABoolean", "Boolean", false, null, null);
-        DatatableHelper.addDatatableColumns(datatableColumnsList, "itsADate", 
"Date", false, null, null);
-        DatatableHelper.addDatatableColumns(datatableColumnsList, 
"itsADatetime", "Datetime", false, null, null);
-        DatatableHelper.addDatatableColumns(datatableColumnsList, 
"itsADecimal", "Decimal", false, null, null);
-        DatatableHelper.addDatatableColumns(datatableColumnsList, 
"itsADropdown", "Dropdown", false, null, tst_tst_tst);
-        DatatableHelper.addDatatableColumns(datatableColumnsList, 
"itsANumber", "Number", false, null, null);
-        DatatableHelper.addDatatableColumns(datatableColumnsList, 
"itsAString", "String", false, 10, null);
-        DatatableHelper.addDatatableColumns(datatableColumnsList, "itsAText", 
"Text", false, null, null);
+        addDatatableColumn(datatableColumnsList, "itsABoolean", "Boolean", 
false, null, null);
+        addDatatableColumn(datatableColumnsList, "itsADate", "Date", false, 
null, null);
+        addDatatableColumn(datatableColumnsList, "itsADatetime", "Datetime", 
false, null, null);
+        addDatatableColumn(datatableColumnsList, "itsADecimal", "Decimal", 
false, null, null);
+        addDatatableColumn(datatableColumnsList, "itsADropdown", "Dropdown", 
false, null, tst_tst_tst);
+        addDatatableColumn(datatableColumnsList, "itsANumber", "Number", 
false, null, null);
+        addDatatableColumn(datatableColumnsList, "itsAString", "String", 
false, 10, null);
+        addDatatableColumn(datatableColumnsList, "itsAText", "Text", false, 
null, null);
         columnMap.put("columns", datatableColumnsList);
         String datatabelRequestJsonString = new Gson().toJson(columnMap);
         LOG.info("map : {}", datatabelRequestJsonString);

Reply via email to