You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fineract.apache.org by ar...@apache.org on 2022/07/11 08:08:04 UTC
[fineract] branch develop updated: Charts data is mandatory for creating a fixed deposit product
This is an automated email from the ASF dual-hosted git repository.
arnold pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract.git
The following commit(s) were added to refs/heads/develop by this push:
new 4ebe645c5 Charts data is mandatory for creating a fixed deposit product
4ebe645c5 is described below
commit 4ebe645c58cd3d6baae6e137369ef467faa8e799
Author: Jose Alberto Hernandez <al...@MacBook-Pro.local>
AuthorDate: Tue Jul 5 23:57:16 2022 -0500
Charts data is mandatory for creating a fixed deposit product
---
.../businessdate/api/BusinessDateApiResource.java | 2 +-
.../savings/data/DepositProductDataValidator.java | 24 +++++-----
.../integrationtests/FixedDepositTest.java | 56 +++++++++++++++++++++-
.../fixeddeposit/FixedDepositProductHelper.java | 22 +++++----
4 files changed, 82 insertions(+), 22 deletions(-)
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/businessdate/api/BusinessDateApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/businessdate/api/BusinessDateApiResource.java
index 63f756fc4..6fde1caff 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/businessdate/api/BusinessDateApiResource.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/businessdate/api/BusinessDateApiResource.java
@@ -95,7 +95,7 @@ public class BusinessDateApiResource {
@Operation(summary = "Update Business Date", description = "")
@RequestBody(required = true, content = @Content(schema = @Schema(implementation = BusinessDateApiResourceSwagger.BusinessDateRequest.class)))
@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) {
securityContext.authenticatedUser().validateHasUpdatePermission("BUSINESS_DATE");
final CommandWrapper commandRequest = new CommandWrapperBuilder().updateBusinessDate().withJson(jsonRequestBody).build();
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositProductDataValidator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositProductDataValidator.java
index 9bc79d03e..96380a82d 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositProductDataValidator.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositProductDataValidator.java
@@ -395,18 +395,18 @@ public class DepositProductDataValidator {
private void validateChartsData(JsonElement element, DataValidatorBuilder baseDataValidator) {
if (element.isJsonObject()) {
- final JsonObject topLevelJsonElement = element.getAsJsonObject();
- if (topLevelJsonElement.has(chartsParamName) && topLevelJsonElement.get(chartsParamName).isJsonArray()) {
- final JsonArray array = topLevelJsonElement.get(chartsParamName).getAsJsonArray();
- for (int i = 0; i < array.size(); i++) {
- final JsonObject interestRateChartElement = array.get(i).getAsJsonObject();
- final String json = this.fromApiJsonHelper.toJson(interestRateChartElement);
- // chart for create
- if (!this.fromApiJsonHelper.parameterExists(idParamName, interestRateChartElement)) {
- this.chartDataValidator.validateForCreate(json, baseDataValidator);
- } else { // chart for update
- this.chartDataValidator.validateForUpdate(json, baseDataValidator);
- }
+
+ final JsonArray array = this.fromApiJsonHelper.extractJsonArrayNamed(chartsParamName, element);
+ baseDataValidator.reset().parameter(chartsParamName).value(array).notNull().jsonArrayNotEmpty();
+
+ for (int i = 0; i < array.size(); i++) {
+ final JsonObject interestRateChartElement = array.get(i).getAsJsonObject();
+ final String json = this.fromApiJsonHelper.toJson(interestRateChartElement);
+ // chart for create
+ if (!this.fromApiJsonHelper.parameterExists(idParamName, interestRateChartElement)) {
+ this.chartDataValidator.validateForCreate(json, baseDataValidator);
+ } else { // chart for update
+ this.chartDataValidator.validateForUpdate(json, baseDataValidator);
}
}
}
diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/FixedDepositTest.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/FixedDepositTest.java
index 9840ecd57..837fa1ebd 100644
--- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/FixedDepositTest.java
+++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/FixedDepositTest.java
@@ -128,6 +128,45 @@ public class FixedDepositTest {
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
* enabled
@@ -2543,7 +2582,21 @@ public class FixedDepositTest {
fixedDepositProductHelper = fixedDepositProductHelper.withAccountingRuleAsNone();
}
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);
}
@@ -2706,6 +2759,7 @@ public class FixedDepositTest {
*/
@AfterEach
public void tearDown() {
+ this.responseSpec = new ResponseSpecBuilder().expectStatusCode(200).build();
List<HashMap> financialActivities = this.financialActivityAccountHelper.getAllFinancialActivityAccounts(this.responseSpec);
for (HashMap financialActivity : financialActivities) {
Integer financialActivityAccountId = (Integer) financialActivity.get("id");
diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/fixeddeposit/FixedDepositProductHelper.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/fixeddeposit/FixedDepositProductHelper.java
index 4cd81d3ec..b46f778f6 100644
--- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/fixeddeposit/FixedDepositProductHelper.java
+++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/fixeddeposit/FixedDepositProductHelper.java
@@ -99,17 +99,23 @@ public class FixedDepositProductHelper {
private String taxGroupId = null;
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<>();
List<HashMap<String, Object>> charts = new ArrayList<HashMap<String, Object>>();
- HashMap<String, Object> chartsMap = new HashMap<>();
- chartsMap.put("fromDate", validFrom);
- chartsMap.put("endDate", validTo);
- chartsMap.put("dateFormat", "dd MMMM yyyy");
- chartsMap.put("locale", LOCALE);
- chartsMap.put("chartSlabs", this.chartSlabs);
- chartsMap.put("isPrimaryGroupingByAmount", this.isPrimaryGroupingByAmount);
- charts.add(chartsMap);
+ if (withCharts) {
+ HashMap<String, Object> chartsMap = new HashMap<>();
+ chartsMap.put("fromDate", validFrom);
+ chartsMap.put("endDate", validTo);
+ chartsMap.put("dateFormat", "dd MMMM yyyy");
+ chartsMap.put("locale", LOCALE);
+ chartsMap.put("chartSlabs", this.chartSlabs);
+ chartsMap.put("isPrimaryGroupingByAmount", this.isPrimaryGroupingByAmount);
+ charts.add(chartsMap);
+ }
map.put("charts", charts);
map.put("name", this.name);