DeathGun44 commented on code in PR #6158:
URL: https://github.com/apache/fineract/pull/6158#discussion_r3795717892


##########
integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanAccrualTransactionOnChargeSubmittedDateTest.java:
##########
@@ -22,892 +22,456 @@
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-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.math.BigDecimal;
 import java.time.LocalDate;
-import java.time.format.DateTimeFormatter;
-import java.time.format.DateTimeFormatterBuilder;
-import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 import java.util.UUID;
-import org.apache.fineract.client.models.GetLoanProductsProductIdResponse;
 import org.apache.fineract.client.models.GetLoansLoanIdRepaymentPeriod;
 import org.apache.fineract.client.models.GetLoansLoanIdResponse;
-import org.apache.fineract.client.models.PostCreateRescheduleLoansRequest;
-import org.apache.fineract.client.models.PostCreateRescheduleLoansResponse;
+import org.apache.fineract.client.models.GetLoansLoanIdTransactions;
+import org.apache.fineract.client.models.PostLoanProductsRequest;
+import org.apache.fineract.client.models.PostLoansLoanIdChargesRequest;
 import org.apache.fineract.client.models.PostLoansLoanIdTransactionsRequest;
 import org.apache.fineract.client.models.PostLoansLoanIdTransactionsResponse;
+import org.apache.fineract.client.models.PostLoansRequest;
 import org.apache.fineract.client.models.PutGlobalConfigurationsRequest;
-import org.apache.fineract.infrastructure.businessdate.domain.BusinessDateType;
 import 
org.apache.fineract.infrastructure.configuration.api.GlobalConfigurationConstants;
-import org.apache.fineract.infrastructure.core.service.DateUtils;
-import org.apache.fineract.integrationtests.common.BusinessDateHelper;
-import org.apache.fineract.integrationtests.common.ClientHelper;
-import org.apache.fineract.integrationtests.common.LoanRescheduleRequestHelper;
-import org.apache.fineract.integrationtests.common.SchedulerJobHelper;
+import org.apache.fineract.integrationtests.client.feign.FeignLoanTestBase;
+import 
org.apache.fineract.integrationtests.client.feign.modules.LoanRequestBuilders;
+import org.apache.fineract.integrationtests.client.feign.modules.LoanTestData;
 import org.apache.fineract.integrationtests.common.Utils;
-import org.apache.fineract.integrationtests.common.accounting.Account;
-import org.apache.fineract.integrationtests.common.accounting.AccountHelper;
-import 
org.apache.fineract.integrationtests.common.accounting.PeriodicAccrualAccountingHelper;
-import org.apache.fineract.integrationtests.common.charges.ChargesHelper;
-import 
org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
-import 
org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
-import 
org.apache.fineract.integrationtests.common.loans.LoanRescheduleRequestTestBuilder;
-import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper;
-import org.apache.fineract.integrationtests.inlinecob.InlineLoanCOBHelper;
-import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
-public class LoanAccrualTransactionOnChargeSubmittedDateTest extends 
BaseLoanIntegrationTest {
-
-    private ResponseSpecification responseSpec;
-    private RequestSpecification requestSpec;
-    private LoanTransactionHelper loanTransactionHelper;
-    private ClientHelper clientHelper;
-    private DateTimeFormatter dateFormatter = new 
DateTimeFormatterBuilder().appendPattern("dd MMMM yyyy").toFormatter();
-    private AccountHelper accountHelper;
-    private InlineLoanCOBHelper inlineLoanCOBHelper;
-
-    @BeforeEach
-    public void setup() {
-        Utils.initializeRESTAssured();
-        this.requestSpec = new 
RequestSpecBuilder().setContentType(ContentType.JSON).build();
-        this.requestSpec.header("Authorization", "Basic " + 
Utils.loginIntoServerAndGetBase64EncodedAuthenticationKey());
-        this.requestSpec.header("Fineract-Platform-TenantId", "default");
-        this.responseSpec = new 
ResponseSpecBuilder().expectStatusCode(200).build();
-        this.loanTransactionHelper = new 
LoanTransactionHelper(this.requestSpec, this.responseSpec);
-        this.clientHelper = new ClientHelper(this.requestSpec, 
this.responseSpec);
-        this.accountHelper = new AccountHelper(this.requestSpec, 
this.responseSpec);
-        this.inlineLoanCOBHelper = new InlineLoanCOBHelper(this.requestSpec, 
this.responseSpec);
-    }
+public class LoanAccrualTransactionOnChargeSubmittedDateTest extends 
FeignLoanTestBase {
+
+    private static final String STRATEGY = "mifos-standard-strategy";
+    private static final String CHARGE_ACCRUAL_DATE_SUBMITTED = 
"submitted-date";
+    private static final String CHARGE_ACCRUAL_DATE_DUE = "due-date";
 
     @Test
     public void 
loanAccrualTransactionOnChargeSubmittedTest_Accrual_Accounting_Api() {
         try {
+            enableSubmittedDateChargeAccrual(LocalDate.of(2023, 3, 3));
+            String loanExternalIdStr = UUID.randomUUID().toString();
+            final Long clientId = createClient();
+            final Long loanProductId = 
createLoanProduct(singleRepaymentAccrualProduct());
+            final Long loanId = createSingleRepaymentLoan(clientId, 
loanProductId, loanExternalIdStr);
 
+            addPenaltyCharge(loanId, "10 March 2023", 10.0);
             // Accounts oof periodic accrual
-            final Account assetAccount = 
this.accountHelper.createAssetAccount();
-            final Account incomeAccount = 
this.accountHelper.createIncomeAccount();
-            final Account expenseAccount = 
this.accountHelper.createExpenseAccount();
-            final Account overpaymentAccount = 
this.accountHelper.createLiabilityAccount();
+            addFeeCharge(loanId, "14 March 2023", 10.0);
 
+            runPeriodicAccrualAccounting("03 March 2023");
             // Set business date
-            LocalDate currentDate = LocalDate.of(2023, 3, 3);
-            final String accrualRunTillDate = 
dateFormatter.format(currentDate);
+            checkAccrualTransaction(LocalDate.of(2023, 3, 3), 0.0, 10.0, 10.0, 
loanId);
 
-            
globalConfigurationHelper.updateGlobalConfiguration(GlobalConfigurationConstants.ENABLE_BUSINESS_DATE,
-                    new PutGlobalConfigurationsRequest().enabled(true));
-            
BusinessDateHelper.updateBusinessDate(BusinessDateType.BUSINESS_DATE, 
currentDate);
-            
globalConfigurationHelper.updateGlobalConfiguration(GlobalConfigurationConstants.CHARGE_ACCRUAL_DATE,
-                    new 
PutGlobalConfigurationsRequest().stringValue("submitted-date"));
+            updateBusinessDate("04 March 2023");
+            makeLoanRepayment(loanExternalIdStr, repaymentRequest("4 March 
2023", 100.0));
             // Loan ExternalId
-            String loanExternalIdStr = UUID.randomUUID().toString();
+            addFeeCharge(loanId, "21 March 2023", 10.0);
 
+            runPeriodicAccrualAccounting("04 March 2023");
             // Client and Loan account creation
-
-            final Integer clientId = 
clientHelper.createClient(ClientHelper.defaultClientCreationRequest()).getClientId().intValue();
-            final GetLoanProductsProductIdResponse 
getLoanProductsProductResponse = createLoanProduct(loanTransactionHelper, 
assetAccount,
-                    incomeAccount, expenseAccount, overpaymentAccount);
-            assertNotNull(getLoanProductsProductResponse);
-
-            final Integer loanId = createLoanAccount(clientId, 
getLoanProductsProductResponse.getId(), loanExternalIdStr);
-
             // Add Charge Penalty
-            Integer penalty = ChargesHelper.createCharges(requestSpec, 
responseSpec,
-                    
ChargesHelper.getLoanSpecifiedDueDateJSON(ChargesHelper.CHARGE_CALCULATION_TYPE_FLAT,
 "10", true));
-
-            LocalDate targetDate = LocalDate.of(2023, 3, 10);
-            final String penaltyCharge1AddedDate = 
dateFormatter.format(targetDate);
-
-            Integer penalty1LoanChargeId = 
this.loanTransactionHelper.addChargesForLoan(loanId,
-                    
LoanTransactionHelper.getSpecifiedDueDateChargesForLoanAsJSON(String.valueOf(penalty),
 penaltyCharge1AddedDate, "10"));
-
-            assertNotNull(penalty1LoanChargeId);
-
             // Add Charge Fee
-            Integer feeCharge = ChargesHelper.createCharges(requestSpec, 
responseSpec,
-                    
ChargesHelper.getLoanSpecifiedDueDateJSON(ChargesHelper.CHARGE_CALCULATION_TYPE_FLAT,
 "10", false));
-
-            targetDate = LocalDate.of(2023, 3, 14);
-            final String feeChargeAddedDate = dateFormatter.format(targetDate);
-            Integer feeLoanChargeId = 
this.loanTransactionHelper.addChargesForLoan(loanId,
-                    
LoanTransactionHelper.getSpecifiedDueDateChargesForLoanAsJSON(String.valueOf(feeCharge),
 feeChargeAddedDate, "10"));
-
-            assertNotNull(feeLoanChargeId);
-
             // Run accrual for charge created date
-            
PeriodicAccrualAccountingHelper.runPeriodicAccrualAccounting(accrualRunTillDate);
-
             // verify accrual transaction created for charges create date
-            checkAccrualTransaction(currentDate, 0.0f, 10.0f, 10.0f, loanId);
-
             // Set business date
-            LocalDate futureDate = LocalDate.of(2023, 3, 4);
-            final String nextAccrualRunDate = dateFormatter.format(futureDate);
-
-            
BusinessDateHelper.updateBusinessDate(BusinessDateType.BUSINESS_DATE, 
futureDate);
-
             // make repayment
-            final PostLoansLoanIdTransactionsResponse repaymentTransaction_1 = 
loanTransactionHelper.makeLoanRepayment(loanExternalIdStr,
-                    new PostLoansLoanIdTransactionsRequest().dateFormat("dd 
MMMM yyyy").transactionDate("4 March 2023").locale("en")
-                            .transactionAmount(100.0));
-
             // Add Charge
-            Integer feeCharge_1 = ChargesHelper.createCharges(requestSpec, 
responseSpec,
-                    
ChargesHelper.getLoanSpecifiedDueDateJSON(ChargesHelper.CHARGE_CALCULATION_TYPE_FLAT,
 "10", false));
-
-            targetDate = LocalDate.of(2023, 3, 21);
-            final String feeChargeAddedDate_1 = 
dateFormatter.format(targetDate);
-            Integer feeLoanChargeId_1 = 
this.loanTransactionHelper.addChargesForLoan(loanId,
-                    
LoanTransactionHelper.getSpecifiedDueDateChargesForLoanAsJSON(String.valueOf(feeCharge_1),
 feeChargeAddedDate_1, "10"));
-
-            assertNotNull(feeLoanChargeId_1);
-
             // Run accrual for charge created date
-            
PeriodicAccrualAccountingHelper.runPeriodicAccrualAccounting(nextAccrualRunDate);
-
             // verify accrual transaction created for charges create date
-            checkAccrualTransaction(futureDate, 0.0f, 10.0f, 0.0f, loanId);
-
+            checkAccrualTransaction(LocalDate.of(2023, 3, 4), 0.0, 10.0, 0.0, 
loanId);
         } finally {
-            
globalConfigurationHelper.updateGlobalConfiguration(GlobalConfigurationConstants.ENABLE_BUSINESS_DATE,
-                    new PutGlobalConfigurationsRequest().enabled(false));
-            
globalConfigurationHelper.updateGlobalConfiguration(GlobalConfigurationConstants.CHARGE_ACCRUAL_DATE,
-                    new 
PutGlobalConfigurationsRequest().stringValue("due-date"));
+            resetChargeAccrualConfig();
         }
-
     }
 
     @Test
     public void 
loanAccrualTransactionOnChargeSubmittedTest_Add_Periodic_Accrual_Transactions_Job()
 {
         try {
+            enableSubmittedDateChargeAccrual(LocalDate.of(2023, 3, 3));
+            String loanExternalIdStr = UUID.randomUUID().toString();
+            final Long clientId = createClient();
+            final Long loanProductId = 
createLoanProduct(singleRepaymentAccrualProduct());
+            final Long loanId = createSingleRepaymentLoan(clientId, 
loanProductId, loanExternalIdStr);
 
+            addPenaltyCharge(loanId, "10 March 2023", 10.0);
             // Accounts oof periodic accrual
-            final Account assetAccount = 
this.accountHelper.createAssetAccount();
-            final Account incomeAccount = 
this.accountHelper.createIncomeAccount();
-            final Account expenseAccount = 
this.accountHelper.createExpenseAccount();
-            final Account overpaymentAccount = 
this.accountHelper.createLiabilityAccount();
+            addFeeCharge(loanId, "14 March 2023", 10.0);
 
+            final String jobName = "Add Periodic Accrual Transactions";
             // Set business date
-            LocalDate currentDate = LocalDate.of(2023, 3, 3);
-            final String accrualRunTillDate = 
dateFormatter.format(currentDate);
+            schedulerHelper.executeAndAwaitJob(jobName);
+            checkAccrualTransaction(LocalDate.of(2023, 3, 3), 0.0, 10.0, 10.0, 
loanId);
 
-            
globalConfigurationHelper.updateGlobalConfiguration(GlobalConfigurationConstants.ENABLE_BUSINESS_DATE,
-                    new PutGlobalConfigurationsRequest().enabled(true));
-            
BusinessDateHelper.updateBusinessDate(BusinessDateType.BUSINESS_DATE, 
currentDate);
-            
globalConfigurationHelper.updateGlobalConfiguration(GlobalConfigurationConstants.CHARGE_ACCRUAL_DATE,
-                    new 
PutGlobalConfigurationsRequest().stringValue("submitted-date"));
+            updateBusinessDate("04 March 2023");
+            makeLoanRepayment(loanExternalIdStr, repaymentRequest("4 March 
2023", 100.0));
             // Loan ExternalId
-            String loanExternalIdStr = UUID.randomUUID().toString();
+            addFeeCharge(loanId, "21 March 2023", 10.0);
 
+            schedulerHelper.executeAndAwaitJob(jobName);
             // Client and Loan account creation
-
-            final Integer clientId = 
clientHelper.createClient(ClientHelper.defaultClientCreationRequest()).getClientId().intValue();
-            final GetLoanProductsProductIdResponse 
getLoanProductsProductResponse = createLoanProduct(loanTransactionHelper, 
assetAccount,
-                    incomeAccount, expenseAccount, overpaymentAccount);
-            assertNotNull(getLoanProductsProductResponse);
-
-            final Integer loanId = createLoanAccount(clientId, 
getLoanProductsProductResponse.getId(), loanExternalIdStr);
-
             // Add Charge Penalty
-            Integer penalty = ChargesHelper.createCharges(requestSpec, 
responseSpec,
-                    
ChargesHelper.getLoanSpecifiedDueDateJSON(ChargesHelper.CHARGE_CALCULATION_TYPE_FLAT,
 "10", true));
-
-            LocalDate targetDate = LocalDate.of(2023, 3, 10);
-            final String penaltyCharge1AddedDate = 
dateFormatter.format(targetDate);
-
-            Integer penalty1LoanChargeId = 
this.loanTransactionHelper.addChargesForLoan(loanId,
-                    
LoanTransactionHelper.getSpecifiedDueDateChargesForLoanAsJSON(String.valueOf(penalty),
 penaltyCharge1AddedDate, "10"));
-
-            assertNotNull(penalty1LoanChargeId);
-
             // Add Charge Fee
-            Integer feeCharge = ChargesHelper.createCharges(requestSpec, 
responseSpec,
-                    
ChargesHelper.getLoanSpecifiedDueDateJSON(ChargesHelper.CHARGE_CALCULATION_TYPE_FLAT,
 "10", false));
-
-            targetDate = LocalDate.of(2023, 3, 14);
-            final String feeChargeAddedDate = dateFormatter.format(targetDate);
-            Integer feeLoanChargeId = 
this.loanTransactionHelper.addChargesForLoan(loanId,
-                    
LoanTransactionHelper.getSpecifiedDueDateChargesForLoanAsJSON(String.valueOf(feeCharge),
 feeChargeAddedDate, "10"));
-
-            assertNotNull(feeLoanChargeId);
-
             // Run periodic accrual job for business date
-            final String jobName = "Add Periodic Accrual Transactions";
-            SchedulerJobHelper.executeAndAwaitJob(jobName);
-
             // verify accrual transaction created for charges create date
-            checkAccrualTransaction(currentDate, 0.0f, 10.0f, 10.0f, loanId);
-
             // Set business date
-            LocalDate futureDate = LocalDate.of(2023, 3, 4);
-            final String nextAccrualRunDate = dateFormatter.format(futureDate);
-
-            
BusinessDateHelper.updateBusinessDate(BusinessDateType.BUSINESS_DATE, 
futureDate);
-
             // make repayment
-            final PostLoansLoanIdTransactionsResponse repaymentTransaction_1 = 
loanTransactionHelper.makeLoanRepayment(loanExternalIdStr,
-                    new PostLoansLoanIdTransactionsRequest().dateFormat("dd 
MMMM yyyy").transactionDate("4 March 2023").locale("en")
-                            .transactionAmount(100.0));
-
             // Add Charge
-            Integer feeCharge_1 = ChargesHelper.createCharges(requestSpec, 
responseSpec,
-                    
ChargesHelper.getLoanSpecifiedDueDateJSON(ChargesHelper.CHARGE_CALCULATION_TYPE_FLAT,
 "10", false));
-
-            targetDate = LocalDate.of(2023, 3, 21);
-            final String feeChargeAddedDate_1 = 
dateFormatter.format(targetDate);
-            Integer feeLoanChargeId_1 = 
this.loanTransactionHelper.addChargesForLoan(loanId,
-                    
LoanTransactionHelper.getSpecifiedDueDateChargesForLoanAsJSON(String.valueOf(feeCharge_1),
 feeChargeAddedDate_1, "10"));
-
-            assertNotNull(feeLoanChargeId_1);
-
             // Run periodic accrual job for business date
-            SchedulerJobHelper.executeAndAwaitJob(jobName);
-
             // verify accrual transaction created for charges create date
-            checkAccrualTransaction(futureDate, 0.0f, 10.0f, 0.0f, loanId);
-
+            checkAccrualTransaction(LocalDate.of(2023, 3, 4), 0.0, 10.0, 0.0, 
loanId);
         } finally {
-            
globalConfigurationHelper.updateGlobalConfiguration(GlobalConfigurationConstants.ENABLE_BUSINESS_DATE,
-                    new PutGlobalConfigurationsRequest().enabled(false));
-            
globalConfigurationHelper.updateGlobalConfiguration(GlobalConfigurationConstants.CHARGE_ACCRUAL_DATE,
-                    new 
PutGlobalConfigurationsRequest().stringValue("due-date"));
+            resetChargeAccrualConfig();
         }
     }
 
     @Test
     public void 
loanAccrualTransactionOnChargeSubmittedTest_Loan_COB_AddPeriodicAccrualEntriesBusinessStep()
 {
         try {
+            LocalDate currentDate = LocalDate.of(2023, 3, 3);
+            enableSubmittedDateChargeAccrual(currentDate);
+            String loanExternalIdStr = UUID.randomUUID().toString();
+            final Long clientId = createClient();
+            final Long loanProductId = 
createLoanProduct(singleRepaymentAccrualProduct());
+            final Long loanId = createSingleRepaymentLoan(clientId, 
loanProductId, loanExternalIdStr);
 
+            addPenaltyCharge(loanId, "10 March 2023", 10.0);
             // Accounts oof periodic accrual
-            final Account assetAccount = 
this.accountHelper.createAssetAccount();
-            final Account incomeAccount = 
this.accountHelper.createIncomeAccount();
-            final Account expenseAccount = 
this.accountHelper.createExpenseAccount();
-            final Account overpaymentAccount = 
this.accountHelper.createLiabilityAccount();
+            addFeeCharge(loanId, "14 March 2023", 10.0);
 
+            
updateBusinessDate(Utils.dateFormatter.format(currentDate.plusDays(1)));
             // Set business date
-            LocalDate currentDate = LocalDate.of(2023, 3, 3);
-            final String accrualRunTillDate = 
dateFormatter.format(currentDate);
+            final String jobName = "Loan COB";
+            schedulerHelper.executeAndAwaitJob(jobName);
+            checkAccrualTransaction(LocalDate.of(2023, 3, 3), 0.0, 10.0, 10.0, 
loanId);
 
-            
globalConfigurationHelper.updateGlobalConfiguration(GlobalConfigurationConstants.ENABLE_BUSINESS_DATE,
-                    new PutGlobalConfigurationsRequest().enabled(true));
-            
BusinessDateHelper.updateBusinessDate(BusinessDateType.BUSINESS_DATE, 
currentDate);
-            
globalConfigurationHelper.updateGlobalConfiguration(GlobalConfigurationConstants.CHARGE_ACCRUAL_DATE,
-                    new 
PutGlobalConfigurationsRequest().stringValue("submitted-date"));
+            LocalDate futureDate = LocalDate.of(2023, 3, 4);
+            updateBusinessDate("04 March 2023");
+            makeLoanRepayment(loanExternalIdStr, repaymentRequest("4 March 
2023", 100.0));
             // Loan ExternalId
-            String loanExternalIdStr = UUID.randomUUID().toString();
+            addFeeCharge(loanId, "21 March 2023", 10.0);
 
+            
updateBusinessDate(Utils.dateFormatter.format(futureDate.plusDays(1)));
+            schedulerHelper.executeAndAwaitJob(jobName);
             // Client and Loan account creation
-
-            final Integer clientId = 
clientHelper.createClient(ClientHelper.defaultClientCreationRequest()).getClientId().intValue();
-            final GetLoanProductsProductIdResponse 
getLoanProductsProductResponse = createLoanProduct(loanTransactionHelper, 
assetAccount,
-                    incomeAccount, expenseAccount, overpaymentAccount);
-            assertNotNull(getLoanProductsProductResponse);
-
-            final Integer loanId = createLoanAccount(clientId, 
getLoanProductsProductResponse.getId(), loanExternalIdStr);
-
             // Add Charge Penalty
-            Integer penalty = ChargesHelper.createCharges(requestSpec, 
responseSpec,
-                    
ChargesHelper.getLoanSpecifiedDueDateJSON(ChargesHelper.CHARGE_CALCULATION_TYPE_FLAT,
 "10", true));
-
-            LocalDate targetDate = LocalDate.of(2023, 3, 10);
-            final String penaltyCharge1AddedDate = 
dateFormatter.format(targetDate);
-
-            Integer penalty1LoanChargeId = 
this.loanTransactionHelper.addChargesForLoan(loanId,
-                    
LoanTransactionHelper.getSpecifiedDueDateChargesForLoanAsJSON(String.valueOf(penalty),
 penaltyCharge1AddedDate, "10"));
-
-            assertNotNull(penalty1LoanChargeId);
-
             // Add Charge Fee
-            Integer feeCharge = ChargesHelper.createCharges(requestSpec, 
responseSpec,
-                    
ChargesHelper.getLoanSpecifiedDueDateJSON(ChargesHelper.CHARGE_CALCULATION_TYPE_FLAT,
 "10", false));
-
-            targetDate = LocalDate.of(2023, 3, 14);
-            final String feeChargeAddedDate = dateFormatter.format(targetDate);
-            Integer feeLoanChargeId = 
this.loanTransactionHelper.addChargesForLoan(loanId,
-                    
LoanTransactionHelper.getSpecifiedDueDateChargesForLoanAsJSON(String.valueOf(feeCharge),
 feeChargeAddedDate, "10"));
-
-            assertNotNull(feeLoanChargeId);
-
             // Run cob job for business date + 1
-            
BusinessDateHelper.updateBusinessDate(BusinessDateType.BUSINESS_DATE, 
currentDate.plusDays(1));
-
-            final String jobName = "Loan COB";
-            SchedulerJobHelper.executeAndAwaitJob(jobName);
-
             // verify accrual transaction created for charges create date
-            checkAccrualTransaction(currentDate, 0.0f, 10.0f, 10.0f, loanId);
-
             // Set business date
-            LocalDate futureDate = LocalDate.of(2023, 3, 4);
-            final String nextAccrualRunDate = dateFormatter.format(futureDate);
-
-            
BusinessDateHelper.updateBusinessDate(BusinessDateType.BUSINESS_DATE, 
futureDate);
-
             // make repayment
-            final PostLoansLoanIdTransactionsResponse repaymentTransaction_1 = 
loanTransactionHelper.makeLoanRepayment(loanExternalIdStr,
-                    new PostLoansLoanIdTransactionsRequest().dateFormat("dd 
MMMM yyyy").transactionDate("4 March 2023").locale("en")
-                            .transactionAmount(100.0));
-
             // Add Charge
-            Integer feeCharge_1 = ChargesHelper.createCharges(requestSpec, 
responseSpec,
-                    
ChargesHelper.getLoanSpecifiedDueDateJSON(ChargesHelper.CHARGE_CALCULATION_TYPE_FLAT,
 "10", false));
-
-            targetDate = LocalDate.of(2023, 3, 21);
-            final String feeChargeAddedDate_1 = 
dateFormatter.format(targetDate);
-            Integer feeLoanChargeId_1 = 
this.loanTransactionHelper.addChargesForLoan(loanId,
-                    
LoanTransactionHelper.getSpecifiedDueDateChargesForLoanAsJSON(String.valueOf(feeCharge_1),
 feeChargeAddedDate_1, "10"));
-
-            assertNotNull(feeLoanChargeId_1);
-
             // Run cob job for business date + 1
-            
BusinessDateHelper.updateBusinessDate(BusinessDateType.BUSINESS_DATE, 
futureDate.plusDays(1));
-            SchedulerJobHelper.executeAndAwaitJob(jobName);
-
             // verify accrual transaction created for charges create date
-            checkAccrualTransaction(futureDate, 0.0f, 10.0f, 0.0f, loanId);
-
+            checkAccrualTransaction(futureDate, 0.0, 10.0, 0.0, loanId);
         } finally {
-            
globalConfigurationHelper.updateGlobalConfiguration(GlobalConfigurationConstants.ENABLE_BUSINESS_DATE,
-                    new PutGlobalConfigurationsRequest().enabled(false));
-            
globalConfigurationHelper.updateGlobalConfiguration(GlobalConfigurationConstants.CHARGE_ACCRUAL_DATE,
-                    new 
PutGlobalConfigurationsRequest().stringValue("due-date"));
+            resetChargeAccrualConfig();
         }
     }
 
     @Test
     public void 
loanAccrualTransactionOnChargeSubmittedTest_Add_Accrual_Transactions_Job() {
         try {
+            enableSubmittedDateChargeAccrual(LocalDate.of(2023, 3, 3));
+            String loanExternalIdStr = UUID.randomUUID().toString();
+            final Long clientId = createClient();
+            final Long loanProductId = 
createLoanProduct(singleRepaymentAccrualProduct());
+            final Long loanId = createSingleRepaymentLoan(clientId, 
loanProductId, loanExternalIdStr);
 
+            addPenaltyCharge(loanId, "10 March 2023", 10.0);
             // Accounts oof periodic accrual
-            final Account assetAccount = 
this.accountHelper.createAssetAccount();
-            final Account incomeAccount = 
this.accountHelper.createIncomeAccount();
-            final Account expenseAccount = 
this.accountHelper.createExpenseAccount();
-            final Account overpaymentAccount = 
this.accountHelper.createLiabilityAccount();
+            addFeeCharge(loanId, "14 March 2023", 10.0);
 
+            final String jobName = "Add Accrual Transactions";
             // Set business date
-            LocalDate currentDate = LocalDate.of(2023, 3, 3);
-            final String accrualRunTillDate = 
dateFormatter.format(currentDate);
+            schedulerHelper.executeAndAwaitJob(jobName);
+            checkAccrualTransaction(LocalDate.of(2023, 3, 3), 0.0, 10.0, 10.0, 
loanId);
 
-            
globalConfigurationHelper.updateGlobalConfiguration(GlobalConfigurationConstants.ENABLE_BUSINESS_DATE,
-                    new PutGlobalConfigurationsRequest().enabled(true));
-            
BusinessDateHelper.updateBusinessDate(BusinessDateType.BUSINESS_DATE, 
currentDate);
-            
globalConfigurationHelper.updateGlobalConfiguration(GlobalConfigurationConstants.CHARGE_ACCRUAL_DATE,
-                    new 
PutGlobalConfigurationsRequest().stringValue("submitted-date"));
+            updateBusinessDate("04 March 2023");
+            makeLoanRepayment(loanExternalIdStr, repaymentRequest("4 March 
2023", 100.0));
             // Loan ExternalId
-            String loanExternalIdStr = UUID.randomUUID().toString();
+            addFeeCharge(loanId, "21 March 2023", 10.0);
 
+            schedulerHelper.executeAndAwaitJob(jobName);
             // Client and Loan account creation
-
-            final Integer clientId = 
clientHelper.createClient(ClientHelper.defaultClientCreationRequest()).getClientId().intValue();
-            final GetLoanProductsProductIdResponse 
getLoanProductsProductResponse = createLoanProduct(loanTransactionHelper, 
assetAccount,
-                    incomeAccount, expenseAccount, overpaymentAccount);
-            assertNotNull(getLoanProductsProductResponse);
-
-            final Integer loanId = createLoanAccount(clientId, 
getLoanProductsProductResponse.getId(), loanExternalIdStr);
-
             // Add Charge Penalty
-            Integer penalty = ChargesHelper.createCharges(requestSpec, 
responseSpec,

Review Comment:
   Same cause, same fix. The charge steps are still there - they moved into two 
small helpers so the
   same two lines are not repeated in all 7 tests!



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to