You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fineract.apache.org by ad...@apache.org on 2023/01/17 08:15:53 UTC
[fineract] branch develop updated: FINERACT-1856: Fix to update datatable entry is failing after column added lately
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 09a91bba0 FINERACT-1856: Fix to update datatable entry is failing after column added lately
09a91bba0 is described below
commit 09a91bba01b6a8261578d2a4eb840ff4b93af0e0
Author: Jose Alberto Hernandez <al...@MacBook-Pro.local>
AuthorDate: Fri Jan 13 02:40:02 2023 -0600
FINERACT-1856: Fix to update datatable entry is failing after column added lately
---
.../service/ReadWriteNonCoreDataServiceImpl.java | 8 +-
.../integrationtests/DatatableIntegrationTest.java | 93 ++++++++++++++++++++++
.../common/system/DatatableHelper.java | 27 +++++++
3 files changed, 127 insertions(+), 1 deletion(-)
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/ReadWriteNonCoreDataServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/ReadWriteNonCoreDataServiceImpl.java
index c716cc21f..850e30122 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/ReadWriteNonCoreDataServiceImpl.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/ReadWriteNonCoreDataServiceImpl.java
@@ -2059,7 +2059,13 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ
sql += sqlGenerator.escape(key) + " = " + pValueWrite;
} else {
if (key.equalsIgnoreCase(DataTableApiConstant.UPDATEDAT_FIELD_NAME)) {
- sql += ", " + sqlGenerator.escape(key) + " = " + sqlGenerator.currentTenantDateTime();
+ if (firstColumn) {
+ sql += " set ";
+ firstColumn = false;
+ } else {
+ sql += ", ";
+ }
+ sql += sqlGenerator.escape(key) + " = " + sqlGenerator.currentTenantDateTime();
}
}
}
diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/DatatableIntegrationTest.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/DatatableIntegrationTest.java
index 14b221b2e..781064021 100644
--- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/DatatableIntegrationTest.java
+++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/DatatableIntegrationTest.java
@@ -41,7 +41,10 @@ import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import org.apache.fineract.client.models.PostDataTablesAppTableIdResponse;
+import org.apache.fineract.client.models.PostDataTablesResponse;
import org.apache.fineract.client.models.PutDataTablesAppTableIdDatatableIdResponse;
+import org.apache.fineract.client.models.PutDataTablesResponse;
import org.apache.fineract.client.util.Calls;
import org.apache.fineract.integrationtests.client.IntegrationTest;
import org.apache.fineract.integrationtests.common.ClientHelper;
@@ -61,6 +64,7 @@ public class DatatableIntegrationTest extends IntegrationTest {
private static final Logger LOG = LoggerFactory.getLogger(DatatableIntegrationTest.class);
private static final String CLIENT_APP_TABLE_NAME = "m_client";
+ private static final String CLIENT_PERSON_SUBTYPE_NAME = "Person";
private static final String LOAN_APP_TABLE_NAME = "m_loan";
private static final Float LP_PRINCIPAL = 10000.0f;
@@ -426,6 +430,95 @@ public class DatatableIntegrationTest extends IntegrationTest {
assertEquals(0, updatedDatatableEntryResponse.getChanges().size());
}
+ @Test
+ public void validateCreateAndEditDatatable() {
+ // Creating client
+ final Integer clientId = ClientHelper.createClientAsPerson(requestSpec, responseSpec);
+ final Integer randomNumber = Utils.randomNumberGenerator(3);
+
+ // Creating datatable for Client Person
+ final String datatableName = Utils.randomNameGenerator(CLIENT_APP_TABLE_NAME + "_", 5);
+ final boolean genericResultSet = true;
+
+ HashMap<String, Object> columnMap = new HashMap<>();
+ List<HashMap<String, Object>> datatableColumnsList = new ArrayList<>();
+ columnMap.put("datatableName", datatableName);
+ 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);
+ columnMap.put("columns", datatableColumnsList);
+ String datatabelRequestJsonString = new Gson().toJson(columnMap);
+ LOG.info("map : {}", datatabelRequestJsonString);
+
+ PostDataTablesResponse datatableCreateResponse = this.datatableHelper.createDatatable(datatabelRequestJsonString);
+ assertEquals(datatableName, datatableCreateResponse.getResourceIdentifier());
+ DatatableHelper.verifyDatatableCreatedOnServer(this.requestSpec, this.responseSpec, datatableName);
+
+ // Insert first values
+ final String value = Utils.randomStringGenerator("Q", 8);
+ HashMap<String, Object> datatableEntryMap = new HashMap<>();
+ datatableEntryMap.put("itsANumber", randomNumber);
+ datatableEntryMap.put("itsAString", value);
+
+ datatableEntryMap.put("locale", "en");
+ datatableEntryMap.put("dateFormat", "yyyy-MM-dd");
+
+ String datatableEntryRequestJsonString = new GsonBuilder().serializeNulls().create().toJson(datatableEntryMap);
+ PostDataTablesAppTableIdResponse datatableEntryResponse = this.datatableHelper.addDatatableEntry(datatableName, clientId,
+ genericResultSet, datatableEntryRequestJsonString);
+ assertNotNull(datatableEntryResponse.getResourceId(), "ERROR IN CREATING THE ENTITY DATATABLE RECORD");
+
+ // Read the Datatable entry generated with genericResultSet in true (default)
+ HashMap<String, Object> items = this.datatableHelper.readDatatableEntry(datatableName, clientId, genericResultSet, null, "");
+ assertNotNull(items);
+ assertEquals(1, ((List) items.get("data")).size());
+ LOG.info("Record created at {}", ((List) ((Map) ((List) items.get("data")).get(0)).get("row")).get(3));
+ LOG.info("Record updated at {}", ((List) ((Map) ((List) items.get("data")).get(0)).get("row")).get(4));
+
+ assertEquals(clientId, ((List) ((Map) ((List) items.get("data")).get(0)).get("row")).get(0));
+ assertEquals(value, ((List) ((Map) ((List) items.get("data")).get(0)).get("row")).get(2));
+
+ // Update DataTable
+ columnMap = new HashMap<>();
+ 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);
+ columnMap.put("addColumns", datatableColumnsList);
+ datatabelRequestJsonString = new Gson().toJson(columnMap);
+ LOG.info("map to update : {}", datatabelRequestJsonString);
+ PutDataTablesResponse datatableUpdateResponse = this.datatableHelper.updateDatatable(datatableName, datatabelRequestJsonString);
+ assertNotNull(datatableUpdateResponse);
+ assertEquals(datatableName, datatableUpdateResponse.getResourceIdentifier());
+
+ // Update DataTable Entry after Update DataTable schema
+ datatableEntryMap = new HashMap<>();
+ final String textValue = Utils.randomStringGenerator(value, 120);
+ datatableEntryMap.put("itsAText", textValue);
+ datatableEntryMap.put("locale", "en");
+ datatableEntryMap.put("dateFormat", "yyyy-MM-dd");
+
+ datatableEntryRequestJsonString = new GsonBuilder().serializeNulls().create().toJson(datatableEntryMap);
+ LOG.info("map to update : {}", datatableEntryRequestJsonString);
+ PutDataTablesAppTableIdDatatableIdResponse updatedDatatableEntryResponse = this.datatableHelper.updateDatatableEntry(datatableName,
+ clientId, datatableEntryRequestJsonString);
+ assertNotNull(updatedDatatableEntryResponse);
+ assertEquals(1, updatedDatatableEntryResponse.getChanges().size());
+
+ // Read the Datatable entry generated with genericResultSet in true (default)
+ items = this.datatableHelper.readDatatableEntry(datatableName, clientId, genericResultSet, null, "");
+ assertNotNull(items);
+ assertEquals(1, ((List) items.get("data")).size());
+ LOG.info("Record created at {}", ((List) ((Map) ((List) items.get("data")).get(0)).get("row")).get(3));
+ LOG.info("Record updated at {}", ((List) ((Map) ((List) items.get("data")).get(0)).get("row")).get(4));
+
+ assertEquals(clientId, ((List) ((Map) ((List) items.get("data")).get(0)).get("row")).get(0));
+ assertEquals(value, ((List) ((Map) ((List) items.get("data")).get(0)).get("row")).get(2));
+ assertEquals(textValue, ((List) ((Map) ((List) items.get("data")).get(0)).get("row")).get(5));
+ }
+
@Test
public void validateReadDatatableMultirow() {
// Fetch / Create TST code
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 cf771a2cc..ab3e3fc89 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
@@ -31,6 +31,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Objects;
import org.apache.fineract.client.models.GetDataTablesResponse;
+import org.apache.fineract.client.models.PostDataTablesAppTableIdResponse;
import org.apache.fineract.client.models.PostDataTablesRequest;
import org.apache.fineract.client.models.PostDataTablesResponse;
import org.apache.fineract.client.models.PutDataTablesAppTableIdDatatableIdResponse;
@@ -73,6 +74,13 @@ public class DatatableHelper extends IntegrationTest {
+ "?genericResultSet=" + genericResultSet + "&" + Utils.TENANT_IDENTIFIER, json, "");
}
+ public PostDataTablesAppTableIdResponse addDatatableEntry(final String datatableName, final Integer apptableId,
+ final boolean genericResultSet, final String json) {
+ final String response = Utils.performServerPost(this.requestSpec, this.responseSpec, DATATABLE_URL + "/" + datatableName + "/"
+ + apptableId + "?genericResultSet=" + genericResultSet + "&" + Utils.TENANT_IDENTIFIER, json);
+ return GSON.fromJson(response, PostDataTablesAppTableIdResponse.class);
+ }
+
public <T> T updateDatatableEntry(final String datatableName, final Integer apptableId, final boolean genericResultSet,
final String json) {
return Utils.performServerPut(this.requestSpec, this.responseSpec, DATATABLE_URL + "/" + datatableName + "/" + apptableId
@@ -92,6 +100,13 @@ public class DatatableHelper extends IntegrationTest {
return GSON.fromJson(response, PutDataTablesAppTableIdDatatableIdResponse.class);
}
+ public PutDataTablesAppTableIdDatatableIdResponse updateDatatableEntry(final String datatableName, final Integer apptableId,
+ final String json) {
+ final String response = Utils.performServerPut(this.requestSpec, this.responseSpec,
+ DATATABLE_URL + "/" + datatableName + "/" + apptableId + "?genericResultSet=false&" + Utils.TENANT_IDENTIFIER, json, null);
+ return GSON.fromJson(response, PutDataTablesAppTableIdDatatableIdResponse.class);
+ }
+
public Integer createDatatableEntry(final String apptableName, final String datatableName, final Integer apptableId,
final boolean genericResultSet, final String dateFormat, final String jsonAttributeToGetBack) {
return Utils.performServerPost(
@@ -253,4 +268,16 @@ public class DatatableHelper extends IntegrationTest {
return ok(fineract().dataTables.updateDatatable(dataTableName, request));
}
+ public PostDataTablesResponse createDatatable(final String json) {
+ final String response = Utils.performServerPost(this.requestSpec, this.responseSpec, DATATABLE_URL + "?" + Utils.TENANT_IDENTIFIER,
+ json);
+ return GSON.fromJson(response, PostDataTablesResponse.class);
+ }
+
+ public PutDataTablesResponse updateDatatable(String dataTableName, final String json) {
+ final String response = Utils.performServerPut(this.requestSpec, this.responseSpec,
+ DATATABLE_URL + "/" + dataTableName + "?" + Utils.TENANT_IDENTIFIER, json);
+ return GSON.fromJson(response, PutDataTablesResponse.class);
+ }
+
}