FINERACT-1978: Delete data table does not delete references
This commit is contained in:
-3
@@ -185,11 +185,8 @@ public class DatatablesApiResource {
|
|||||||
@ApiResponses({
|
@ApiResponses({
|
||||||
@ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = DatatablesApiResourceSwagger.PutDataTablesResponse.class))) })
|
@ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = DatatablesApiResourceSwagger.PutDataTablesResponse.class))) })
|
||||||
public String deregisterDatatable(@PathParam("datatable") @Parameter(description = "datatable") final String datatable) {
|
public String deregisterDatatable(@PathParam("datatable") @Parameter(description = "datatable") final String datatable) {
|
||||||
|
|
||||||
this.readWriteNonCoreDataService.deregisterDatatable(datatable);
|
this.readWriteNonCoreDataService.deregisterDatatable(datatable);
|
||||||
|
|
||||||
final CommandProcessingResult result = new CommandProcessingResultBuilder().withResourceIdAsString(datatable).build();
|
final CommandProcessingResult result = new CommandProcessingResultBuilder().withResourceIdAsString(datatable).build();
|
||||||
|
|
||||||
return this.toApiJsonSerializer.serialize(result);
|
return this.toApiJsonSerializer.serialize(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
-3
@@ -40,11 +40,8 @@ public class DeleteDatatableCommandHandler implements NewCommandSourceHandler {
|
|||||||
@Transactional
|
@Transactional
|
||||||
@Override
|
@Override
|
||||||
public CommandProcessingResult processCommand(final JsonCommand command) {
|
public CommandProcessingResult processCommand(final JsonCommand command) {
|
||||||
|
|
||||||
final String datatableName = command.getUrl().replaceAll("/datatables/", "");
|
final String datatableName = command.getUrl().replaceAll("/datatables/", "");
|
||||||
|
|
||||||
this.writePlatformService.deleteDatatable(datatableName);
|
this.writePlatformService.deleteDatatable(datatableName);
|
||||||
|
|
||||||
return new CommandProcessingResultBuilder().withCommandId(command.commandId()).withResourceIdAsString(datatableName).build();
|
return new CommandProcessingResultBuilder().withCommandId(command.commandId()).withResourceIdAsString(datatableName).build();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-10
@@ -459,20 +459,16 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ
|
|||||||
@Transactional
|
@Transactional
|
||||||
@Override
|
@Override
|
||||||
public void deregisterDatatable(final String datatable) {
|
public void deregisterDatatable(final String datatable) {
|
||||||
String validatedDatatable = this.preventSqlInjectionService.encodeSql(datatable);
|
validateDatatableRegistered(datatable);
|
||||||
final String permissionList = "('CREATE_" + validatedDatatable + "', 'CREATE_" + validatedDatatable + "_CHECKER', 'READ_"
|
final String permissionList = "('CREATE_" + datatable + "', 'CREATE_" + datatable + "_CHECKER', 'READ_" + datatable + "', 'UPDATE_"
|
||||||
+ validatedDatatable + "', 'UPDATE_" + validatedDatatable + "', 'UPDATE_" + validatedDatatable + "_CHECKER', 'DELETE_"
|
+ datatable + "', 'UPDATE_" + datatable + "_CHECKER', 'DELETE_" + datatable + "', 'DELETE_" + datatable + "_CHECKER')";
|
||||||
+ validatedDatatable + "', 'DELETE_" + validatedDatatable + "_CHECKER')";
|
|
||||||
|
|
||||||
final String deleteRolePermissionsSql = "delete from m_role_permission where m_role_permission.permission_id in (select id from m_permission where code in "
|
final String deleteRolePermissionsSql = "delete from m_role_permission where m_role_permission.permission_id in (select id from m_permission where code in "
|
||||||
+ permissionList + ")";
|
+ permissionList + ")";
|
||||||
|
|
||||||
final String deletePermissionsSql = "delete 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 = '" + datatable + "'";
|
||||||
final String deleteRegisteredDatatableSql = "delete from x_registered_table where registered_table_name = '" + validatedDatatable
|
final String deleteFromConfigurationSql = "delete from c_configuration where name ='" + datatable + "'";
|
||||||
+ "'";
|
|
||||||
|
|
||||||
final String deleteFromConfigurationSql = "delete from c_configuration where name ='" + validatedDatatable + "'";
|
|
||||||
|
|
||||||
String[] sqlArray = new String[4];
|
String[] sqlArray = new String[4];
|
||||||
sqlArray[0] = deleteRolePermissionsSql;
|
sqlArray[0] = deleteRolePermissionsSql;
|
||||||
@@ -1250,7 +1246,7 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ
|
|||||||
public void deleteDatatable(final String datatableName) {
|
public void deleteDatatable(final String datatableName) {
|
||||||
try {
|
try {
|
||||||
this.context.authenticatedUser();
|
this.context.authenticatedUser();
|
||||||
validateDatatableRegistered(datatableName);
|
validateDatatableName(datatableName);
|
||||||
assertDataTableEmpty(datatableName);
|
assertDataTableEmpty(datatableName);
|
||||||
deregisterDatatable(datatableName);
|
deregisterDatatable(datatableName);
|
||||||
String[] sqlArray;
|
String[] sqlArray;
|
||||||
|
|||||||
+79
-79
@@ -77,45 +77,60 @@ public class DatatableHelper extends IntegrationTest {
|
|||||||
getTestDatatableAsJSON(apptableName, multiRow), "resourceIdentifier");
|
getTestDatatableAsJSON(apptableName, multiRow), "resourceIdentifier");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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 PostDataTablesResponse createDatatable(PostDataTablesRequest request) {
|
||||||
|
return ok(fineract().dataTables.createDatatable(request));
|
||||||
|
}
|
||||||
|
|
||||||
|
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 GetDataTablesResponse getDataTableDetails(final String dataTableName) {
|
||||||
|
return ok(fineract().dataTables.getDatatable(dataTableName));
|
||||||
|
}
|
||||||
|
|
||||||
|
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 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 + "?" + 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,
|
public <T> T createDatatableEntry(final String datatableName, final Integer apptableId, final boolean genericResultSet,
|
||||||
final String json) {
|
final String json) {
|
||||||
return Utils.performServerPost(this.requestSpec, this.responseSpec, DATATABLE_URL + "/" + datatableName + "/" + apptableId
|
return Utils.performServerPost(this.requestSpec, this.responseSpec, DATATABLE_URL + "/" + datatableName + "/" + apptableId
|
||||||
+ "?genericResultSet=" + genericResultSet + "&" + Utils.TENANT_IDENTIFIER, json, "");
|
+ "?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
|
|
||||||
+ "?genericResultSet=" + genericResultSet + "&" + Utils.TENANT_IDENTIFIER, json, "");
|
|
||||||
}
|
|
||||||
|
|
||||||
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 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 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,
|
public Integer createDatatableEntry(final String apptableName, final String datatableName, final Integer apptableId,
|
||||||
final boolean genericResultSet, final String dateFormat, final String jsonAttributeToGetBack) {
|
final boolean genericResultSet, final String dateFormat, final String jsonAttributeToGetBack) {
|
||||||
return Utils.performServerPost(
|
return Utils.performServerPost(
|
||||||
@@ -124,6 +139,13 @@ public class DatatableHelper extends IntegrationTest {
|
|||||||
getTestDatatableEntryAsJSON(dateFormat), jsonAttributeToGetBack);
|
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) {
|
public String readDatatableEntry(final String datatableName, final Integer resourceId, final boolean genericResultset) {
|
||||||
return Utils.performServerGet(this.requestSpec, this.responseSpec, DATATABLE_URL + "/" + datatableName + "/" + resourceId
|
return Utils.performServerGet(this.requestSpec, this.responseSpec, DATATABLE_URL + "/" + datatableName + "/" + resourceId
|
||||||
+ "?genericResultSet=" + String.valueOf(genericResultset) + "&" + Utils.TENANT_IDENTIFIER);
|
+ "?genericResultSet=" + String.valueOf(genericResultset) + "&" + Utils.TENANT_IDENTIFIER);
|
||||||
@@ -150,9 +172,30 @@ public class DatatableHelper extends IntegrationTest {
|
|||||||
return Utils.convertJsonElementAsDate(jsonElement);
|
return Utils.convertJsonElementAsDate(jsonElement);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String deleteDatatable(final String datatableName) {
|
public <T> T updateDatatableEntry(final String datatableName, final Integer apptableId, final boolean genericResultSet,
|
||||||
return Utils.performServerDelete(this.requestSpec, this.responseSpec,
|
final String json) {
|
||||||
DATATABLE_URL + "/" + datatableName + "?" + Utils.TENANT_IDENTIFIER, "resourceIdentifier");
|
return Utils.performServerPut(this.requestSpec, this.responseSpec, DATATABLE_URL + "/" + datatableName + "/" + apptableId
|
||||||
|
+ "?genericResultSet=" + genericResultSet + "&" + Utils.TENANT_IDENTIFIER, json, "");
|
||||||
|
}
|
||||||
|
|
||||||
|
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 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 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) {
|
public Object deleteDatatableEntries(final String datatableName, final Integer apptableId, String jsonAttributeToGetBack) {
|
||||||
@@ -161,20 +204,6 @@ public class DatatableHelper extends IntegrationTest {
|
|||||||
return Utils.performServerDelete(this.requestSpec, this.responseSpec, deleteEntryUrl, jsonAttributeToGetBack);
|
return Utils.performServerDelete(this.requestSpec, this.responseSpec, deleteEntryUrl, jsonAttributeToGetBack);
|
||||||
}
|
}
|
||||||
|
|
||||||
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 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 static String getTestDatatableAsJSON(final String apptableName, final String datatableName, final String codeName,
|
public static String getTestDatatableAsJSON(final String apptableName, final String datatableName, final String codeName,
|
||||||
final boolean multiRow) {
|
final boolean multiRow) {
|
||||||
final HashMap<String, Object> map = new HashMap<>();
|
final HashMap<String, Object> map = new HashMap<>();
|
||||||
@@ -272,33 +301,4 @@ public class DatatableHelper extends IntegrationTest {
|
|||||||
datatableColumnsList.add(datatableColumnMap);
|
datatableColumnsList.add(datatableColumnMap);
|
||||||
return datatableColumnsList;
|
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("");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
+3
@@ -339,6 +339,9 @@ public class DatatableIntegrationTest extends IntegrationTest {
|
|||||||
// deleting the datatable
|
// deleting the datatable
|
||||||
String deletedDataTableName = this.datatableHelper.deleteDatatable(datatableName);
|
String deletedDataTableName = this.datatableHelper.deleteDatatable(datatableName);
|
||||||
assertEquals(datatableName, deletedDataTableName, "ERROR IN DELETING THE DATATABLE");
|
assertEquals(datatableName, deletedDataTableName, "ERROR IN DELETING THE DATATABLE");
|
||||||
|
|
||||||
|
GetDataTablesResponse dataTable = datatableHelper.getDataTableDetails(datatableName);
|
||||||
|
assertNull(dataTable);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
Reference in New Issue
Block a user