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