Fix date bug in saving account test

This commit is contained in:
Janos Meszaros
2025-01-16 21:41:46 +01:00
parent d704852228
commit fd765988a4
2 changed files with 43 additions and 47 deletions
@@ -19,6 +19,7 @@
package org.apache.fineract.integrationtests; package org.apache.fineract.integrationtests;
import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
import io.restassured.builder.RequestSpecBuilder; import io.restassured.builder.RequestSpecBuilder;
import io.restassured.builder.ResponseSpecBuilder; import io.restassured.builder.ResponseSpecBuilder;
@@ -688,7 +689,7 @@ public class ClientSavingsIntegrationTest {
assertEquals(savingsChargeId, deletedChargeId); assertEquals(savingsChargeId, deletedChargeId);
chargesPendingState = this.savingsAccountHelper.getSavingsCharges(savingsId); chargesPendingState = this.savingsAccountHelper.getSavingsCharges(savingsId);
Assertions.assertTrue(chargesPendingState == null || chargesPendingState.size() == 0); Assertions.assertTrue(chargesPendingState == null || chargesPendingState.isEmpty());
savingsStatusHashMap = this.savingsAccountHelper.approveSavingsOnDate(savingsId, submittedDateString); savingsStatusHashMap = this.savingsAccountHelper.approveSavingsOnDate(savingsId, submittedDateString);
SavingsStatusChecker.verifySavingsIsApproved(savingsStatusHashMap); SavingsStatusChecker.verifySavingsIsApproved(savingsStatusHashMap);
@@ -696,12 +697,11 @@ public class ClientSavingsIntegrationTest {
savingsStatusHashMap = this.savingsAccountHelper.activateSavings(savingsId, submittedDateString); savingsStatusHashMap = this.savingsAccountHelper.activateSavings(savingsId, submittedDateString);
SavingsStatusChecker.verifySavingsIsActive(savingsStatusHashMap); SavingsStatusChecker.verifySavingsIsActive(savingsStatusHashMap);
final Integer chargeId = ChargesHelper.createCharges(this.requestSpec, this.responseSpec, Integer chargeId = ChargesHelper.createCharges(this.requestSpec, this.responseSpec, ChargesHelper.getSavingsAnnualFeeJSON());
ChargesHelper.getSavingsAnnualFeeJSON());
Assertions.assertNotNull(chargeId); Assertions.assertNotNull(chargeId);
ArrayList<HashMap> charges = this.savingsAccountHelper.getSavingsCharges(savingsId); ArrayList<HashMap> charges = this.savingsAccountHelper.getSavingsCharges(savingsId);
Assertions.assertTrue(charges == null || charges.size() == 0); Assertions.assertTrue(charges == null || charges.isEmpty());
this.savingsAccountHelper.addChargesForSavingsWithDueDateAndFeeOnMonthDay(savingsId, chargeId, "10 January 2023", 100, this.savingsAccountHelper.addChargesForSavingsWithDueDateAndFeeOnMonthDay(savingsId, chargeId, "10 January 2023", 100,
"15 January"); "15 January");
@@ -718,41 +718,32 @@ public class ClientSavingsIntegrationTest {
assertEquals("validation.msg.savingsaccountcharge.inactivation.of.charge.not.allowed.when.charge.is.due", assertEquals("validation.msg.savingsaccountcharge.inactivation.of.charge.not.allowed.when.charge.is.due",
savingsAccountErrorData.get(0).get(CommonConstants.RESPONSE_ERROR_MESSAGE_CODE)); savingsAccountErrorData.get(0).get(CommonConstants.RESPONSE_ERROR_MESSAGE_CODE));
SimpleDateFormat sdf = new SimpleDateFormat(CommonConstants.DATE_FORMAT, Locale.US); float chargeAmount = (Float) savingsChargeForPay.get("amount");
Calendar cal = Calendar.getInstance(); List chargeDueDateParts = (List) savingsChargeForPay.get("dueDate");
List dates = (List) savingsChargeForPay.get("dueDate"); LocalDate chargeDueDate = LocalDate.of((int) chargeDueDateParts.get(0), (int) chargeDueDateParts.get(1),
cal.set(Calendar.YEAR, (Integer) dates.get(0)); (int) chargeDueDateParts.get(2));
cal.set(Calendar.MONTH, (Integer) dates.get(1) - 1);
cal.set(Calendar.DAY_OF_MONTH, (Integer) dates.get(2));
int n = 0;
Calendar current = Calendar.getInstance();
while (cal.compareTo(current) < 0) {
n++;
cal.set(Calendar.YEAR, (Integer) dates.get(0) + n);
}
cal.set(Calendar.YEAR, (Integer) dates.get(0));
cal.set(Calendar.MONTH, (Integer) dates.get(1) - 1);
cal.set(Calendar.DAY_OF_MONTH, (Integer) dates.get(2));
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, LocalDate.of(2024, 1, 17)); final LocalDate today = LocalDate.of(2024, 1, 17);
for (int i = 1; i <= n; i++) { final int noChargeDues = today.getYear() - chargeDueDate.getYear();
this.savingsAccountHelper.payCharge((Integer) savingsChargeForPay.get("id"), savingsId, BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, today);
((Float) savingsChargeForPay.get("amount")).toString(), sdf.format(cal.getTime()));
HashMap paidCharge = this.savingsAccountHelper.getSavingsCharge(savingsId, (Integer) savingsChargeForPay.get("id")); for (int dueYearDiff = 0; dueYearDiff <= noChargeDues; dueYearDiff++) {
Float expectedValue = (Float) savingsChargeForPay.get("amount") * i; this.savingsAccountHelper.payCharge(annualSavingsChargeId, savingsId, String.valueOf(chargeAmount),
assertEquals(expectedValue, paidCharge.get("amountPaid")); chargeDueDate.plusYears(dueYearDiff));
cal.set(Calendar.YEAR, (Integer) dates.get(0) + i); float paidCharge = (float) this.savingsAccountHelper.getSavingsCharge(savingsId, annualSavingsChargeId).get("amountPaid");
float expectedValue = chargeAmount * (dueYearDiff + 1);
assertTrue((expectedValue - paidCharge) < 0.01);
} }
Integer inactivatedChargeId = (Integer) this.savingsAccountHelper.inactivateCharge(annualSavingsChargeId, savingsId, Integer inactivatedChargeId = (Integer) this.savingsAccountHelper.inactivateCharge(annualSavingsChargeId, savingsId,
CommonConstants.RESPONSE_RESOURCE_ID); CommonConstants.RESPONSE_RESOURCE_ID);
assertEquals(annualSavingsChargeId, inactivatedChargeId, "Inactivated Savings Charges Id"); assertEquals(annualSavingsChargeId, inactivatedChargeId, "Inactivated Savings Charges Id");
final Integer monthlyFeechargeId = ChargesHelper.createCharges(this.requestSpec, this.responseSpec, final Integer monthlyFeeChargeId = ChargesHelper.createCharges(this.requestSpec, this.responseSpec,
ChargesHelper.getSavingsMonthlyFeeJSON()); ChargesHelper.getSavingsMonthlyFeeJSON());
Assertions.assertNotNull(monthlyFeechargeId); Assertions.assertNotNull(monthlyFeeChargeId);
this.savingsAccountHelper.addChargesForSavings(savingsId, monthlyFeechargeId, true); this.savingsAccountHelper.addChargesForSavings(savingsId, monthlyFeeChargeId, true);
charges = this.savingsAccountHelper.getSavingsCharges(savingsId); charges = this.savingsAccountHelper.getSavingsCharges(savingsId);
Assertions.assertEquals(2, charges.size()); Assertions.assertEquals(2, charges.size());
@@ -783,34 +774,31 @@ public class ClientSavingsIntegrationTest {
Assertions.assertEquals(3, charges.size()); Assertions.assertEquals(3, charges.size());
savingsChargeForPay = charges.get(2); savingsChargeForPay = charges.get(2);
final Integer weeklySavingsFeeId = (Integer) savingsChargeForPay.get("id"); chargeId = (Integer) savingsChargeForPay.get("id");
chargeAmount = (float) savingsChargeForPay.get("amount");
chargeDueDateParts = (List) savingsChargeForPay.get("dueDate");
chargeDueDate = LocalDate.of((int) chargeDueDateParts.get(0), (int) chargeDueDateParts.get(1), (int) chargeDueDateParts.get(2));
savingsAccountErrorData = (ArrayList<HashMap>) validationErrorHelper.inactivateCharge(weeklySavingsFeeId, savingsId, savingsAccountErrorData = (ArrayList<HashMap>) validationErrorHelper.inactivateCharge(chargeId, savingsId,
CommonConstants.RESPONSE_ERROR); CommonConstants.RESPONSE_ERROR);
assertEquals("validation.msg.savingsaccountcharge.inactivation.of.charge.not.allowed.when.charge.is.due", assertEquals("validation.msg.savingsaccountcharge.inactivation.of.charge.not.allowed.when.charge.is.due",
savingsAccountErrorData.get(0).get(CommonConstants.RESPONSE_ERROR_MESSAGE_CODE)); savingsAccountErrorData.get(0).get(CommonConstants.RESPONSE_ERROR_MESSAGE_CODE));
cal = Calendar.getInstance();
dates = (List) savingsChargeForPay.get("dueDate");
cal.set(Calendar.YEAR, (Integer) dates.get(0));
cal.set(Calendar.MONTH, (Integer) dates.get(1) - 1);
cal.set(Calendar.DAY_OF_MONTH, (Integer) dates.get(2));
// Depositing huge amount as scheduler job deducts the fee amount // Depositing huge amount as scheduler job deducts the fee amount
String transactionDate = "17 January 2024"; String transactionDate = "17 January 2024";
Integer depositTransactionId = (Integer) this.savingsAccountHelper.depositToSavingsAccount(savingsId, "100000", transactionDate, Integer depositTransactionId = (Integer) this.savingsAccountHelper.depositToSavingsAccount(savingsId, "100000", transactionDate,
CommonConstants.RESPONSE_RESOURCE_ID); CommonConstants.RESPONSE_RESOURCE_ID);
Assertions.assertNotNull(depositTransactionId); Assertions.assertNotNull(depositTransactionId);
this.savingsAccountHelper.payCharge((Integer) savingsChargeForPay.get("id"), savingsId, this.savingsAccountHelper.payCharge(chargeId, savingsId, String.valueOf(chargeAmount), chargeDueDate);
((Float) savingsChargeForPay.get("amount")).toString(), sdf.format(cal.getTime())); HashMap paidCharge = this.savingsAccountHelper.getSavingsCharge(savingsId, chargeId);
HashMap paidCharge = this.savingsAccountHelper.getSavingsCharge(savingsId, (Integer) savingsChargeForPay.get("id")); final float paidAmount = (float) paidCharge.get("amountPaid");
assertEquals(savingsChargeForPay.get("amount"), paidCharge.get("amountPaid")); assertTrue(chargeAmount - paidAmount < 0.01);
List nextDueDates = (List) paidCharge.get("dueDate");
LocalDate nextDueDate = LocalDate.of((Integer) nextDueDates.get(0), (Integer) nextDueDates.get(1), List nextDueDateParts = (List) paidCharge.get("dueDate");
(Integer) nextDueDates.get(2)); LocalDate nextDueDate = LocalDate.of((Integer) nextDueDateParts.get(0), (Integer) nextDueDateParts.get(1),
LocalDate expectedNextDueDate = LocalDate.of((Integer) dates.get(0), (Integer) dates.get(1), (Integer) dates.get(2)) (Integer) nextDueDateParts.get(2));
.plusWeeks((Integer) paidCharge.get("feeInterval")); LocalDate expectedNextDueDate = chargeDueDate.plusWeeks((Integer) paidCharge.get("feeInterval"));
assertEquals(expectedNextDueDate, nextDueDate); assertEquals(expectedNextDueDate, nextDueDate);
} finally { } finally {
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, LocalDate.of(2024, 11, 11)); BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, LocalDate.of(2024, 11, 11));
@@ -35,6 +35,8 @@ import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.HashMap; import java.util.HashMap;
@@ -387,6 +389,12 @@ public class SavingsAccountHelper extends IntegrationTest {
CommonConstants.RESPONSE_RESOURCE_ID); CommonConstants.RESPONSE_RESOURCE_ID);
} }
public Integer payCharge(final Integer chargeId, final Integer savingsId, String amount, LocalDate dueDate) {
return (Integer) performSavingActions(createChargesURL("paycharge", savingsId, chargeId),
getSavingsPayChargeJSON(amount, dueDate.format(DateTimeFormatter.ofPattern(CommonConstants.DATE_FORMAT))),
CommonConstants.RESPONSE_RESOURCE_ID);
}
public Integer payCharge(final Integer chargeId, final Integer savingsId, String amount, String dueDate) { public Integer payCharge(final Integer chargeId, final Integer savingsId, String amount, String dueDate) {
return (Integer) performSavingActions(createChargesURL("paycharge", savingsId, chargeId), getSavingsPayChargeJSON(amount, dueDate), return (Integer) performSavingActions(createChargesURL("paycharge", savingsId, chargeId), getSavingsPayChargeJSON(amount, dueDate),
CommonConstants.RESPONSE_RESOURCE_ID); CommonConstants.RESPONSE_RESOURCE_ID);