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 e87dd888d FINERACT-1978: Delete data table does not delete references
e87dd888d is described below

commit e87dd888d2e8261cfd60e6682ad25a072f0310f0
Author: jmarta <[email protected]>
AuthorDate: Tue Oct 3 00:13:56 2023 +0200

    FINERACT-1978: Delete data table does not delete references
---
 .../dataqueries/api/DatatablesApiResource.java     |   3 -
 .../handler/DeleteDatatableCommandHandler.java     |   3 -
 .../service/ReadWriteNonCoreDataServiceImpl.java   |  16 +--
 .../common/system/DatatableHelper.java             | 144 ++++++++++-----------
 .../datatable/DatatableIntegrationTest.java        |   3 +
 5 files changed, 81 insertions(+), 88 deletions(-)

diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/api/DatatablesApiResource.java
 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/api/DatatablesApiResource.java
index 38ddae0d4..d0ba53fc6 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/api/DatatablesApiResource.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/api/DatatablesApiResource.java
@@ -185,11 +185,8 @@ public class DatatablesApiResource {
     @ApiResponses({
             @ApiResponse(responseCode = "200", description = "OK", content = 
@Content(schema = @Schema(implementation = 
DatatablesApiResourceSwagger.PutDataTablesResponse.class))) })
     public String deregisterDatatable(@PathParam("datatable") 
@Parameter(description = "datatable") final String datatable) {
-
         this.readWriteNonCoreDataService.deregisterDatatable(datatable);
-
         final CommandProcessingResult result = new 
CommandProcessingResultBuilder().withResourceIdAsString(datatable).build();
-
         return this.toApiJsonSerializer.serialize(result);
     }
 
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/handler/DeleteDatatableCommandHandler.java
 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/handler/DeleteDatatableCommandHandler.java
index c23f24674..176c0bf57 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/handler/DeleteDatatableCommandHandler.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/handler/DeleteDatatableCommandHandler.java
@@ -40,11 +40,8 @@ public class DeleteDatatableCommandHandler implements 
NewCommandSourceHandler {
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
-
         final String datatableName = 
command.getUrl().replaceAll("/datatables/", "");
-
         this.writePlatformService.deleteDatatable(datatableName);
-
         return new 
CommandProcessingResultBuilder().withCommandId(command.commandId()).withResourceIdAsString(datatableName).build();
     }
 }
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 70c3a2ee0..37d63686e 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
@@ -459,20 +459,16 @@ public class ReadWriteNonCoreDataServiceImpl implements 
ReadWriteNonCoreDataServ
     @Transactional
     @Override
     public void deregisterDatatable(final String datatable) {
-        String validatedDatatable = 
this.preventSqlInjectionService.encodeSql(datatable);
-        final String permissionList = "('CREATE_" + validatedDatatable + "', 
'CREATE_" + validatedDatatable + "_CHECKER', 'READ_"
-                + validatedDatatable + "', 'UPDATE_" + validatedDatatable + 
"', 'UPDATE_" + validatedDatatable + "_CHECKER', 'DELETE_"
-                + validatedDatatable + "', 'DELETE_" + validatedDatatable + 
"_CHECKER')";
+        validateDatatableRegistered(datatable);
+        final String permissionList = "('CREATE_" + datatable + "', 'CREATE_" 
+ datatable + "_CHECKER', 'READ_" + datatable + "', 'UPDATE_"
+                + datatable + "', 'UPDATE_" + datatable + "_CHECKER', 
'DELETE_" + datatable + "', 'DELETE_" + datatable + "_CHECKER')";
 
         final String deleteRolePermissionsSql = "delete from m_role_permission 
where m_role_permission.permission_id in (select id from m_permission where 
code in "
                 + permissionList + ")";
 
         final String deletePermissionsSql = "delete from m_permission where 
code in " + permissionList;
-
-        final String deleteRegisteredDatatableSql = "delete from 
x_registered_table where registered_table_name = '" + validatedDatatable
-                + "'";
-
-        final String deleteFromConfigurationSql = "delete from c_configuration 
where name ='" + validatedDatatable + "'";
+        final String deleteRegisteredDatatableSql = "delete from 
x_registered_table where registered_table_name = '" + datatable + "'";
+        final String deleteFromConfigurationSql = "delete from c_configuration 
where name ='" + datatable + "'";
 
         String[] sqlArray = new String[4];
         sqlArray[0] = deleteRolePermissionsSql;
@@ -1250,7 +1246,7 @@ public class ReadWriteNonCoreDataServiceImpl implements 
ReadWriteNonCoreDataServ
     public void deleteDatatable(final String datatableName) {
         try {
             this.context.authenticatedUser();
-            validateDatatableRegistered(datatableName);
+            validateDatatableName(datatableName);
             assertDataTableEmpty(datatableName);
             deregisterDatatable(datatableName);
             String[] sqlArray;
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 313494a7a..5c5bad42a 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
@@ -77,43 +77,58 @@ public class DatatableHelper extends IntegrationTest {
                 getTestDatatableAsJSON(apptableName, multiRow), 
"resourceIdentifier");
     }
 
-    public <T> T createDatatableEntry(final String datatableName, final 
Integer apptableId, final boolean genericResultSet,
-            final String json) {
-        return Utils.performServerPost(this.requestSpec, this.responseSpec, 
DATATABLE_URL + "/" + datatableName + "/" + apptableId
-                + "?genericResultSet=" + genericResultSet + "&" + 
Utils.TENANT_IDENTIFIER, json, "");
+    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 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 PostDataTablesResponse createDatatable(PostDataTablesRequest 
request) {
+        return ok(fineract().dataTables.createDatatable(request));
     }
 
-    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
-                + "?genericResultSet=" + genericResultSet + "&" + 
Utils.TENANT_IDENTIFIER, json, "");
+    public static void verifyDatatableCreatedOnServer(final 
RequestSpecification requestSpec, final ResponseSpecification responseSpec,
+            final String generatedDatatableName) {
+        LOG.info("------------------------------CHECK DATATABLE 
DETAILS------------------------------------\n");
+        final String responseRegisteredTableName = 
Utils.performServerGet(requestSpec, responseSpec,
+                DATATABLE_URL + "/" + generatedDatatableName + "?" + 
Utils.TENANT_IDENTIFIER, "registeredTableName");
+        assertEquals(generatedDatatableName, responseRegisteredTableName, 
"ERROR IN CREATING THE DATATABLE");
     }
 
-    public <T> T updateDatatableEntry(final String datatableName, final 
Integer apptableId, final Integer entryId,
-            final boolean genericResultSet, final String json) {
-        return Utils.performServerPut(this.requestSpec, this.responseSpec, 
DATATABLE_URL + "/" + datatableName + "/" + apptableId + "/"
-                + entryId + "?genericResultSet=" + genericResultSet + "&" + 
Utils.TENANT_IDENTIFIER, json, "");
+    public GetDataTablesResponse getDataTableDetails(final String 
dataTableName) {
+        return ok(fineract().dataTables.getDatatable(dataTableName));
     }
 
-    public PutDataTablesAppTableIdDatatableIdResponse 
updateDatatableEntry(final String datatableName, final Integer apptableId,
-            final Integer entryId, final String json) {
-        final String response = Utils.performServerPut(this.requestSpec, 
this.responseSpec, DATATABLE_URL + "/" + datatableName + "/"
-                + apptableId + "/" + entryId + "?genericResultSet=false&" + 
Utils.TENANT_IDENTIFIER, json, null);
-        return GSON.fromJson(response, 
PutDataTablesAppTableIdDatatableIdResponse.class);
+    public String runDatatableQuery(final String datatableName, final String 
columnFilter, final String valueFilter,
+            final String resultColumns) {
+        return Utils.performServerGet(this.requestSpec, this.responseSpec, 
DATATABLE_URL + "/" + datatableName + "/query" + "?columnFilter="
+                + columnFilter + "&valueFilter=" + valueFilter + 
"&resultColumns=" + resultColumns + "&" + Utils.TENANT_IDENTIFIER);
     }
 
-    public PutDataTablesAppTableIdDatatableIdResponse 
updateDatatableEntry(final String datatableName, final Integer apptableId,
-            final String json) {
+    public Map<String, Object> queryDatatable(String dataTableName, 
PagedLocalRequestAdvancedQueryData request) {
+        String response = 
ok(fineract().dataTables.advancedQuery(dataTableName, request));
+        return JsonPath.from(response).get("");
+    }
+
+    public PutDataTablesResponse updateDatatable(String dataTableName, 
PutDataTablesRequest request) {
+        return ok(fineract().dataTables.updateDatatable(dataTableName, 
request));
+    }
+
+    public PutDataTablesResponse updateDatatable(String dataTableName, 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);
+                DATATABLE_URL + "/" + dataTableName + "?" + 
Utils.TENANT_IDENTIFIER, json);
+        return GSON.fromJson(response, PutDataTablesResponse.class);
+    }
+
+    public String deleteDatatable(final String datatableName) {
+        return Utils.performServerDelete(this.requestSpec, this.responseSpec,
+                DATATABLE_URL + "/" + datatableName + "?" + 
Utils.TENANT_IDENTIFIER, "resourceIdentifier");
+    }
+
+    public <T> T createDatatableEntry(final String datatableName, final 
Integer apptableId, final boolean genericResultSet,
+            final String json) {
+        return Utils.performServerPost(this.requestSpec, this.responseSpec, 
DATATABLE_URL + "/" + datatableName + "/" + apptableId
+                + "?genericResultSet=" + genericResultSet + "&" + 
Utils.TENANT_IDENTIFIER, json, "");
     }
 
     public Integer createDatatableEntry(final String apptableName, final 
String datatableName, final Integer apptableId,
@@ -124,6 +139,13 @@ public class DatatableHelper extends IntegrationTest {
                 getTestDatatableEntryAsJSON(dateFormat), 
jsonAttributeToGetBack);
     }
 
+    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 String readDatatableEntry(final String datatableName, final Integer 
resourceId, final boolean genericResultset) {
         return Utils.performServerGet(this.requestSpec, this.responseSpec, 
DATATABLE_URL + "/" + datatableName + "/" + resourceId
                 + "?genericResultSet=" + String.valueOf(genericResultset) + 
"&" + Utils.TENANT_IDENTIFIER);
@@ -150,29 +172,36 @@ public class DatatableHelper extends IntegrationTest {
         return Utils.convertJsonElementAsDate(jsonElement);
     }
 
-    public String deleteDatatable(final String datatableName) {
-        return Utils.performServerDelete(this.requestSpec, this.responseSpec,
-                DATATABLE_URL + "/" + datatableName + "?" + 
Utils.TENANT_IDENTIFIER, "resourceIdentifier");
+    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
+                + "?genericResultSet=" + genericResultSet + "&" + 
Utils.TENANT_IDENTIFIER, json, "");
     }
 
-    public Object deleteDatatableEntries(final String datatableName, final 
Integer apptableId, String jsonAttributeToGetBack) {
-        final String deleteEntryUrl = DATATABLE_URL + "/" + datatableName + 
"/" + apptableId + "?genericResultSet=true" + "&"
-                + Utils.TENANT_IDENTIFIER;
-        return Utils.performServerDelete(this.requestSpec, this.responseSpec, 
deleteEntryUrl, jsonAttributeToGetBack);
+    public <T> T updateDatatableEntry(final String datatableName, final 
Integer apptableId, final Integer entryId,
+            final boolean genericResultSet, final String json) {
+        return Utils.performServerPut(this.requestSpec, this.responseSpec, 
DATATABLE_URL + "/" + datatableName + "/" + apptableId + "/"
+                + entryId + "?genericResultSet=" + genericResultSet + "&" + 
Utils.TENANT_IDENTIFIER, json, "");
     }
 
-    public String runDatatableQuery(final String datatableName, final String 
columnFilter, final String valueFilter,
-            final String resultColumns) {
-        return Utils.performServerGet(this.requestSpec, this.responseSpec, 
DATATABLE_URL + "/" + datatableName + "/query" + "?columnFilter="
-                + columnFilter + "&valueFilter=" + valueFilter + 
"&resultColumns=" + resultColumns + "&" + Utils.TENANT_IDENTIFIER);
+    public PutDataTablesAppTableIdDatatableIdResponse 
updateDatatableEntry(final String datatableName, final Integer apptableId,
+            final Integer entryId, final String json) {
+        final String response = Utils.performServerPut(this.requestSpec, 
this.responseSpec, DATATABLE_URL + "/" + datatableName + "/"
+                + apptableId + "/" + entryId + "?genericResultSet=false&" + 
Utils.TENANT_IDENTIFIER, json, null);
+        return GSON.fromJson(response, 
PutDataTablesAppTableIdDatatableIdResponse.class);
     }
 
-    public static void verifyDatatableCreatedOnServer(final 
RequestSpecification requestSpec, final ResponseSpecification responseSpec,
-            final String generatedDatatableName) {
-        LOG.info("------------------------------CHECK DATATABLE 
DETAILS------------------------------------\n");
-        final String responseRegisteredTableName = 
Utils.performServerGet(requestSpec, responseSpec,
-                DATATABLE_URL + "/" + generatedDatatableName + "?" + 
Utils.TENANT_IDENTIFIER, "registeredTableName");
-        assertEquals(generatedDatatableName, responseRegisteredTableName, 
"ERROR IN CREATING THE DATATABLE");
+    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 Object deleteDatatableEntries(final String datatableName, final 
Integer apptableId, String jsonAttributeToGetBack) {
+        final String deleteEntryUrl = DATATABLE_URL + "/" + datatableName + 
"/" + apptableId + "?genericResultSet=true" + "&"
+                + Utils.TENANT_IDENTIFIER;
+        return Utils.performServerDelete(this.requestSpec, this.responseSpec, 
deleteEntryUrl, jsonAttributeToGetBack);
     }
 
     public static String getTestDatatableAsJSON(final String apptableName, 
final String datatableName, final String codeName,
@@ -272,33 +301,4 @@ public class DatatableHelper extends IntegrationTest {
         datatableColumnsList.add(datatableColumnMap);
         return datatableColumnsList;
     }
-
-    public PostDataTablesResponse createDatatable(PostDataTablesRequest 
request) {
-        return ok(fineract().dataTables.createDatatable(request));
-    }
-
-    public GetDataTablesResponse getDataTableDetails(final String 
dataTableName) {
-        return ok(fineract().dataTables.getDatatable(dataTableName));
-    }
-
-    public PutDataTablesResponse updateDatatable(String dataTableName, 
PutDataTablesRequest request) {
-        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);
-    }
-
-    public Map<String, Object> queryDatatable(String dataTableName, 
PagedLocalRequestAdvancedQueryData request) {
-        String response = 
ok(fineract().dataTables.advancedQuery(dataTableName, request));
-        return JsonPath.from(response).get("");
-    }
 }
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 8dd74135e..2c7b8a4bc 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
@@ -339,6 +339,9 @@ public class DatatableIntegrationTest extends 
IntegrationTest {
         // deleting the datatable
         String deletedDataTableName = 
this.datatableHelper.deleteDatatable(datatableName);
         assertEquals(datatableName, deletedDataTableName, "ERROR IN DELETING 
THE DATATABLE");
+
+        GetDataTablesResponse dataTable = 
datatableHelper.getDataTableDetails(datatableName);
+        assertNull(dataTable);
     }
 
     @Test

Reply via email to