Rework datatable entry handling + added additional tests
This commit is contained in:
committed by
Arnold Gálovics
parent
f50f5700b5
commit
8e4c4d7c5c
+21
-13
@@ -24,7 +24,6 @@ import java.sql.Timestamp;
|
|||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import javax.sql.DataSource;
|
import javax.sql.DataSource;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@@ -82,10 +81,18 @@ public class GenericDataServiceImpl implements GenericDataService {
|
|||||||
final List<Object> columnValues = new ArrayList<>();
|
final List<Object> columnValues = new ArrayList<>();
|
||||||
for (int i = 0; i < rsmd.getColumnCount(); i++) {
|
for (int i = 0; i < rsmd.getColumnCount(); i++) {
|
||||||
final String columnName = rsmd.getColumnName(i + 1);
|
final String columnName = rsmd.getColumnName(i + 1);
|
||||||
final String columnValue = rs.getString(columnName);
|
final String colType = columnHeaders.get(i).getColumnType();
|
||||||
columnValues.add(columnValue);
|
if ("DATE".equalsIgnoreCase(colType)) {
|
||||||
|
java.sql.Date tmpDate = (java.sql.Date) rs.getObject(columnName);
|
||||||
|
columnValues.add(tmpDate != null ? tmpDate.toLocalDate() : null);
|
||||||
|
} else if ("TIMESTAMP WITHOUT TIME ZONE".equalsIgnoreCase(colType) // PostgreSQL
|
||||||
|
|| "DATETIME".equalsIgnoreCase(colType) || "TIMESTAMP".equalsIgnoreCase(colType)) {
|
||||||
|
Timestamp tmpDate = (Timestamp) rs.getObject(columnName);
|
||||||
|
columnValues.add(tmpDate != null ? tmpDate.toLocalDateTime() : null);
|
||||||
|
} else {
|
||||||
|
columnValues.add(rs.getObject(columnName));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final ResultsetRowData resultsetDataRow = ResultsetRowData.create(columnValues);
|
final ResultsetRowData resultsetDataRow = ResultsetRowData.create(columnValues);
|
||||||
resultsetDataRows.add(resultsetDataRow);
|
resultsetDataRows.add(resultsetDataRow);
|
||||||
}
|
}
|
||||||
@@ -167,19 +174,20 @@ public class GenericDataServiceImpl implements GenericDataService {
|
|||||||
}
|
}
|
||||||
currVal = row.get(j);
|
currVal = row.get(j);
|
||||||
if (currVal != null && currColType != null) {
|
if (currVal != null && currColType != null) {
|
||||||
if (currColType.equals("DECIMAL") || currColType.equals("INTEGER")) {
|
if (currColType.equalsIgnoreCase("DECIMAL") || currColType.equalsIgnoreCase("INTEGER")
|
||||||
|
|| currColType.equalsIgnoreCase("CODELOOKUP")) {
|
||||||
writer.append(currVal);
|
writer.append(currVal);
|
||||||
} else {
|
} else {
|
||||||
if (currColType.equals("DATE")) {
|
if (currColType.equalsIgnoreCase("DATE")) {
|
||||||
final LocalDate localDate = new java.sql.Date(((Date) currVal).getTime()).toLocalDate();
|
final LocalDate localDate = (LocalDate) currVal;
|
||||||
writer.append(format("[%d,%d,%d]", localDate.getYear(), localDate.getMonthValue(), localDate.getDayOfMonth()));
|
writer.append(format("[%d,%d,%d]", localDate.getYear(), localDate.getMonthValue(), localDate.getDayOfMonth()));
|
||||||
} else if (currColType.equals("DATETIME")) {
|
} else if (currColType.equalsIgnoreCase("DATETIME")) {
|
||||||
final LocalDateTime ldt = currVal instanceof Timestamp ? ((Timestamp) currVal).toLocalDateTime()
|
final LocalDateTime localDateTime = (LocalDateTime) currVal;
|
||||||
: (LocalDateTime) currVal;
|
writer.append(format("[%d,%d,%d,%d,%d,%d,%d]", localDateTime.getYear(), localDateTime.getMonthValue(),
|
||||||
writer.append(format("[%d,%d,%d,%d,%d,%d,%d]", ldt.getYear(), ldt.getMonthValue(), ldt.getDayOfMonth(),
|
localDateTime.getDayOfMonth(), localDateTime.getHour(), localDateTime.getMinute(),
|
||||||
ldt.getHour(), ldt.getMinute(), ldt.getSecond(), ldt.getNano()));
|
localDateTime.getSecond(), localDateTime.getNano()));
|
||||||
} else {
|
} else {
|
||||||
writer.append(doubleQuote + replace((String) currVal, doubleQuote, slashDoubleQuote) + doubleQuote);
|
writer.append(doubleQuote + replace(String.valueOf(currVal), doubleQuote, slashDoubleQuote) + doubleQuote);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
+46
-83
@@ -26,10 +26,10 @@ import com.google.gson.JsonObject;
|
|||||||
import com.google.gson.reflect.TypeToken;
|
import com.google.gson.reflect.TypeToken;
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import java.sql.Date;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.sql.Statement;
|
import java.sql.Statement;
|
||||||
import java.time.LocalDate;
|
import java.sql.Timestamp;
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@@ -1231,8 +1231,6 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ
|
|||||||
LOG.info("Update sql: {}", sql);
|
LOG.info("Update sql: {}", sql);
|
||||||
if (StringUtils.isNotBlank(sql)) {
|
if (StringUtils.isNotBlank(sql)) {
|
||||||
this.jdbcTemplate.update(sql);
|
this.jdbcTemplate.update(sql);
|
||||||
changes.put("locale", dataParams.get("locale"));
|
|
||||||
changes.put("dateFormat", "yyyy-MM-dd");
|
|
||||||
} else {
|
} else {
|
||||||
LOG.info("No Changes");
|
LOG.info("No Changes");
|
||||||
}
|
}
|
||||||
@@ -1484,13 +1482,18 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ
|
|||||||
for (int i = 0; i < rsmd.getColumnCount(); i++) {
|
for (int i = 0; i < rsmd.getColumnCount(); i++) {
|
||||||
final String columnName = rsmd.getColumnName(i + 1);
|
final String columnName = rsmd.getColumnName(i + 1);
|
||||||
final String colType = genericResultsetData.getColTypeOfColumnNamed(columnName);
|
final String colType = genericResultsetData.getColTypeOfColumnNamed(columnName);
|
||||||
if ("DECIMAL".equalsIgnoreCase(colType)) {
|
|
||||||
columnValues.add(rowSet.getBigDecimal(columnName));
|
if ("DATE".equalsIgnoreCase(colType)) {
|
||||||
} else if ("DATE".equalsIgnoreCase(colType) || ("TIMESTAMP WITHOUT TIME ZONE".equalsIgnoreCase(colType) // PostgreSQL
|
Date tmpDate = (Date) rowSet.getObject(columnName);
|
||||||
|| "DATETIME".equalsIgnoreCase(colType) || "TIMESTAMP".equalsIgnoreCase(colType))) {
|
columnValues.add(tmpDate != null ? tmpDate.toLocalDate() : null);
|
||||||
columnValues.add(rowSet.getObject(columnName));
|
} else if ("TIMESTAMP WITHOUT TIME ZONE".equalsIgnoreCase(colType) // PostgreSQL
|
||||||
|
|| "DATETIME".equalsIgnoreCase(colType) || "TIMESTAMP".equalsIgnoreCase(colType)) {
|
||||||
|
Object tmpDate = rowSet.getObject(columnName);
|
||||||
|
|
||||||
|
columnValues
|
||||||
|
.add(tmpDate != null ? tmpDate instanceof Timestamp ? ((Timestamp) tmpDate).toLocalDateTime() : tmpDate : null);
|
||||||
} else {
|
} else {
|
||||||
columnValues.add(rowSet.getString(columnName));
|
columnValues.add(rowSet.getObject(columnName));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1506,7 +1509,7 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ
|
|||||||
|
|
||||||
String applicationTableName = "";
|
String applicationTableName = "";
|
||||||
|
|
||||||
final SqlRowSet rowSet = jdbcTemplate.queryForRowSet(sql, new Object[] { datatable }); // NOSONAR
|
final SqlRowSet rowSet = jdbcTemplate.queryForRowSet(sql, datatable); // NOSONAR
|
||||||
if (rowSet.next()) {
|
if (rowSet.next()) {
|
||||||
applicationTableName = rowSet.getString("application_table_name");
|
applicationTableName = rowSet.getString("application_table_name");
|
||||||
} else {
|
} else {
|
||||||
@@ -1523,7 +1526,7 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ
|
|||||||
private String getAddSql(final List<ResultsetColumnHeaderData> columnHeaders, final String datatable, final String fkName,
|
private String getAddSql(final List<ResultsetColumnHeaderData> columnHeaders, final String datatable, final String fkName,
|
||||||
final Long appTableId, final Map<String, String> queryParams) {
|
final Long appTableId, final Map<String, String> queryParams) {
|
||||||
|
|
||||||
final Map<String, String> affectedColumns = getAffectedColumns(columnHeaders, queryParams, fkName);
|
final Map<String, Object> affectedColumns = getAffectedColumns(columnHeaders, queryParams, fkName);
|
||||||
|
|
||||||
String pValueWrite = "";
|
String pValueWrite = "";
|
||||||
String addSql = "";
|
String addSql = "";
|
||||||
@@ -1536,7 +1539,7 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ
|
|||||||
for (final ResultsetColumnHeaderData pColumnHeader : columnHeaders) {
|
for (final ResultsetColumnHeaderData pColumnHeader : columnHeaders) {
|
||||||
final String key = pColumnHeader.getColumnName();
|
final String key = pColumnHeader.getColumnName();
|
||||||
if (affectedColumns.containsKey(key)) {
|
if (affectedColumns.containsKey(key)) {
|
||||||
pValue = affectedColumns.get(key);
|
pValue = String.valueOf(affectedColumns.get(key));
|
||||||
if (StringUtils.isEmpty(pValue)) {
|
if (StringUtils.isEmpty(pValue)) {
|
||||||
pValueWrite = "null";
|
pValueWrite = "null";
|
||||||
} else {
|
} else {
|
||||||
@@ -1589,7 +1592,7 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ
|
|||||||
public String getAddSqlWithScore(final List<ResultsetColumnHeaderData> columnHeaders, final String datatable, final String fkName,
|
public String getAddSqlWithScore(final List<ResultsetColumnHeaderData> columnHeaders, final String datatable, final String fkName,
|
||||||
final Long appTableId, final Map<String, String> queryParams) {
|
final Long appTableId, final Map<String, String> queryParams) {
|
||||||
|
|
||||||
final Map<String, String> affectedColumns = getAffectedColumns(columnHeaders, queryParams, fkName);
|
final Map<String, Object> affectedColumns = getAffectedColumns(columnHeaders, queryParams, fkName);
|
||||||
|
|
||||||
String pValueWrite = "";
|
String pValueWrite = "";
|
||||||
String scoresId = " ";
|
String scoresId = " ";
|
||||||
@@ -1600,7 +1603,7 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ
|
|||||||
String columnName = "";
|
String columnName = "";
|
||||||
String pValue = null;
|
String pValue = null;
|
||||||
for (final String key : affectedColumns.keySet()) {
|
for (final String key : affectedColumns.keySet()) {
|
||||||
pValue = affectedColumns.get(key);
|
pValue = String.valueOf(affectedColumns.get(key));
|
||||||
|
|
||||||
if (StringUtils.isEmpty(pValue)) {
|
if (StringUtils.isEmpty(pValue)) {
|
||||||
pValueWrite = "null";
|
pValueWrite = "null";
|
||||||
@@ -1655,7 +1658,7 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ
|
|||||||
sql += ", ";
|
sql += ", ";
|
||||||
}
|
}
|
||||||
|
|
||||||
pValue = (String) changedColumns.get(key);
|
pValue = String.valueOf(changedColumns.get(key));
|
||||||
if (StringUtils.isEmpty(pValue)) {
|
if (StringUtils.isEmpty(pValue)) {
|
||||||
pValueWrite = "null";
|
pValueWrite = "null";
|
||||||
} else {
|
} else {
|
||||||
@@ -1688,13 +1691,12 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ
|
|||||||
private Map<String, Object> getAffectedAndChangedColumns(final GenericResultsetData grs, final Map<String, String> queryParams,
|
private Map<String, Object> getAffectedAndChangedColumns(final GenericResultsetData grs, final Map<String, String> queryParams,
|
||||||
final String fkName) {
|
final String fkName) {
|
||||||
|
|
||||||
final Map<String, String> affectedColumns = getAffectedColumns(grs.getColumnHeaders(), queryParams, fkName);
|
final Map<String, Object> affectedColumns = getAffectedColumns(grs.getColumnHeaders(), queryParams, fkName);
|
||||||
final Map<String, Object> affectedAndChangedColumns = new HashMap<>();
|
final Map<String, Object> affectedAndChangedColumns = new HashMap<>();
|
||||||
|
|
||||||
for (final String key : affectedColumns.keySet()) {
|
for (final String key : affectedColumns.keySet()) {
|
||||||
final String columnValue = affectedColumns.get(key);
|
final Object columnValue = affectedColumns.get(key);
|
||||||
final String colType = grs.getColTypeOfColumnNamed(key);
|
if (columnChanged(key, columnValue, grs)) {
|
||||||
if (columnChanged(key, columnValue, colType, grs)) {
|
|
||||||
affectedAndChangedColumns.put(key, columnValue);
|
affectedAndChangedColumns.put(key, columnValue);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1702,27 +1704,24 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ
|
|||||||
return affectedAndChangedColumns;
|
return affectedAndChangedColumns;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean columnChanged(final String key, final String keyValue, final String colType, final GenericResultsetData grs) {
|
private boolean columnChanged(final String key, final Object value, final GenericResultsetData grs) {
|
||||||
|
|
||||||
final List<Object> columnValues = grs.getData().get(0).getRow();
|
final List<Object> columnValues = grs.getData().get(0).getRow();
|
||||||
|
|
||||||
String columnValue = null;
|
Object columnValue = null;
|
||||||
for (int i = 0; i < grs.getColumnHeaders().size(); i++) {
|
for (int i = 0; i < grs.getColumnHeaders().size(); i++) {
|
||||||
|
|
||||||
if (key.equals(grs.getColumnHeaders().get(i).getColumnName())) {
|
if (key.equals(grs.getColumnHeaders().get(i).getColumnName())) {
|
||||||
columnValue = (String) columnValues.get(i);
|
columnValue = columnValues.get(i);
|
||||||
|
|
||||||
if (notTheSame(columnValue, keyValue, colType)) {
|
return notTheSame(columnValue, value);
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new PlatformDataIntegrityException("error.msg.invalid.columnName", "Parameter Column Name: " + key + " not found");
|
throw new PlatformDataIntegrityException("error.msg.invalid.columnName", "Parameter Column Name: " + key + " not found");
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map<String, String> getAffectedColumns(final List<ResultsetColumnHeaderData> columnHeaders,
|
public Map<String, Object> getAffectedColumns(final List<ResultsetColumnHeaderData> columnHeaders,
|
||||||
final Map<String, String> queryParams, final String keyFieldName) {
|
final Map<String, String> queryParams, final String keyFieldName) {
|
||||||
|
|
||||||
final String dateFormat = queryParams.get("dateFormat");
|
final String dateFormat = queryParams.get("dateFormat");
|
||||||
@@ -1735,11 +1734,12 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ
|
|||||||
final String underscore = "_";
|
final String underscore = "_";
|
||||||
final String space = " ";
|
final String space = " ";
|
||||||
String pValue = null;
|
String pValue = null;
|
||||||
|
Object validatedValue = null;
|
||||||
String queryParamColumnUnderscored;
|
String queryParamColumnUnderscored;
|
||||||
String columnHeaderUnderscored;
|
String columnHeaderUnderscored;
|
||||||
boolean notFound;
|
boolean notFound;
|
||||||
|
|
||||||
final Map<String, String> affectedColumns = new HashMap<>();
|
final Map<String, Object> affectedColumns = new HashMap<>();
|
||||||
final Set<String> keys = queryParams.keySet();
|
final Set<String> keys = queryParams.keySet();
|
||||||
for (final String key : keys) {
|
for (final String key : keys) {
|
||||||
// ignores id and foreign key fields
|
// ignores id and foreign key fields
|
||||||
@@ -1756,8 +1756,8 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ
|
|||||||
columnHeaderUnderscored = this.genericDataService.replace(columnHeader.getColumnName(), space, underscore);
|
columnHeaderUnderscored = this.genericDataService.replace(columnHeader.getColumnName(), space, underscore);
|
||||||
if (queryParamColumnUnderscored.equalsIgnoreCase(columnHeaderUnderscored)) {
|
if (queryParamColumnUnderscored.equalsIgnoreCase(columnHeaderUnderscored)) {
|
||||||
pValue = queryParams.get(key);
|
pValue = queryParams.get(key);
|
||||||
pValue = validateColumn(columnHeader, pValue, dateFormat, clientApplicationLocale);
|
validatedValue = validateColumn(columnHeader, pValue, dateFormat, clientApplicationLocale);
|
||||||
affectedColumns.put(columnHeader.getColumnName(), pValue);
|
affectedColumns.put(columnHeader.getColumnName(), validatedValue);
|
||||||
notFound = false;
|
notFound = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1771,7 +1771,7 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ
|
|||||||
return affectedColumns;
|
return affectedColumns;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String validateColumn(final ResultsetColumnHeaderData columnHeader, final String pValue, final String dateFormat,
|
private Object validateColumn(final ResultsetColumnHeaderData columnHeader, final String pValue, final String dateFormat,
|
||||||
final Locale clientApplicationLocale) {
|
final Locale clientApplicationLocale) {
|
||||||
|
|
||||||
String paramValue = pValue;
|
String paramValue = pValue;
|
||||||
@@ -1793,7 +1793,6 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (StringUtils.isNotEmpty(paramValue)) {
|
if (StringUtils.isNotEmpty(paramValue)) {
|
||||||
|
|
||||||
if (columnHeader.hasColumnValues()) {
|
if (columnHeader.hasColumnValues()) {
|
||||||
if (columnHeader.isCodeValueDisplayType()) {
|
if (columnHeader.isCodeValueDisplayType()) {
|
||||||
|
|
||||||
@@ -1819,7 +1818,7 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ
|
|||||||
dataValidationErrors);
|
dataValidationErrors);
|
||||||
}
|
}
|
||||||
|
|
||||||
return paramValue;
|
return codeLookup;
|
||||||
} else {
|
} else {
|
||||||
throw new PlatformDataIntegrityException("error.msg.invalid.columnType.", "Code: " + columnHeader.getColumnName()
|
throw new PlatformDataIntegrityException("error.msg.invalid.columnType.", "Code: " + columnHeader.getColumnName()
|
||||||
+ " - Invalid Type " + columnHeader.getColumnType() + " (neither varchar nor int)");
|
+ " - Invalid Type " + columnHeader.getColumnType() + " (neither varchar nor int)");
|
||||||
@@ -1827,35 +1826,13 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (columnHeader.isDateDisplayType()) {
|
if (columnHeader.isDateDisplayType()) {
|
||||||
final LocalDate tmpDate = JsonParserHelper.convertFrom(paramValue, columnHeader.getColumnName(), dateFormat,
|
return JsonParserHelper.convertFrom(paramValue, columnHeader.getColumnName(), dateFormat, clientApplicationLocale);
|
||||||
clientApplicationLocale);
|
|
||||||
if (tmpDate == null) {
|
|
||||||
paramValue = null;
|
|
||||||
} else {
|
|
||||||
paramValue = tmpDate.toString();
|
|
||||||
}
|
|
||||||
} else if (columnHeader.isDateTimeDisplayType()) {
|
} else if (columnHeader.isDateTimeDisplayType()) {
|
||||||
final LocalDateTime tmpDateTime = JsonParserHelper.convertDateTimeFrom(paramValue, columnHeader.getColumnName(), dateFormat,
|
return JsonParserHelper.convertDateTimeFrom(paramValue, columnHeader.getColumnName(), dateFormat, clientApplicationLocale);
|
||||||
clientApplicationLocale);
|
|
||||||
if (tmpDateTime == null) {
|
|
||||||
paramValue = null;
|
|
||||||
} else {
|
|
||||||
paramValue = tmpDateTime.toString();
|
|
||||||
}
|
|
||||||
} else if (columnHeader.isIntegerDisplayType()) {
|
} else if (columnHeader.isIntegerDisplayType()) {
|
||||||
final Integer tmpInt = this.helper.convertToInteger(paramValue, columnHeader.getColumnName(), clientApplicationLocale);
|
return this.helper.convertToInteger(paramValue, columnHeader.getColumnName(), clientApplicationLocale);
|
||||||
if (tmpInt == null) {
|
|
||||||
paramValue = null;
|
|
||||||
} else {
|
|
||||||
paramValue = tmpInt.toString();
|
|
||||||
}
|
|
||||||
} else if (columnHeader.isDecimalDisplayType()) {
|
} else if (columnHeader.isDecimalDisplayType()) {
|
||||||
final BigDecimal tmpDecimal = this.helper.convertFrom(paramValue, columnHeader.getColumnName(), clientApplicationLocale);
|
return this.helper.convertFrom(paramValue, columnHeader.getColumnName(), clientApplicationLocale);
|
||||||
if (tmpDecimal == null) {
|
|
||||||
paramValue = null;
|
|
||||||
} else {
|
|
||||||
paramValue = tmpDecimal.toString();
|
|
||||||
}
|
|
||||||
} else if (columnHeader.isBooleanDisplayType()) {
|
} else if (columnHeader.isBooleanDisplayType()) {
|
||||||
|
|
||||||
final Boolean tmpBoolean = BooleanUtils.toBooleanObject(paramValue);
|
final Boolean tmpBoolean = BooleanUtils.toBooleanObject(paramValue);
|
||||||
@@ -1870,7 +1847,7 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ
|
|||||||
throw new PlatformApiDataValidationException("validation.msg.validation.errors.exist", "Validation errors exist.",
|
throw new PlatformApiDataValidationException("validation.msg.validation.errors.exist", "Validation errors exist.",
|
||||||
dataValidationErrors);
|
dataValidationErrors);
|
||||||
}
|
}
|
||||||
paramValue = tmpBoolean.toString();
|
return tmpBoolean;
|
||||||
} else if (columnHeader.isString()) {
|
} else if (columnHeader.isString()) {
|
||||||
if (columnHeader.getColumnLength() > 0 && paramValue.length() > columnHeader.getColumnLength()) {
|
if (columnHeader.getColumnLength() > 0 && paramValue.length() > columnHeader.getColumnLength()) {
|
||||||
final ApiParameterError error = ApiParameterError.parameterError(
|
final ApiParameterError error = ApiParameterError.parameterError(
|
||||||
@@ -1884,7 +1861,6 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return paramValue;
|
return paramValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1911,31 +1887,18 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ
|
|||||||
return multiRow;
|
return multiRow;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean notTheSame(final String currValue, final String pValue, final String colType) {
|
private boolean notTheSame(final Object currValue, final Object pValue) {
|
||||||
if (StringUtils.isEmpty(currValue) && StringUtils.isEmpty(pValue)) {
|
if (currValue == null && pValue == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
} else if (currValue == null || pValue == null) {
|
||||||
|
|
||||||
if (StringUtils.isEmpty(currValue)) {
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
// Equals would fail if the scale is not the same
|
||||||
if (StringUtils.isEmpty(pValue)) {
|
if (currValue instanceof BigDecimal && pValue instanceof BigDecimal) {
|
||||||
return true;
|
return !(((BigDecimal) currValue).compareTo((BigDecimal) pValue) == 0);
|
||||||
|
} else {
|
||||||
|
return !currValue.equals(pValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ("DECIMAL".equalsIgnoreCase(colType)) {
|
|
||||||
final BigDecimal currentDecimal = BigDecimal.valueOf(Double.parseDouble(currValue));
|
|
||||||
final BigDecimal newDecimal = BigDecimal.valueOf(Double.parseDouble(pValue));
|
|
||||||
|
|
||||||
return currentDecimal.compareTo(newDecimal) != 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (currValue.equals(pValue)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+487
@@ -0,0 +1,487 @@
|
|||||||
|
/**
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.apache.fineract.integrationtests;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import io.restassured.builder.RequestSpecBuilder;
|
||||||
|
import io.restassured.builder.ResponseSpecBuilder;
|
||||||
|
import io.restassured.http.ContentType;
|
||||||
|
import io.restassured.specification.RequestSpecification;
|
||||||
|
import io.restassured.specification.ResponseSpecification;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import org.apache.fineract.integrationtests.common.ClientHelper;
|
||||||
|
import org.apache.fineract.integrationtests.common.Utils;
|
||||||
|
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||||
|
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||||
|
import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper;
|
||||||
|
import org.apache.fineract.integrationtests.common.system.CodeHelper;
|
||||||
|
import org.apache.fineract.integrationtests.common.system.DatatableHelper;
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
public class DatatableIntegrationTest {
|
||||||
|
|
||||||
|
private static final Logger LOG = LoggerFactory.getLogger(DatatableIntegrationTest.class);
|
||||||
|
|
||||||
|
private static final String CLIENT_APP_TABLE_NAME = "m_client";
|
||||||
|
private static final String LOAN_APP_TABLE_NAME = "m_loan";
|
||||||
|
|
||||||
|
private static final Float LP_PRINCIPAL = 10000.0f;
|
||||||
|
private static final String LP_REPAYMENTS = "5";
|
||||||
|
private static final String LP_REPAYMENT_PERIOD = "2";
|
||||||
|
private static final String LP_INTEREST_RATE = "1";
|
||||||
|
private static final String EXPECTED_DISBURSAL_DATE = "14 March 2011";
|
||||||
|
private static final String LOAN_APPLICATION_SUBMISSION_DATE = "13 March 2011";
|
||||||
|
private static final String LOAN_TERM_FREQUENCY = "10";
|
||||||
|
private static final String INDIVIDUAL_LOAN = "individual";
|
||||||
|
public static final String ACCOUNT_TYPE_INDIVIDUAL = "INDIVIDUAL";
|
||||||
|
public static final String MINIMUM_OPENING_BALANCE = "1000.0";
|
||||||
|
public static final String DEPOSIT_AMOUNT = "7000";
|
||||||
|
private RequestSpecification requestSpec;
|
||||||
|
private ResponseSpecification responseSpec;
|
||||||
|
private DatatableHelper datatableHelper;
|
||||||
|
|
||||||
|
private LoanTransactionHelper loanTransactionHelper;
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
public void setup() {
|
||||||
|
Utils.initializeRESTAssured();
|
||||||
|
this.requestSpec = new RequestSpecBuilder().setContentType(ContentType.JSON).build();
|
||||||
|
this.requestSpec.header("Authorization", "Basic " + Utils.loginIntoServerAndGetBase64EncodedAuthenticationKey());
|
||||||
|
this.responseSpec = new ResponseSpecBuilder().expectStatusCode(200).build();
|
||||||
|
this.datatableHelper = new DatatableHelper(this.requestSpec, this.responseSpec);
|
||||||
|
this.loanTransactionHelper = new LoanTransactionHelper(requestSpec, responseSpec);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void validateCreateReadDeleteDatatable() {
|
||||||
|
// Fetch / Create tst code
|
||||||
|
HashMap<String, Object> codeResponse = CodeHelper.getCodeByName(this.requestSpec, this.responseSpec, "TST_TST_TST");
|
||||||
|
|
||||||
|
Integer createdCodeId = (Integer) codeResponse.get("id");
|
||||||
|
Integer createdCodeValueId;
|
||||||
|
Integer createdCodeValueIdSecond;
|
||||||
|
if (createdCodeId == null) {
|
||||||
|
createdCodeId = (Integer) CodeHelper.createCode(this.requestSpec, this.responseSpec, "TST_TST_TST", "resourceId");
|
||||||
|
|
||||||
|
createdCodeValueId = CodeHelper.createCodeValue(this.requestSpec, this.responseSpec, createdCodeId,
|
||||||
|
Utils.randomStringGenerator("cv_", 8), 1);
|
||||||
|
createdCodeValueIdSecond = CodeHelper.createCodeValue(this.requestSpec, this.responseSpec, createdCodeId,
|
||||||
|
Utils.randomStringGenerator("cv_", 8), 2);
|
||||||
|
} else {
|
||||||
|
List<HashMap<String, Object>> codeValuesForCode = CodeHelper.getCodeValuesForCode(this.requestSpec, this.responseSpec,
|
||||||
|
createdCodeId, "");
|
||||||
|
createdCodeValueId = (Integer) codeValuesForCode.get(0).get("id");
|
||||||
|
createdCodeValueIdSecond = (Integer) codeValuesForCode.get(1).get("id");
|
||||||
|
}
|
||||||
|
|
||||||
|
// creating datatable for client entity
|
||||||
|
final HashMap<String, Object> columnMap = new HashMap<>();
|
||||||
|
final List<HashMap<String, Object>> datatableColumnsList = new ArrayList<>();
|
||||||
|
columnMap.put("datatableName", Utils.randomNameGenerator(CLIENT_APP_TABLE_NAME + "_", 5));
|
||||||
|
columnMap.put("apptableName", CLIENT_APP_TABLE_NAME);
|
||||||
|
columnMap.put("entitySubType", "PERSON");
|
||||||
|
columnMap.put("multiRow", false);
|
||||||
|
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);
|
||||||
|
columnMap.put("columns", datatableColumnsList);
|
||||||
|
String datatabelRequestJsonString = new Gson().toJson(columnMap);
|
||||||
|
LOG.info("map : {}", datatabelRequestJsonString);
|
||||||
|
|
||||||
|
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"));
|
||||||
|
this.datatableHelper = new DatatableHelper(this.requestSpec, this.responseSpec);
|
||||||
|
|
||||||
|
// creating client with datatables
|
||||||
|
final Integer clientID = ClientHelper.createClientAsPerson(requestSpec, responseSpec);
|
||||||
|
|
||||||
|
// creating new client datatable entry
|
||||||
|
final boolean genericResultSet = true;
|
||||||
|
|
||||||
|
final HashMap<String, Object> datatableEntryMap = new HashMap<>();
|
||||||
|
datatableEntryMap.put("itsABoolean", Utils.randomNumberGenerator(1) % 2 == 0);
|
||||||
|
datatableEntryMap.put("itsADate", Utils.randomDateGenerator("yyyy-MM-dd"));
|
||||||
|
datatableEntryMap.put("itsADatetime", Utils.randomDateTimeGenerator("yyyy-MM-dd"));
|
||||||
|
datatableEntryMap.put("itsADecimal", Utils.randomDecimalGenerator(4, 3));
|
||||||
|
datatableEntryMap.put("TST_TST_TST_cd_itsADropdown", createdCodeValueId);
|
||||||
|
datatableEntryMap.put("itsANumber", Utils.randomNumberGenerator(5));
|
||||||
|
datatableEntryMap.put("itsAString", Utils.randomStringGenerator("", 8));
|
||||||
|
datatableEntryMap.put("itsAText", Utils.randomStringGenerator("", 1000));
|
||||||
|
|
||||||
|
datatableEntryMap.put("locale", "en");
|
||||||
|
datatableEntryMap.put("dateFormat", "yyyy-MM-dd");
|
||||||
|
|
||||||
|
String datatabelEntryRequestJsonString = new Gson().toJson(datatableEntryMap);
|
||||||
|
LOG.info("map : {}", datatabelEntryRequestJsonString);
|
||||||
|
|
||||||
|
HashMap<String, Object> datatableEntryResponse = this.datatableHelper.createDatatableEntry(datatableName, clientID,
|
||||||
|
genericResultSet, datatabelEntryRequestJsonString);
|
||||||
|
assertNotNull(datatableEntryResponse.get("resourceId"), "ERROR IN CREATING THE ENTITY DATATABLE RECORD");
|
||||||
|
|
||||||
|
// Read the Datatable entry generated with genericResultSet in true (default)
|
||||||
|
final HashMap<String, Object> items = this.datatableHelper.readDatatableEntry(datatableName, clientID, genericResultSet,
|
||||||
|
(Integer) datatableEntryResponse.get("resourceId"), "");
|
||||||
|
assertNotNull(items);
|
||||||
|
assertEquals(1, ((List) items.get("data")).size());
|
||||||
|
|
||||||
|
assertEquals("client_id", ((Map) ((List) items.get("columnHeaders")).get(0)).get("columnName"));
|
||||||
|
assertEquals(clientID, ((List) ((Map) ((List) items.get("data")).get(0)).get("row")).get(0));
|
||||||
|
|
||||||
|
assertEquals("itsABoolean", ((Map) ((List) items.get("columnHeaders")).get(1)).get("columnName"));
|
||||||
|
assertEquals(datatableEntryMap.get("itsABoolean"), ((List) ((Map) ((List) items.get("data")).get(0)).get("row")).get(1));
|
||||||
|
|
||||||
|
assertEquals("itsADate", ((Map) ((List) items.get("columnHeaders")).get(2)).get("columnName"));
|
||||||
|
assertEquals(datatableEntryMap.get("itsADate"),
|
||||||
|
Utils.arrayDateToString((List) ((List) ((Map) ((List) items.get("data")).get(0)).get("row")).get(2)));
|
||||||
|
|
||||||
|
assertEquals("itsADatetime", ((Map) ((List) items.get("columnHeaders")).get(3)).get("columnName"));
|
||||||
|
assertEquals(datatableEntryMap.get("itsADatetime"),
|
||||||
|
Utils.arrayDateTimeToString((List) ((List) ((Map) ((List) items.get("data")).get(0)).get("row")).get(3)));
|
||||||
|
|
||||||
|
assertEquals("itsADecimal", ((Map) ((List) items.get("columnHeaders")).get(4)).get("columnName"));
|
||||||
|
assertEquals(datatableEntryMap.get("itsADecimal"), ((List) ((Map) ((List) items.get("data")).get(0)).get("row")).get(4));
|
||||||
|
|
||||||
|
assertEquals("TST_TST_TST_cd_itsADropdown", ((Map) ((List) items.get("columnHeaders")).get(5)).get("columnName"));
|
||||||
|
assertEquals(datatableEntryMap.get("TST_TST_TST_cd_itsADropdown"),
|
||||||
|
((List) ((Map) ((List) items.get("data")).get(0)).get("row")).get(5));
|
||||||
|
|
||||||
|
assertEquals("itsANumber", ((Map) ((List) items.get("columnHeaders")).get(6)).get("columnName"));
|
||||||
|
assertEquals(datatableEntryMap.get("itsANumber"), ((List) ((Map) ((List) items.get("data")).get(0)).get("row")).get(6));
|
||||||
|
|
||||||
|
assertEquals("itsAString", ((Map) ((List) items.get("columnHeaders")).get(7)).get("columnName"));
|
||||||
|
assertEquals(datatableEntryMap.get("itsAString"), ((List) ((Map) ((List) items.get("data")).get(0)).get("row")).get(7));
|
||||||
|
|
||||||
|
assertEquals("itsAText", ((Map) ((List) items.get("columnHeaders")).get(8)).get("columnName"));
|
||||||
|
assertEquals(datatableEntryMap.get("itsAText"), ((List) ((Map) ((List) items.get("data")).get(0)).get("row")).get(8));
|
||||||
|
|
||||||
|
// Read the Datatable entry generated with genericResultSet in false
|
||||||
|
List<HashMap<String, Object>> datatableEntryResponseNoGenericResult = this.datatableHelper.readDatatableEntry(datatableName,
|
||||||
|
clientID, !genericResultSet, (Integer) datatableEntryResponse.get("resourceId"), "");
|
||||||
|
assertNotNull(datatableEntryResponseNoGenericResult, "ERROR IN GETTING THE DATE VALUE FROM DATATABLE RECORD");
|
||||||
|
assertEquals(1, datatableEntryResponseNoGenericResult.size());
|
||||||
|
|
||||||
|
assertEquals(clientID, datatableEntryResponseNoGenericResult.get(0).get("client_id"));
|
||||||
|
assertEquals(datatableEntryMap.get("itsABoolean"),
|
||||||
|
Boolean.valueOf((String) datatableEntryResponseNoGenericResult.get(0).get("itsABoolean")));
|
||||||
|
assertEquals(datatableEntryMap.get("itsADate"),
|
||||||
|
Utils.arrayDateToString((List) datatableEntryResponseNoGenericResult.get(0).get("itsADate")));
|
||||||
|
assertEquals(datatableEntryMap.get("itsADecimal"), datatableEntryResponseNoGenericResult.get(0).get("itsADecimal"));
|
||||||
|
assertEquals(datatableEntryMap.get("itsADatetime"),
|
||||||
|
Utils.arrayDateTimeToString((List<Integer>) datatableEntryResponseNoGenericResult.get(0).get("itsADatetime")));
|
||||||
|
assertEquals(datatableEntryMap.get("TST_TST_TST_cd_itsADropdown"),
|
||||||
|
datatableEntryResponseNoGenericResult.get(0).get("TST_TST_TST_cd_itsADropdown"));
|
||||||
|
assertEquals(datatableEntryMap.get("itsANumber"), datatableEntryResponseNoGenericResult.get(0).get("itsANumber"));
|
||||||
|
assertEquals(datatableEntryMap.get("itsAString"), datatableEntryResponseNoGenericResult.get(0).get("itsAString"));
|
||||||
|
assertEquals(datatableEntryMap.get("itsAText"), datatableEntryResponseNoGenericResult.get(0).get("itsAText"));
|
||||||
|
|
||||||
|
// Update datatable entry
|
||||||
|
Boolean previousBoolean = (Boolean) datatableEntryMap.get("itsABoolean");
|
||||||
|
datatableEntryMap.put("itsABoolean", !previousBoolean);
|
||||||
|
datatableEntryMap.put("itsADate", Utils.randomDateGenerator("yyyy-MM-dd"));
|
||||||
|
datatableEntryMap.put("itsADatetime", Utils.randomDateTimeGenerator("yyyy-MM-dd"));
|
||||||
|
datatableEntryMap.put("itsADecimal", Utils.randomDecimalGenerator(4, 3));
|
||||||
|
datatableEntryMap.put("TST_TST_TST_cd_itsADropdown", null);
|
||||||
|
datatableEntryMap.put("itsANumber", Utils.randomNumberGenerator(5));
|
||||||
|
datatableEntryMap.put("itsAString", Utils.randomStringGenerator("", 8));
|
||||||
|
datatableEntryMap.put("itsAText", Utils.randomStringGenerator("", 1000));
|
||||||
|
|
||||||
|
datatableEntryMap.put("locale", "en");
|
||||||
|
datatableEntryMap.put("dateFormat", "yyyy-MM-dd");
|
||||||
|
|
||||||
|
datatabelEntryRequestJsonString = new Gson().toJson(datatableEntryMap);
|
||||||
|
LOG.info("map : {}", datatabelEntryRequestJsonString);
|
||||||
|
|
||||||
|
HashMap<String, Object> updatedDatatableEntryResponse = this.datatableHelper.updateDatatableEntry(datatableName, clientID, false,
|
||||||
|
datatabelEntryRequestJsonString);
|
||||||
|
|
||||||
|
assertEquals(clientID, updatedDatatableEntryResponse.get("clientId"));
|
||||||
|
|
||||||
|
assertEquals(datatableEntryMap.get("itsABoolean"), ((Map) updatedDatatableEntryResponse.get("changes")).get("itsABoolean"));
|
||||||
|
assertEquals(datatableEntryMap.get("itsADate"),
|
||||||
|
Utils.arrayDateToString((List) ((Map) updatedDatatableEntryResponse.get("changes")).get("itsADate")));
|
||||||
|
assertEquals(datatableEntryMap.get("itsADecimal"), ((Map) updatedDatatableEntryResponse.get("changes")).get("itsADecimal"));
|
||||||
|
assertEquals(datatableEntryMap.get("itsADatetime"),
|
||||||
|
Utils.arrayDateTimeToString((List<Integer>) ((Map) updatedDatatableEntryResponse.get("changes")).get("itsADatetime")));
|
||||||
|
assertEquals(datatableEntryMap.get("TST_TST_TST_cd_itsADropdown"),
|
||||||
|
((Map) updatedDatatableEntryResponse.get("changes")).get("TST_TST_TST_cd_itsADropdown"));
|
||||||
|
assertEquals(datatableEntryMap.get("itsANumber"), ((Map) updatedDatatableEntryResponse.get("changes")).get("itsANumber"));
|
||||||
|
assertEquals(datatableEntryMap.get("itsAString"), ((Map) updatedDatatableEntryResponse.get("changes")).get("itsAString"));
|
||||||
|
assertEquals(datatableEntryMap.get("itsAText"), ((Map) updatedDatatableEntryResponse.get("changes")).get("itsAText"));
|
||||||
|
|
||||||
|
// deleting datatable entries
|
||||||
|
Integer appTableId = this.datatableHelper.deleteDatatableEntries(datatableName, clientID, "clientId");
|
||||||
|
assertEquals(clientID, appTableId, "ERROR IN DELETING THE DATATABLE ENTRIES");
|
||||||
|
|
||||||
|
// deleting the datatable
|
||||||
|
String deletedDataTableName = this.datatableHelper.deleteDatatable(datatableName);
|
||||||
|
assertEquals(datatableName, deletedDataTableName, "ERROR IN DELETING THE DATATABLE");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void validateReadDatatableMultirow() {
|
||||||
|
// Fetch / Create tst code
|
||||||
|
HashMap<String, Object> codeResponse = CodeHelper.getCodeByName(this.requestSpec, this.responseSpec, "TST_TST_TST");
|
||||||
|
|
||||||
|
Integer createdCodeId = (Integer) codeResponse.get("id");
|
||||||
|
Integer createdCodeValueId;
|
||||||
|
Integer createdCodeValueIdSecond;
|
||||||
|
if (createdCodeId == null) {
|
||||||
|
createdCodeId = (Integer) CodeHelper.createCode(this.requestSpec, this.responseSpec, "TST_TST_TST", "resourceId");
|
||||||
|
|
||||||
|
createdCodeValueId = CodeHelper.createCodeValue(this.requestSpec, this.responseSpec, createdCodeId,
|
||||||
|
Utils.randomStringGenerator("cv_", 8), 1);
|
||||||
|
createdCodeValueIdSecond = CodeHelper.createCodeValue(this.requestSpec, this.responseSpec, createdCodeId,
|
||||||
|
Utils.randomStringGenerator("cv_", 8), 2);
|
||||||
|
} else {
|
||||||
|
List<HashMap<String, Object>> codeValuesForCode = CodeHelper.getCodeValuesForCode(this.requestSpec, this.responseSpec,
|
||||||
|
createdCodeId, "");
|
||||||
|
createdCodeValueId = (Integer) codeValuesForCode.get(0).get("id");
|
||||||
|
createdCodeValueIdSecond = (Integer) codeValuesForCode.get(1).get("id");
|
||||||
|
}
|
||||||
|
|
||||||
|
// creating datatable for client entity
|
||||||
|
final HashMap<String, Object> columnMap = new HashMap<>();
|
||||||
|
final List<HashMap<String, Object>> datatableColumnsList = new ArrayList<>();
|
||||||
|
columnMap.put("datatableName", Utils.randomNameGenerator(LOAN_APP_TABLE_NAME + "_", 5));
|
||||||
|
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", 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);
|
||||||
|
columnMap.put("columns", datatableColumnsList);
|
||||||
|
String datatabelRequestJsonString = new Gson().toJson(columnMap);
|
||||||
|
LOG.info("map : {}", datatabelRequestJsonString);
|
||||||
|
|
||||||
|
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"));
|
||||||
|
this.datatableHelper = new DatatableHelper(this.requestSpec, this.responseSpec);
|
||||||
|
|
||||||
|
// creating client with datatables
|
||||||
|
final Integer clientID = ClientHelper.createClientAsPerson(requestSpec, responseSpec);
|
||||||
|
final Integer loanProductID = createLoanProductWithPeriodicAccrualAccountingEnabled();
|
||||||
|
final Integer loanID = applyForLoanApplication(clientID, loanProductID);
|
||||||
|
|
||||||
|
// creating new client datatable entry
|
||||||
|
final boolean genericResultSet = true;
|
||||||
|
|
||||||
|
final HashMap<String, Object> datatableEntryMap = new HashMap<>();
|
||||||
|
datatableEntryMap.put("itsABoolean", Utils.randomNumberGenerator(1) % 2 == 0);
|
||||||
|
datatableEntryMap.put("itsADate", Utils.randomDateGenerator("yyyy-MM-dd"));
|
||||||
|
datatableEntryMap.put("itsADatetime", Utils.randomDateTimeGenerator("yyyy-MM-dd"));
|
||||||
|
datatableEntryMap.put("itsADecimal", Utils.randomDecimalGenerator(4, 3));
|
||||||
|
datatableEntryMap.put("TST_TST_TST_cd_itsADropdown", createdCodeValueId);
|
||||||
|
datatableEntryMap.put("itsANumber", Utils.randomNumberGenerator(5));
|
||||||
|
datatableEntryMap.put("itsAString", Utils.randomStringGenerator("", 8));
|
||||||
|
datatableEntryMap.put("itsAText", Utils.randomStringGenerator("", 1000));
|
||||||
|
|
||||||
|
datatableEntryMap.put("locale", "en");
|
||||||
|
datatableEntryMap.put("dateFormat", "yyyy-MM-dd");
|
||||||
|
|
||||||
|
String datatabelEntryRequestJsonString = new Gson().toJson(datatableEntryMap);
|
||||||
|
LOG.info("map : {}", datatabelEntryRequestJsonString);
|
||||||
|
|
||||||
|
HashMap<String, Object> datatableEntryResponseFirst = this.datatableHelper.createDatatableEntry(datatableName, loanID,
|
||||||
|
genericResultSet, datatabelEntryRequestJsonString);
|
||||||
|
HashMap<String, Object> datatableEntryResponseSecond = this.datatableHelper.createDatatableEntry(datatableName, loanID,
|
||||||
|
genericResultSet, datatabelEntryRequestJsonString);
|
||||||
|
assertNotNull(datatableEntryResponseFirst.get("resourceId"), "ERROR IN CREATING THE ENTITY DATATABLE RECORD");
|
||||||
|
assertNotNull(datatableEntryResponseSecond.get("resourceId"), "ERROR IN CREATING THE ENTITY DATATABLE RECORD");
|
||||||
|
|
||||||
|
// Read the Datatable entry generated with genericResultSet in true (default)
|
||||||
|
final HashMap<String, Object> items = this.datatableHelper.readDatatableEntry(datatableName, loanID, genericResultSet, null, "");
|
||||||
|
assertNotNull(items);
|
||||||
|
assertEquals(2, ((List) items.get("data")).size());
|
||||||
|
|
||||||
|
assertEquals("id", ((Map) ((List) items.get("columnHeaders")).get(0)).get("columnName"));
|
||||||
|
assertEquals(1, ((List) ((Map) ((List) items.get("data")).get(0)).get("row")).get(0));
|
||||||
|
assertEquals("loan_id", ((Map) ((List) items.get("columnHeaders")).get(1)).get("columnName"));
|
||||||
|
assertEquals(loanID, ((List) ((Map) ((List) items.get("data")).get(0)).get("row")).get(1));
|
||||||
|
assertEquals("itsABoolean", ((Map) ((List) items.get("columnHeaders")).get(2)).get("columnName"));
|
||||||
|
assertEquals(datatableEntryMap.get("itsABoolean"), ((List) ((Map) ((List) items.get("data")).get(0)).get("row")).get(2));
|
||||||
|
assertEquals("itsADate", ((Map) ((List) items.get("columnHeaders")).get(3)).get("columnName"));
|
||||||
|
assertEquals(datatableEntryMap.get("itsADate"),
|
||||||
|
Utils.arrayDateToString((List) ((List) ((Map) ((List) items.get("data")).get(0)).get("row")).get(3)));
|
||||||
|
assertEquals("itsADatetime", ((Map) ((List) items.get("columnHeaders")).get(4)).get("columnName"));
|
||||||
|
assertEquals(datatableEntryMap.get("itsADatetime"),
|
||||||
|
Utils.arrayDateTimeToString((List) ((List) ((Map) ((List) items.get("data")).get(0)).get("row")).get(4)));
|
||||||
|
assertEquals("itsADecimal", ((Map) ((List) items.get("columnHeaders")).get(5)).get("columnName"));
|
||||||
|
assertEquals(datatableEntryMap.get("itsADecimal"), ((List) ((Map) ((List) items.get("data")).get(0)).get("row")).get(5));
|
||||||
|
assertEquals("TST_TST_TST_cd_itsADropdown", ((Map) ((List) items.get("columnHeaders")).get(6)).get("columnName"));
|
||||||
|
assertEquals(datatableEntryMap.get("TST_TST_TST_cd_itsADropdown"),
|
||||||
|
((List) ((Map) ((List) items.get("data")).get(0)).get("row")).get(6));
|
||||||
|
assertEquals("itsANumber", ((Map) ((List) items.get("columnHeaders")).get(7)).get("columnName"));
|
||||||
|
assertEquals(datatableEntryMap.get("itsANumber"), ((List) ((Map) ((List) items.get("data")).get(0)).get("row")).get(7));
|
||||||
|
assertEquals("itsAString", ((Map) ((List) items.get("columnHeaders")).get(8)).get("columnName"));
|
||||||
|
assertEquals(datatableEntryMap.get("itsAString"), ((List) ((Map) ((List) items.get("data")).get(0)).get("row")).get(8));
|
||||||
|
assertEquals("itsAText", ((Map) ((List) items.get("columnHeaders")).get(9)).get("columnName"));
|
||||||
|
assertEquals(datatableEntryMap.get("itsAText"), ((List) ((Map) ((List) items.get("data")).get(0)).get("row")).get(9));
|
||||||
|
|
||||||
|
assertEquals(2, ((List) ((Map) ((List) items.get("data")).get(1)).get("row")).get(0));
|
||||||
|
assertEquals(loanID, ((List) ((Map) ((List) items.get("data")).get(1)).get("row")).get(1));
|
||||||
|
assertEquals(datatableEntryMap.get("itsABoolean"), ((List) ((Map) ((List) items.get("data")).get(1)).get("row")).get(2));
|
||||||
|
assertEquals(datatableEntryMap.get("itsADate"),
|
||||||
|
Utils.arrayDateToString((List) ((List) ((Map) ((List) items.get("data")).get(1)).get("row")).get(3)));
|
||||||
|
assertEquals(datatableEntryMap.get("itsADatetime"),
|
||||||
|
Utils.arrayDateTimeToString((List) ((List) ((Map) ((List) items.get("data")).get(1)).get("row")).get(4)));
|
||||||
|
assertEquals(datatableEntryMap.get("itsADecimal"), ((List) ((Map) ((List) items.get("data")).get(1)).get("row")).get(5));
|
||||||
|
assertEquals(datatableEntryMap.get("TST_TST_TST_cd_itsADropdown"),
|
||||||
|
((List) ((Map) ((List) items.get("data")).get(1)).get("row")).get(6));
|
||||||
|
assertEquals(datatableEntryMap.get("itsANumber"), ((List) ((Map) ((List) items.get("data")).get(1)).get("row")).get(7));
|
||||||
|
assertEquals(datatableEntryMap.get("itsAString"), ((List) ((Map) ((List) items.get("data")).get(1)).get("row")).get(8));
|
||||||
|
assertEquals(datatableEntryMap.get("itsAText"), ((List) ((Map) ((List) items.get("data")).get(1)).get("row")).get(9));
|
||||||
|
|
||||||
|
// Read the Datatable entry generated with genericResultSet in false
|
||||||
|
List<HashMap<String, Object>> datatableEntryResponseNoGenericResult = this.datatableHelper.readDatatableEntry(datatableName, loanID,
|
||||||
|
!genericResultSet, (Integer) datatableEntryResponseFirst.get("resourceId"), "");
|
||||||
|
assertNotNull(datatableEntryResponseNoGenericResult, "ERROR IN GETTING THE DATE VALUE FROM DATATABLE RECORD");
|
||||||
|
assertEquals(1, datatableEntryResponseNoGenericResult.size());
|
||||||
|
|
||||||
|
assertEquals(loanID, datatableEntryResponseNoGenericResult.get(0).get("loan_id"));
|
||||||
|
assertEquals(datatableEntryMap.get("itsABoolean"),
|
||||||
|
Boolean.valueOf((String) datatableEntryResponseNoGenericResult.get(0).get("itsABoolean")));
|
||||||
|
assertEquals(datatableEntryMap.get("itsADate"),
|
||||||
|
Utils.arrayDateToString((List) datatableEntryResponseNoGenericResult.get(0).get("itsADate")));
|
||||||
|
assertEquals(datatableEntryMap.get("itsADecimal"), datatableEntryResponseNoGenericResult.get(0).get("itsADecimal"));
|
||||||
|
assertEquals(datatableEntryMap.get("itsADatetime"),
|
||||||
|
Utils.arrayDateTimeToString((List<Integer>) datatableEntryResponseNoGenericResult.get(0).get("itsADatetime")));
|
||||||
|
assertEquals(datatableEntryMap.get("TST_TST_TST_cd_itsADropdown"),
|
||||||
|
datatableEntryResponseNoGenericResult.get(0).get("TST_TST_TST_cd_itsADropdown"));
|
||||||
|
assertEquals(datatableEntryMap.get("itsANumber"), datatableEntryResponseNoGenericResult.get(0).get("itsANumber"));
|
||||||
|
assertEquals(datatableEntryMap.get("itsAString"), datatableEntryResponseNoGenericResult.get(0).get("itsAString"));
|
||||||
|
assertEquals(datatableEntryMap.get("itsAText"), datatableEntryResponseNoGenericResult.get(0).get("itsAText"));
|
||||||
|
|
||||||
|
// Update datatable entry
|
||||||
|
|
||||||
|
Boolean previousBoolean = (Boolean) datatableEntryMap.get("itsABoolean");
|
||||||
|
|
||||||
|
datatableEntryMap.put("itsABoolean", !previousBoolean);
|
||||||
|
datatableEntryMap.put("itsADate", Utils.randomDateGenerator("yyyy-MM-dd"));
|
||||||
|
datatableEntryMap.put("itsADatetime", Utils.randomDateTimeGenerator("yyyy-MM-dd"));
|
||||||
|
datatableEntryMap.put("itsADecimal", Utils.randomDecimalGenerator(4, 3));
|
||||||
|
datatableEntryMap.put("TST_TST_TST_cd_itsADropdown", createdCodeValueIdSecond);
|
||||||
|
datatableEntryMap.put("itsANumber", Utils.randomNumberGenerator(5));
|
||||||
|
datatableEntryMap.put("itsAString", Utils.randomStringGenerator("", 8));
|
||||||
|
datatableEntryMap.put("itsAText", Utils.randomStringGenerator("", 1000));
|
||||||
|
|
||||||
|
datatableEntryMap.put("locale", "en");
|
||||||
|
datatableEntryMap.put("dateFormat", "yyyy-MM-dd");
|
||||||
|
|
||||||
|
datatabelEntryRequestJsonString = new Gson().toJson(datatableEntryMap);
|
||||||
|
LOG.info("map : {}", datatabelEntryRequestJsonString);
|
||||||
|
|
||||||
|
HashMap<String, Object> updatedDatatableEntryResponse = this.datatableHelper.updateDatatableEntry(datatableName, loanID, 1, false,
|
||||||
|
datatabelEntryRequestJsonString);
|
||||||
|
|
||||||
|
assertEquals(loanID, updatedDatatableEntryResponse.get("loanId"));
|
||||||
|
|
||||||
|
assertEquals(datatableEntryMap.get("itsABoolean"), ((Map) updatedDatatableEntryResponse.get("changes")).get("itsABoolean"));
|
||||||
|
assertEquals(datatableEntryMap.get("itsADate"),
|
||||||
|
Utils.arrayDateToString((List) ((Map) updatedDatatableEntryResponse.get("changes")).get("itsADate")));
|
||||||
|
assertEquals(datatableEntryMap.get("itsADecimal"), ((Map) updatedDatatableEntryResponse.get("changes")).get("itsADecimal"));
|
||||||
|
assertEquals(datatableEntryMap.get("itsADatetime"),
|
||||||
|
Utils.arrayDateTimeToString((List<Integer>) ((Map) updatedDatatableEntryResponse.get("changes")).get("itsADatetime")));
|
||||||
|
assertEquals(datatableEntryMap.get("TST_TST_TST_cd_itsADropdown"),
|
||||||
|
((Map) updatedDatatableEntryResponse.get("changes")).get("TST_TST_TST_cd_itsADropdown"));
|
||||||
|
assertEquals(datatableEntryMap.get("itsANumber"), ((Map) updatedDatatableEntryResponse.get("changes")).get("itsANumber"));
|
||||||
|
assertEquals(datatableEntryMap.get("itsAString"), ((Map) updatedDatatableEntryResponse.get("changes")).get("itsAString"));
|
||||||
|
assertEquals(datatableEntryMap.get("itsAText"), ((Map) updatedDatatableEntryResponse.get("changes")).get("itsAText"));
|
||||||
|
|
||||||
|
updatedDatatableEntryResponse = this.datatableHelper.updateDatatableEntry(datatableName, loanID, 2, false,
|
||||||
|
datatabelEntryRequestJsonString);
|
||||||
|
|
||||||
|
assertEquals(loanID, updatedDatatableEntryResponse.get("loanId"));
|
||||||
|
|
||||||
|
assertEquals(datatableEntryMap.get("itsABoolean"), ((Map) updatedDatatableEntryResponse.get("changes")).get("itsABoolean"));
|
||||||
|
assertEquals(datatableEntryMap.get("itsADate"),
|
||||||
|
Utils.arrayDateToString((List) ((Map) updatedDatatableEntryResponse.get("changes")).get("itsADate")));
|
||||||
|
assertEquals(datatableEntryMap.get("itsADecimal"), ((Map) updatedDatatableEntryResponse.get("changes")).get("itsADecimal"));
|
||||||
|
assertEquals(datatableEntryMap.get("itsADatetime"),
|
||||||
|
Utils.arrayDateTimeToString((List<Integer>) ((Map) updatedDatatableEntryResponse.get("changes")).get("itsADatetime")));
|
||||||
|
assertEquals(datatableEntryMap.get("TST_TST_TST_cd_itsADropdown"),
|
||||||
|
((Map) updatedDatatableEntryResponse.get("changes")).get("TST_TST_TST_cd_itsADropdown"));
|
||||||
|
assertEquals(datatableEntryMap.get("itsANumber"), ((Map) updatedDatatableEntryResponse.get("changes")).get("itsANumber"));
|
||||||
|
assertEquals(datatableEntryMap.get("itsAString"), ((Map) updatedDatatableEntryResponse.get("changes")).get("itsAString"));
|
||||||
|
assertEquals(datatableEntryMap.get("itsAText"), ((Map) updatedDatatableEntryResponse.get("changes")).get("itsAText"));
|
||||||
|
|
||||||
|
// deleting datatable entries
|
||||||
|
Integer appTableId = this.datatableHelper.deleteDatatableEntries(datatableName, loanID, "loanId");
|
||||||
|
assertEquals(loanID, appTableId, "ERROR IN DELETING THE DATATABLE ENTRIES");
|
||||||
|
|
||||||
|
// deleting the datatable
|
||||||
|
String deletedDataTableName = this.datatableHelper.deleteDatatable(datatableName);
|
||||||
|
assertEquals(datatableName, deletedDataTableName, "ERROR IN DELETING THE DATATABLE");
|
||||||
|
}
|
||||||
|
|
||||||
|
private Integer applyForLoanApplication(final Integer clientID, final Integer loanProductID) {
|
||||||
|
LOG.info("--------------------------------APPLYING FOR LOAN APPLICATION--------------------------------");
|
||||||
|
final String loanApplicationJSON = new LoanApplicationTestBuilder().withPrincipal(LP_PRINCIPAL.toString())
|
||||||
|
.withLoanTermFrequency(LOAN_TERM_FREQUENCY).withLoanTermFrequencyAsMonths().withNumberOfRepayments(LP_REPAYMENTS)
|
||||||
|
.withRepaymentEveryAfter(LP_REPAYMENT_PERIOD).withRepaymentFrequencyTypeAsMonths()
|
||||||
|
.withInterestRatePerPeriod(LP_INTEREST_RATE).withInterestTypeAsFlatBalance().withAmortizationTypeAsEqualPrincipalPayments()
|
||||||
|
.withInterestCalculationPeriodTypeSameAsRepaymentPeriod().withExpectedDisbursementDate(EXPECTED_DISBURSAL_DATE)
|
||||||
|
.withSubmittedOnDate(LOAN_APPLICATION_SUBMISSION_DATE).withLoanType(INDIVIDUAL_LOAN)
|
||||||
|
.build(clientID.toString(), loanProductID.toString(), null);
|
||||||
|
return this.loanTransactionHelper.getLoanId(loanApplicationJSON);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Integer createLoanProductWithPeriodicAccrualAccountingEnabled() {
|
||||||
|
LOG.info("------------------------------CREATING NEW LOAN PRODUCT ---------------------------------------");
|
||||||
|
final String loanProductJSON = new LoanProductTestBuilder().withPrincipal(LP_PRINCIPAL.toString()).withRepaymentTypeAsMonth()
|
||||||
|
.withRepaymentAfterEvery(LP_REPAYMENT_PERIOD).withNumberOfRepayments(LP_REPAYMENTS).withRepaymentTypeAsMonth()
|
||||||
|
.withinterestRatePerPeriod(LP_INTEREST_RATE).withInterestRateFrequencyTypeAsMonths()
|
||||||
|
.withAmortizationTypeAsEqualPrincipalPayment().withInterestTypeAsFlat().withAccountingRuleAsNone().withDaysInMonth("30")
|
||||||
|
.withDaysInYear("365").build(null);
|
||||||
|
return this.loanTransactionHelper.getLoanProductId(loanProductJSON);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
+1
-1
@@ -180,7 +180,7 @@ public class RepaymentWithPostDatedChecksTest {
|
|||||||
map.put("name", "AMANA BANK");
|
map.put("name", "AMANA BANK");
|
||||||
map.put("amount", amount.toString());
|
map.put("amount", amount.toString());
|
||||||
map.put("accountNo", "900400500621");
|
map.put("accountNo", "900400500621");
|
||||||
map.put("checkNo", Utils.randomNumberGenerator(12).toString());
|
map.put("checkNo", Utils.randomNumberGenerator(9).toString());
|
||||||
|
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
|||||||
+93
-15
@@ -39,15 +39,18 @@ import java.text.DateFormat;
|
|||||||
import java.text.ParseException;
|
import java.text.ParseException;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
import java.time.ZoneId;
|
import java.time.ZoneId;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.time.format.DateTimeFormatterBuilder;
|
import java.time.format.DateTimeFormatterBuilder;
|
||||||
|
import java.time.temporal.ChronoField;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Random;
|
||||||
import java.util.TimeZone;
|
import java.util.TimeZone;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.http.conn.HttpHostConnectException;
|
import org.apache.http.conn.HttpHostConnectException;
|
||||||
@@ -61,27 +64,25 @@ import org.slf4j.LoggerFactory;
|
|||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public final class Utils {
|
public final class Utils {
|
||||||
|
|
||||||
private Utils() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private static final Logger LOG = LoggerFactory.getLogger(Utils.class);
|
|
||||||
private static final SecureRandom random = new SecureRandom();
|
|
||||||
private static final Gson gson = new Gson();
|
|
||||||
|
|
||||||
public static final String TENANT_PARAM_NAME = "tenantIdentifier";
|
public static final String TENANT_PARAM_NAME = "tenantIdentifier";
|
||||||
public static final String DEFAULT_TENANT = "default";
|
public static final String DEFAULT_TENANT = "default";
|
||||||
public static final String TENANT_IDENTIFIER = TENANT_PARAM_NAME + '=' + DEFAULT_TENANT;
|
public static final String TENANT_IDENTIFIER = TENANT_PARAM_NAME + '=' + DEFAULT_TENANT;
|
||||||
|
|
||||||
public static final String TENANT_TIME_ZONE = "Asia/Kolkata";
|
|
||||||
|
|
||||||
private static final String HEALTH_URL = "/fineract-provider/actuator/health";
|
|
||||||
private static final String LOGIN_URL = "/fineract-provider/api/v1/authentication?" + TENANT_IDENTIFIER;
|
private static final String LOGIN_URL = "/fineract-provider/api/v1/authentication?" + TENANT_IDENTIFIER;
|
||||||
|
public static final String TENANT_TIME_ZONE = "Asia/Kolkata";
|
||||||
public static final String DATE_FORMAT = "dd MMMM yyyy";
|
public static final String DATE_FORMAT = "dd MMMM yyyy";
|
||||||
public static final String DATE_TIME_FORMAT = "dd MMMM yyyy HH:mm";
|
public static final String DATE_TIME_FORMAT = "dd MMMM yyyy HH:mm";
|
||||||
public static final DateTimeFormatter dateFormatter = new DateTimeFormatterBuilder().appendPattern(DATE_FORMAT).toFormatter();
|
public static final DateTimeFormatter dateFormatter = new DateTimeFormatterBuilder().appendPattern(DATE_FORMAT).toFormatter();
|
||||||
public static final DateTimeFormatter dateTimeFormatter = new DateTimeFormatterBuilder().appendPattern(DATE_TIME_FORMAT).toFormatter();
|
public static final DateTimeFormatter dateTimeFormatter = new DateTimeFormatterBuilder().appendPattern(DATE_TIME_FORMAT).toFormatter();
|
||||||
|
private static final Logger LOG = LoggerFactory.getLogger(Utils.class);
|
||||||
|
private static final SecureRandom random = new SecureRandom();
|
||||||
|
private static final Gson gson = new Gson();
|
||||||
|
private static final String HEALTH_URL = "/fineract-provider/actuator/health";
|
||||||
|
|
||||||
|
private static final Random r = new Random();
|
||||||
|
|
||||||
|
private Utils() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public static void initializeRESTAssured() {
|
public static void initializeRESTAssured() {
|
||||||
RestAssured.baseURI = "https://localhost";
|
RestAssured.baseURI = "https://localhost";
|
||||||
@@ -270,7 +271,7 @@ public final class Utils {
|
|||||||
|
|
||||||
@SuppressFBWarnings(value = {
|
@SuppressFBWarnings(value = {
|
||||||
"DMI_RANDOM_USED_ONLY_ONCE" }, justification = "False positive for random object created and used only once")
|
"DMI_RANDOM_USED_ONLY_ONCE" }, justification = "False positive for random object created and used only once")
|
||||||
public static Long randomNumberGenerator(final int expectedLength) {
|
public static Integer randomNumberGenerator(final int expectedLength) {
|
||||||
final String source = "1234567890";
|
final String source = "1234567890";
|
||||||
final int lengthOfSource = source.length();
|
final int lengthOfSource = source.length();
|
||||||
|
|
||||||
@@ -278,7 +279,22 @@ public final class Utils {
|
|||||||
for (int i = 0; i < expectedLength; i++) {
|
for (int i = 0; i < expectedLength; i++) {
|
||||||
stringBuilder.append(source.charAt(random.nextInt(lengthOfSource)));
|
stringBuilder.append(source.charAt(random.nextInt(lengthOfSource)));
|
||||||
}
|
}
|
||||||
return Long.parseLong(stringBuilder.toString());
|
return Integer.parseInt(stringBuilder.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Float randomDecimalGenerator(final int expectedWholeLength, final int expectedFractionLength) {
|
||||||
|
final String source = "1234567890";
|
||||||
|
final int lengthOfSource = source.length();
|
||||||
|
|
||||||
|
StringBuilder stringBuilder = new StringBuilder(expectedWholeLength + expectedFractionLength + 1);
|
||||||
|
for (int i = 0; i < expectedWholeLength; i++) {
|
||||||
|
stringBuilder.append(source.charAt(random.nextInt(lengthOfSource)));
|
||||||
|
}
|
||||||
|
stringBuilder.append(".");
|
||||||
|
for (int i = 0; i < expectedFractionLength; i++) {
|
||||||
|
stringBuilder.append(source.charAt(random.nextInt(lengthOfSource)));
|
||||||
|
}
|
||||||
|
return Float.parseFloat(stringBuilder.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String convertDateToURLFormat(final Calendar dateToBeConvert) {
|
public static String convertDateToURLFormat(final Calendar dateToBeConvert) {
|
||||||
@@ -343,4 +359,66 @@ public final class Utils {
|
|||||||
return "{}";
|
return "{}";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String randomDateGenerator(String dateFormat) {
|
||||||
|
DateTimeFormatter dateTimeFormatterBuilder = new DateTimeFormatterBuilder().parseCaseInsensitive().parseLenient()
|
||||||
|
.appendPattern(dateFormat).optionalStart().appendPattern(" HH:mm:ss").optionalEnd()
|
||||||
|
.parseDefaulting(ChronoField.HOUR_OF_DAY, 0).parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
|
||||||
|
.parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0).toFormatter();
|
||||||
|
LocalDate localDate = LocalDate.of(getYear(), getMonth(), getDay());
|
||||||
|
return dateTimeFormatterBuilder.format(localDate);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String randomDateTimeGenerator(String dateFormat) {
|
||||||
|
DateTimeFormatter dateTimeFormatterBuilder = new DateTimeFormatterBuilder().parseCaseInsensitive().parseLenient()
|
||||||
|
.appendPattern(dateFormat).optionalStart().appendPattern(" HH:mm:ss").optionalEnd()
|
||||||
|
.parseDefaulting(ChronoField.HOUR_OF_DAY, 0).parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
|
||||||
|
.parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0).toFormatter();
|
||||||
|
LocalDateTime localDate = LocalDateTime.of(getYear(), getMonth(), getDay(), getHour(), getMinute(), getSecond());
|
||||||
|
return dateTimeFormatterBuilder.format(localDate);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int getYear() {
|
||||||
|
return 1000 + r.nextInt(1001);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int getMonth() {
|
||||||
|
return 10 + r.nextInt(3);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int getDay() {
|
||||||
|
return 10 + r.nextInt(16);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int getHour() {
|
||||||
|
return 10 + r.nextInt(14);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int getMinute() {
|
||||||
|
return 10 + r.nextInt(50);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int getSecond() {
|
||||||
|
return 10 + r.nextInt(50);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String arrayDateToString(List intArray) {
|
||||||
|
String[] strArray = (String[]) intArray.stream().map(String::valueOf).toArray(String[]::new);
|
||||||
|
return String.join("-", strArray);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String arrayDateTimeToString(List<Integer> integerList) {
|
||||||
|
StringBuilder stringBuilder = new StringBuilder();
|
||||||
|
for (int i = 0; i < 6; i++) {
|
||||||
|
if (i < 2) {
|
||||||
|
stringBuilder.append(integerList.get(i)).append("-");
|
||||||
|
} else if (i == 2) {
|
||||||
|
stringBuilder.append(integerList.get(i)).append(" ");
|
||||||
|
} else if (i == 3) {
|
||||||
|
stringBuilder.append(integerList.get(i));
|
||||||
|
} else {
|
||||||
|
stringBuilder.append(":").append(integerList.get(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return stringBuilder.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+61
-8
@@ -29,6 +29,7 @@ import java.util.Calendar;
|
|||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
import org.apache.fineract.integrationtests.common.Utils;
|
import org.apache.fineract.integrationtests.common.Utils;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@@ -46,11 +47,34 @@ public class DatatableHelper {
|
|||||||
this.responseSpec = responseSpec;
|
this.responseSpec = responseSpec;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public <T> T createDatatable(final String json, final String jsonAttributeToGetBack) {
|
||||||
|
return Utils.performServerPost(this.requestSpec, this.responseSpec, DATATABLE_URL + "?" + Utils.TENANT_IDENTIFIER, json,
|
||||||
|
jsonAttributeToGetBack);
|
||||||
|
}
|
||||||
|
|
||||||
public String createDatatable(final String apptableName, final boolean multiRow) {
|
public String createDatatable(final String apptableName, final boolean multiRow) {
|
||||||
return Utils.performServerPost(this.requestSpec, this.responseSpec, DATATABLE_URL + "?" + Utils.TENANT_IDENTIFIER,
|
return Utils.performServerPost(this.requestSpec, this.responseSpec, DATATABLE_URL + "?" + Utils.TENANT_IDENTIFIER,
|
||||||
getTestDatatableAsJSON(apptableName, multiRow), "resourceIdentifier");
|
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 <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 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(
|
||||||
@@ -64,13 +88,13 @@ public class DatatableHelper {
|
|||||||
+ "?genericResultSet=" + String.valueOf(genericResultset) + "&" + Utils.TENANT_IDENTIFIER);
|
+ "?genericResultSet=" + String.valueOf(genericResultset) + "&" + Utils.TENANT_IDENTIFIER);
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<String> readDatatableEntry(final String datatableName, final Integer resourceId, final boolean genericResultset,
|
public <T> T readDatatableEntry(final String datatableName, final Integer resourceId, final boolean genericResultset,
|
||||||
final Integer datatableResourceId, final String jsonAttributeToGetBack) {
|
final Integer datatableResourceId, final String jsonAttributeToGetBack) {
|
||||||
if (datatableResourceId == null) {
|
if (datatableResourceId == null) {
|
||||||
return Utils.performServerGetList(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, jsonAttributeToGetBack);
|
+ "?genericResultSet=" + String.valueOf(genericResultset) + "&" + Utils.TENANT_IDENTIFIER, jsonAttributeToGetBack);
|
||||||
} else {
|
} else {
|
||||||
return Utils.performServerGetList(
|
return Utils.performServerGet(
|
||||||
this.requestSpec, this.responseSpec, DATATABLE_URL + "/" + datatableName + "/" + resourceId + "/" + datatableResourceId
|
this.requestSpec, this.responseSpec, DATATABLE_URL + "/" + datatableName + "/" + resourceId + "/" + datatableResourceId
|
||||||
+ "?genericResultSet=" + String.valueOf(genericResultset) + "&" + Utils.TENANT_IDENTIFIER,
|
+ "?genericResultSet=" + String.valueOf(genericResultset) + "&" + Utils.TENANT_IDENTIFIER,
|
||||||
jsonAttributeToGetBack);
|
jsonAttributeToGetBack);
|
||||||
@@ -104,6 +128,32 @@ public class DatatableHelper {
|
|||||||
assertEquals(generatedDatatableName, responseRegisteredTableName, "ERROR IN CREATING THE DATATABLE");
|
assertEquals(generatedDatatableName, responseRegisteredTableName, "ERROR IN CREATING THE DATATABLE");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String getTestDatatableAsJSON(final String apptableName, final String datatableName, final String codeName,
|
||||||
|
final boolean multiRow) {
|
||||||
|
final HashMap<String, Object> map = new HashMap<>();
|
||||||
|
final List<HashMap<String, Object>> datatableColumnsList = new ArrayList<>();
|
||||||
|
map.put("datatableName", Objects.requireNonNullElseGet(datatableName, () -> Utils.randomNameGenerator(apptableName + "_", 5)));
|
||||||
|
map.put("apptableName", apptableName);
|
||||||
|
if ("m_client".equalsIgnoreCase(apptableName)) {
|
||||||
|
map.put("entitySubType", "PERSON");
|
||||||
|
} else {
|
||||||
|
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);
|
||||||
|
map.put("columns", datatableColumnsList);
|
||||||
|
String requestJsonString = new Gson().toJson(map);
|
||||||
|
LOG.info("map : {}", requestJsonString);
|
||||||
|
return requestJsonString;
|
||||||
|
}
|
||||||
|
|
||||||
public static String getTestDatatableAsJSON(final String apptableName, final boolean multiRow) {
|
public static String getTestDatatableAsJSON(final String apptableName, final boolean multiRow) {
|
||||||
final HashMap<String, Object> map = new HashMap<>();
|
final HashMap<String, Object> map = new HashMap<>();
|
||||||
final List<HashMap<String, Object>> datatableColumnsList = new ArrayList<>();
|
final List<HashMap<String, Object>> datatableColumnsList = new ArrayList<>();
|
||||||
@@ -111,10 +161,10 @@ public class DatatableHelper {
|
|||||||
map.put("apptableName", apptableName);
|
map.put("apptableName", apptableName);
|
||||||
map.put("entitySubType", "PERSON");
|
map.put("entitySubType", "PERSON");
|
||||||
map.put("multiRow", multiRow);
|
map.put("multiRow", multiRow);
|
||||||
addDatatableColumns(datatableColumnsList, "Spouse Name", "String", true, 25);
|
addDatatableColumns(datatableColumnsList, "Spouse Name", "String", true, 25, null);
|
||||||
addDatatableColumns(datatableColumnsList, "Number of Dependents", "Number", true, null);
|
addDatatableColumns(datatableColumnsList, "Number of Dependents", "Number", true, null, null);
|
||||||
addDatatableColumns(datatableColumnsList, "Time of Visit", "DateTime", false, null);
|
addDatatableColumns(datatableColumnsList, "Time of Visit", "DateTime", false, null, null);
|
||||||
addDatatableColumns(datatableColumnsList, "Date of Approval", "Date", false, null);
|
addDatatableColumns(datatableColumnsList, "Date of Approval", "Date", false, null, null);
|
||||||
map.put("columns", datatableColumnsList);
|
map.put("columns", datatableColumnsList);
|
||||||
String requestJsonString = new Gson().toJson(map);
|
String requestJsonString = new Gson().toJson(map);
|
||||||
LOG.info("map : {}", requestJsonString);
|
LOG.info("map : {}", requestJsonString);
|
||||||
@@ -135,7 +185,7 @@ public class DatatableHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static List<HashMap<String, Object>> addDatatableColumns(List<HashMap<String, Object>> datatableColumnsList, String columnName,
|
public static List<HashMap<String, Object>> addDatatableColumns(List<HashMap<String, Object>> datatableColumnsList, String columnName,
|
||||||
String columnType, boolean isMandatory, Integer length) {
|
String columnType, boolean isMandatory, Integer length, String codeName) {
|
||||||
|
|
||||||
final HashMap<String, Object> datatableColumnMap = new HashMap<>();
|
final HashMap<String, Object> datatableColumnMap = new HashMap<>();
|
||||||
|
|
||||||
@@ -145,6 +195,9 @@ public class DatatableHelper {
|
|||||||
if (length != null) {
|
if (length != null) {
|
||||||
datatableColumnMap.put("length", length);
|
datatableColumnMap.put("length", length);
|
||||||
}
|
}
|
||||||
|
if (codeName != null) {
|
||||||
|
datatableColumnMap.put("code", codeName);
|
||||||
|
}
|
||||||
|
|
||||||
datatableColumnsList.add(datatableColumnMap);
|
datatableColumnsList.add(datatableColumnMap);
|
||||||
return datatableColumnsList;
|
return datatableColumnsList;
|
||||||
|
|||||||
-133
@@ -1,133 +0,0 @@
|
|||||||
/**
|
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one
|
|
||||||
* or more contributor license agreements. See the NOTICE file
|
|
||||||
* distributed with this work for additional information
|
|
||||||
* regarding copyright ownership. The ASF licenses this file
|
|
||||||
* to you under the Apache License, Version 2.0 (the
|
|
||||||
* "License"); you may not use this file except in compliance
|
|
||||||
* with the License. You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing,
|
|
||||||
* software distributed under the License is distributed on an
|
|
||||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
* KIND, either express or implied. See the License for the
|
|
||||||
* specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*/
|
|
||||||
package org.apache.fineract.integrationtests.common.system;
|
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
|
||||||
|
|
||||||
import io.restassured.builder.RequestSpecBuilder;
|
|
||||||
import io.restassured.builder.ResponseSpecBuilder;
|
|
||||||
import io.restassured.http.ContentType;
|
|
||||||
import io.restassured.specification.RequestSpecification;
|
|
||||||
import io.restassured.specification.ResponseSpecification;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.List;
|
|
||||||
import org.apache.fineract.integrationtests.common.ClientHelper;
|
|
||||||
import org.apache.fineract.integrationtests.common.Utils;
|
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
|
|
||||||
public class DatatableIntegrationTest {
|
|
||||||
|
|
||||||
private RequestSpecification requestSpec;
|
|
||||||
private ResponseSpecification responseSpec;
|
|
||||||
private DatatableHelper datatableHelper;
|
|
||||||
|
|
||||||
private static final String CLIENT_APP_TABLE_NAME = "m_client";
|
|
||||||
|
|
||||||
@BeforeEach
|
|
||||||
public void setup() {
|
|
||||||
Utils.initializeRESTAssured();
|
|
||||||
this.requestSpec = new RequestSpecBuilder().setContentType(ContentType.JSON).build();
|
|
||||||
this.requestSpec.header("Authorization", "Basic " + Utils.loginIntoServerAndGetBase64EncodedAuthenticationKey());
|
|
||||||
this.responseSpec = new ResponseSpecBuilder().expectStatusCode(200).build();
|
|
||||||
this.datatableHelper = new DatatableHelper(this.requestSpec, this.responseSpec);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void validateCreateReadDeleteDatatable() {
|
|
||||||
// creating datatable for client entity
|
|
||||||
String datatableName = this.datatableHelper.createDatatable(CLIENT_APP_TABLE_NAME, false);
|
|
||||||
DatatableHelper.verifyDatatableCreatedOnServer(this.requestSpec, this.responseSpec, datatableName);
|
|
||||||
|
|
||||||
// creating client with datatables
|
|
||||||
final Integer clientID = ClientHelper.createClientAsPerson(requestSpec, responseSpec);
|
|
||||||
|
|
||||||
// creating new client datatable entry
|
|
||||||
final boolean genericResultSet = true;
|
|
||||||
Integer datatableResourceID = this.datatableHelper.createDatatableEntry(CLIENT_APP_TABLE_NAME, datatableName, clientID,
|
|
||||||
genericResultSet, "yyyy-MM-dd", "resourceId");
|
|
||||||
assertNotNull(datatableResourceID, "ERROR IN CREATING THE ENTITY DATATABLE RECORD");
|
|
||||||
|
|
||||||
// Read the Datatable entry generated with genericResultSet in true (default)
|
|
||||||
final List<String> items = this.datatableHelper.readDatatableEntry(datatableName, clientID, genericResultSet, null, "data");
|
|
||||||
assertEquals(1, items.size());
|
|
||||||
|
|
||||||
// Read the Datatable entry generated with genericResultSet in false
|
|
||||||
final Date valueDate = this.datatableHelper.readDatatableEntry(datatableName, clientID, !genericResultSet, 0, "Date of Approval");
|
|
||||||
assertNotNull(valueDate, "ERROR IN GETTING THE DATE VALUE FROM DATATABLE RECORD");
|
|
||||||
assertInstanceOf(Date.class, valueDate);
|
|
||||||
|
|
||||||
// deleting datatable entries
|
|
||||||
Integer appTableId = this.datatableHelper.deleteDatatableEntries(datatableName, clientID, "clientId");
|
|
||||||
assertEquals(clientID, appTableId, "ERROR IN DELETING THE DATATABLE ENTRIES");
|
|
||||||
|
|
||||||
// deleting the datatable
|
|
||||||
String deletedDataTableName = this.datatableHelper.deleteDatatable(datatableName);
|
|
||||||
assertEquals(datatableName, deletedDataTableName, "ERROR IN DELETING THE DATATABLE");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void validateReadDatatableMultirow() {
|
|
||||||
// creating multirow datatable for client entity
|
|
||||||
String datatableName = this.datatableHelper.createDatatable(CLIENT_APP_TABLE_NAME, true);
|
|
||||||
DatatableHelper.verifyDatatableCreatedOnServer(this.requestSpec, this.responseSpec, datatableName);
|
|
||||||
|
|
||||||
// creating first client with datatables
|
|
||||||
final Integer clientIdA = ClientHelper.createClientAsPerson(requestSpec, responseSpec);
|
|
||||||
|
|
||||||
// creating second client with datatables
|
|
||||||
final Integer clientIdB = ClientHelper.createClientAsPerson(requestSpec, responseSpec);
|
|
||||||
|
|
||||||
// creating new client datatable entry for first client
|
|
||||||
final boolean genericResultSet = true;
|
|
||||||
final Integer datatableResourceIdA = this.datatableHelper.createDatatableEntry(CLIENT_APP_TABLE_NAME, datatableName, clientIdA,
|
|
||||||
genericResultSet, "yyyy-MM-dd", "resourceId");
|
|
||||||
assertNotNull(datatableResourceIdA, "ERROR IN CREATING THE ENTITY DATATABLE RECORD");
|
|
||||||
|
|
||||||
// creating new client datatable entry for second client
|
|
||||||
final Integer datatableResourceIdB = this.datatableHelper.createDatatableEntry(CLIENT_APP_TABLE_NAME, datatableName, clientIdB,
|
|
||||||
genericResultSet, "yyyy-MM-dd", "resourceId");
|
|
||||||
assertNotNull(datatableResourceIdB, "ERROR IN CREATING THE ENTITY DATATABLE RECORD");
|
|
||||||
|
|
||||||
// Read the Datatable entry generated for first client
|
|
||||||
List<String> items;
|
|
||||||
items = this.datatableHelper.readDatatableEntry(datatableName, clientIdA, genericResultSet, datatableResourceIdA, "data");
|
|
||||||
assertEquals(1, items.size());
|
|
||||||
|
|
||||||
// Read the Datatable entry generated for second client
|
|
||||||
items = this.datatableHelper.readDatatableEntry(datatableName, clientIdB, genericResultSet, datatableResourceIdB, "data");
|
|
||||||
assertEquals(1, items.size());
|
|
||||||
|
|
||||||
// Read the Datatable entry generated for first client and second client's record Id
|
|
||||||
items = this.datatableHelper.readDatatableEntry(datatableName, clientIdA, genericResultSet, datatableResourceIdB, "data");
|
|
||||||
assertEquals(0, items.size());
|
|
||||||
|
|
||||||
// deleting datatable entries
|
|
||||||
Integer appTableIdA = this.datatableHelper.deleteDatatableEntries(datatableName, clientIdA, "clientId");
|
|
||||||
assertEquals(clientIdA, appTableIdA, "ERROR IN DELETING THE DATATABLE ENTRIES");
|
|
||||||
Integer appTableIdB = this.datatableHelper.deleteDatatableEntries(datatableName, clientIdB, "clientId");
|
|
||||||
assertEquals(clientIdB, appTableIdB, "ERROR IN DELETING THE DATATABLE ENTRIES");
|
|
||||||
|
|
||||||
// deleting the datatable
|
|
||||||
String deletedDataTableName = this.datatableHelper.deleteDatatable(datatableName);
|
|
||||||
assertEquals(datatableName, deletedDataTableName, "ERROR IN DELETING THE DATATABLE");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user