Charts data is mandatory for creating a fixed deposit product

This commit is contained in:
Jose Alberto Hernandez
2022-07-11 10:07:59 +02:00
committed by Arnold Gálovics
parent 4fdee75beb
commit 4ebe645c58
4 changed files with 82 additions and 22 deletions
@@ -95,7 +95,7 @@ public class BusinessDateApiResource {
@Operation(summary = "Update Business Date", description = "") @Operation(summary = "Update Business Date", description = "")
@RequestBody(required = true, content = @Content(schema = @Schema(implementation = BusinessDateApiResourceSwagger.BusinessDateRequest.class))) @RequestBody(required = true, content = @Content(schema = @Schema(implementation = BusinessDateApiResourceSwagger.BusinessDateRequest.class)))
@ApiResponses({ @ApiResponses({
@ApiResponse(responseCode = "200", description = "", content = @Content(schema = @Schema(implementation = BusinessDateApiResourceSwagger.BusinessDateRequest.class))) }) @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = BusinessDateApiResourceSwagger.BusinessDateRequest.class))) })
public String updateBusinessDate(final String jsonRequestBody, @Context UriInfo uriInfo) { public String updateBusinessDate(final String jsonRequestBody, @Context UriInfo uriInfo) {
securityContext.authenticatedUser().validateHasUpdatePermission("BUSINESS_DATE"); securityContext.authenticatedUser().validateHasUpdatePermission("BUSINESS_DATE");
final CommandWrapper commandRequest = new CommandWrapperBuilder().updateBusinessDate().withJson(jsonRequestBody).build(); final CommandWrapper commandRequest = new CommandWrapperBuilder().updateBusinessDate().withJson(jsonRequestBody).build();
@@ -395,18 +395,18 @@ public class DepositProductDataValidator {
private void validateChartsData(JsonElement element, DataValidatorBuilder baseDataValidator) { private void validateChartsData(JsonElement element, DataValidatorBuilder baseDataValidator) {
if (element.isJsonObject()) { if (element.isJsonObject()) {
final JsonObject topLevelJsonElement = element.getAsJsonObject();
if (topLevelJsonElement.has(chartsParamName) && topLevelJsonElement.get(chartsParamName).isJsonArray()) { final JsonArray array = this.fromApiJsonHelper.extractJsonArrayNamed(chartsParamName, element);
final JsonArray array = topLevelJsonElement.get(chartsParamName).getAsJsonArray(); baseDataValidator.reset().parameter(chartsParamName).value(array).notNull().jsonArrayNotEmpty();
for (int i = 0; i < array.size(); i++) {
final JsonObject interestRateChartElement = array.get(i).getAsJsonObject(); for (int i = 0; i < array.size(); i++) {
final String json = this.fromApiJsonHelper.toJson(interestRateChartElement); final JsonObject interestRateChartElement = array.get(i).getAsJsonObject();
// chart for create final String json = this.fromApiJsonHelper.toJson(interestRateChartElement);
if (!this.fromApiJsonHelper.parameterExists(idParamName, interestRateChartElement)) { // chart for create
this.chartDataValidator.validateForCreate(json, baseDataValidator); if (!this.fromApiJsonHelper.parameterExists(idParamName, interestRateChartElement)) {
} else { // chart for update this.chartDataValidator.validateForCreate(json, baseDataValidator);
this.chartDataValidator.validateForUpdate(json, baseDataValidator); } else { // chart for update
} this.chartDataValidator.validateForUpdate(json, baseDataValidator);
} }
} }
} }
@@ -128,6 +128,45 @@ public class FixedDepositTest {
this.systemTimeZone = TimeZone.getTimeZone(Utils.TENANT_TIME_ZONE); this.systemTimeZone = TimeZone.getTimeZone(Utils.TENANT_TIME_ZONE);
} }
/***
* Test case for Fixed Deposit Product with default attributes
*/
@Test
public void testFixedDepositProductCreation() {
this.fixedDepositProductHelper = new FixedDepositProductHelper(this.requestSpec, this.responseSpec);
this.accountHelper = new AccountHelper(this.requestSpec, this.responseSpec);
/***
* Create GL Accounts for product account mapping
*/
final Account assetAccount = this.accountHelper.createAssetAccount();
final Account incomeAccount = this.accountHelper.createIncomeAccount();
final Account expenseAccount = this.accountHelper.createExpenseAccount();
final Account liabilityAccount = this.accountHelper.createLiabilityAccount();
DateFormat dateFormat = new SimpleDateFormat("dd MMMM yyyy", Locale.US);
Calendar todaysDate = Calendar.getInstance();
todaysDate.add(Calendar.MONTH, -3);
final String VALID_FROM = dateFormat.format(todaysDate.getTime());
todaysDate.add(Calendar.YEAR, 10);
final String VALID_TO = dateFormat.format(todaysDate.getTime());
final String accountingRule = CASH_BASED;
/***
* Create FD product with charts (must be 200 OK)
*/
Integer fixedDepositProductId = createFixedDepositProduct(VALID_FROM, VALID_TO, accountingRule, assetAccount, liabilityAccount,
incomeAccount, expenseAccount);
Assertions.assertNotNull(fixedDepositProductId);
/***
* Create FD product without charts (must be 400 Bad Request)
*/
this.responseSpec = new ResponseSpecBuilder().expectStatusCode(400).build();
createFixedDepositProductWithoutCharts(VALID_FROM, VALID_TO, accountingRule, assetAccount, liabilityAccount, incomeAccount,
expenseAccount);
}
/*** /***
* Test case for Fixed Deposit Account premature closure with transaction type withdrawal and Cash Based accounting * Test case for Fixed Deposit Account premature closure with transaction type withdrawal and Cash Based accounting
* enabled * enabled
@@ -2543,7 +2582,21 @@ public class FixedDepositTest {
fixedDepositProductHelper = fixedDepositProductHelper.withAccountingRuleAsNone(); fixedDepositProductHelper = fixedDepositProductHelper.withAccountingRuleAsNone();
} }
final String fixedDepositProductJSON = fixedDepositProductHelper.withPeriodRangeChart() // final String fixedDepositProductJSON = fixedDepositProductHelper.withPeriodRangeChart() //
.build(validFrom, validTo); .build(validFrom, validTo, true);
return FixedDepositProductHelper.createFixedDepositProduct(fixedDepositProductJSON, requestSpec, responseSpec);
}
private Integer createFixedDepositProductWithoutCharts(final String validFrom, final String validTo, final String accountingRule,
Account... accounts) {
LOG.info("------------------------------CREATING NEW FIXED DEPOSIT PRODUCT ---------------------------------------");
FixedDepositProductHelper fixedDepositProductHelper = new FixedDepositProductHelper(this.requestSpec, this.responseSpec);
if (accountingRule.equals(CASH_BASED)) {
fixedDepositProductHelper = fixedDepositProductHelper.withAccountingRuleAsCashBased(accounts);
} else if (accountingRule.equals(NONE)) {
fixedDepositProductHelper = fixedDepositProductHelper.withAccountingRuleAsNone();
}
final String fixedDepositProductJSON = fixedDepositProductHelper.withPeriodRangeChart() //
.build(validFrom, validTo, false);
return FixedDepositProductHelper.createFixedDepositProduct(fixedDepositProductJSON, requestSpec, responseSpec); return FixedDepositProductHelper.createFixedDepositProduct(fixedDepositProductJSON, requestSpec, responseSpec);
} }
@@ -2706,6 +2759,7 @@ public class FixedDepositTest {
*/ */
@AfterEach @AfterEach
public void tearDown() { public void tearDown() {
this.responseSpec = new ResponseSpecBuilder().expectStatusCode(200).build();
List<HashMap> financialActivities = this.financialActivityAccountHelper.getAllFinancialActivityAccounts(this.responseSpec); List<HashMap> financialActivities = this.financialActivityAccountHelper.getAllFinancialActivityAccounts(this.responseSpec);
for (HashMap financialActivity : financialActivities) { for (HashMap financialActivity : financialActivities) {
Integer financialActivityAccountId = (Integer) financialActivity.get("id"); Integer financialActivityAccountId = (Integer) financialActivity.get("id");
@@ -99,17 +99,23 @@ public class FixedDepositProductHelper {
private String taxGroupId = null; private String taxGroupId = null;
public String build(final String validFrom, final String validTo) { public String build(final String validFrom, final String validTo) {
return build(validFrom, validTo, true);
}
public String build(final String validFrom, final String validTo, final boolean withCharts) {
final HashMap<String, Object> map = new HashMap<>(); final HashMap<String, Object> map = new HashMap<>();
List<HashMap<String, Object>> charts = new ArrayList<HashMap<String, Object>>(); List<HashMap<String, Object>> charts = new ArrayList<HashMap<String, Object>>();
HashMap<String, Object> chartsMap = new HashMap<>(); if (withCharts) {
chartsMap.put("fromDate", validFrom); HashMap<String, Object> chartsMap = new HashMap<>();
chartsMap.put("endDate", validTo); chartsMap.put("fromDate", validFrom);
chartsMap.put("dateFormat", "dd MMMM yyyy"); chartsMap.put("endDate", validTo);
chartsMap.put("locale", LOCALE); chartsMap.put("dateFormat", "dd MMMM yyyy");
chartsMap.put("chartSlabs", this.chartSlabs); chartsMap.put("locale", LOCALE);
chartsMap.put("isPrimaryGroupingByAmount", this.isPrimaryGroupingByAmount); chartsMap.put("chartSlabs", this.chartSlabs);
charts.add(chartsMap); chartsMap.put("isPrimaryGroupingByAmount", this.isPrimaryGroupingByAmount);
charts.add(chartsMap);
}
map.put("charts", charts); map.put("charts", charts);
map.put("name", this.name); map.put("name", this.name);