ruchiD commented on code in PR #3288:
URL: https://github.com/apache/fineract/pull/3288#discussion_r1254072669


##########
integration-tests/src/test/java/org/apache/fineract/integrationtests/DueDateRespectiveLoanRepaymentScheduleTest.java:
##########
@@ -1397,13 +1403,288 @@ public void scenario9() {
         }
     }
 
+    // Scenario10:
+    // 
DUE_PENALTY_INTEREST_PRINCIPAL_FEE_IN_ADVANCE_PENALTY_INTEREST_PRINCIPAL_FEE_STRATEGY
+    // 1. Disburse the loan
+    // 2. Snooze fee
+    // 3. Merchant issued refund (partial)
+    // 4. Charge adjustment (same day)
+    // 5. Merchant issued refund (rest)
+    @Test
+    public void scenario10() {
+        try {
+            GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, 
responseSpec, Boolean.TRUE);
+            businessDateHelper.updateBusinessDate(new 
BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
+                    .date("2023.05.14").dateFormat("yyyy.MM.dd").locale("en"));
+            
GlobalConfigurationHelper.updateChargeAccrualDateConfiguration(requestSpec, 
responseSpec, "submitted-date");
+
+            final Account assetAccount = 
this.accountHelper.createAssetAccount();
+            final Account incomeAccount = 
this.accountHelper.createIncomeAccount();
+            final Account expenseAccount = 
this.accountHelper.createExpenseAccount();
+            final Account overpaymentAccount = 
this.accountHelper.createLiabilityAccount();
+
+            Integer fee = ChargesHelper.createCharges(requestSpec, 
responseSpec,
+                    
ChargesHelper.getLoanSpecifiedDueDateJSON(ChargesHelper.CHARGE_CALCULATION_TYPE_FLAT,
 "3.65", false));
+            final Integer loanProductID = 
createLoanProductWithNoAccountingNoInterest("1000", "30", "1", "0",
+                    
LoanProductTestBuilder.DUE_PENALTY_INTEREST_PRINCIPAL_FEE_IN_ADVANCE_PENALTY_INTEREST_PRINCIPAL_FEE_STRATEGY,
+                    assetAccount, incomeAccount, expenseAccount, 
overpaymentAccount);
+            final Integer clientID = ClientHelper.createClient(requestSpec, 
responseSpec, "01 January 2023");
+
+            final Integer loanID = applyForLoanApplication(clientID, 
loanProductID, "1000", "30", "30", "1", "0",
+                    
LoanApplicationTestBuilder.DUE_PENALTY_INTEREST_PRINCIPAL_FEE_IN_ADVANCE_PENALTY_INTEREST_PRINCIPAL_FEE_STRATEGY,
+                    "14 May 2023", "14 May 2023");
+
+            HashMap<String, Object> loanStatusHashMap = 
LoanStatusChecker.getStatusOfLoan(requestSpec, responseSpec, loanID);
+            LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap);
+
+            loanStatusHashMap = loanTransactionHelper.approveLoan("14 May 
2023", loanID);
+            LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap);
+            
LoanStatusChecker.verifyLoanIsWaitingForDisbursal(loanStatusHashMap);
+
+            loanStatusHashMap = 
loanTransactionHelper.disburseLoanWithTransactionAmount("14 May 2023", loanID, 
"127.95");
+            LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap);
+
+            businessDateHelper.updateBusinessDate(new 
BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
+                    .date("2023.06.11").dateFormat("yyyy.MM.dd").locale("en"));
+
+            final String requestJSON = new 
LoanRescheduleRequestTestBuilder().updateRescheduleFromDate("13 June 2023")
+                    .updateAdjustedDueDate("13 July 
2023").updateSubmittedOnDate("11 June 2023").updateGraceOnPrincipal(null)
+                    
.updateGraceOnInterest(null).updateExtraTerms(null).build(loanID.toString());
+
+            final HashMap<String, String> map = new HashMap<>();
+            map.put("locale", "en");
+            map.put("dateFormat", "dd MMMM yyyy");
+            map.put("approvedOnDate", "11 June 2023");
+            final String aproveRequestJSON = new Gson().toJson(map);
+
+            Integer loanRescheduleRequestId = 
this.loanRescheduleRequestHelper.createLoanRescheduleRequest(requestJSON);
+            
this.loanRescheduleRequestHelper.approveLoanRescheduleRequest(loanRescheduleRequestId,
 aproveRequestJSON);
+            Integer penalty1LoanChargeId = 
loanTransactionHelper.addChargesForLoan(loanID,
+                    
LoanTransactionHelper.getSpecifiedDueDateChargesForLoanAsJSON(String.valueOf(fee),
 "13 July 2023", "3.65"));
+            businessDateHelper.updateBusinessDate(new 
BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
+                    .date("2023.06.12").dateFormat("yyyy.MM.dd").locale("en"));
+            inlineLoanCOBHelper.executeInlineCOB(List.of(loanID.longValue()));
+
+            GetLoansLoanIdResponse loanDetails = 
loanTransactionHelper.getLoanDetails((long) loanID);
+            assertEquals(131.6, 
loanDetails.getSummary().getTotalOutstanding());
+            assertEquals(131.6, 
loanDetails.getRepaymentSchedule().getTotalOutstanding());
+            assertEquals(3.65, 
loanDetails.getRepaymentSchedule().getPeriods().get(1).getFeeChargesDue());
+            assertEquals(0.0, 
loanDetails.getRepaymentSchedule().getPeriods().get(1).getFeeChargesPaid());
+            assertEquals(3.65, 
loanDetails.getRepaymentSchedule().getPeriods().get(1).getFeeChargesOutstanding());
+            assertEquals(0.0, 
loanDetails.getRepaymentSchedule().getPeriods().get(1).getPenaltyChargesDue());
+            assertEquals(0.0, 
loanDetails.getRepaymentSchedule().getPeriods().get(1).getPenaltyChargesPaid());
+            assertEquals(0.0, 
loanDetails.getRepaymentSchedule().getPeriods().get(1).getPenaltyChargesOutstanding());
+            assertEquals(127.95, 
loanDetails.getRepaymentSchedule().getPeriods().get(1).getPrincipalDue());
+            assertEquals(0.0, 
loanDetails.getRepaymentSchedule().getPeriods().get(1).getPrincipalPaid());
+            assertEquals(127.95, 
loanDetails.getRepaymentSchedule().getPeriods().get(1).getPrincipalOutstanding());
+            assertTrue(loanDetails.getStatus().getActive());
+
+            businessDateHelper.updateBusinessDate(new 
BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
+                    .date("2023.06.17").dateFormat("yyyy.MM.dd").locale("en"));
+            PostLoansLoanIdTransactionsResponse merchantIssuedRefund1 = 
loanTransactionHelper.makeMerchantIssuedRefund(Long.valueOf(loanID),
+                    new 
PostLoansLoanIdTransactionsRequest().locale("en").dateFormat("dd MMMM 
yyyy").transactionDate("17 June 2023")
+                            .transactionAmount(125.0));
+
+            loanDetails = loanTransactionHelper.getLoanDetails((long) loanID);
+            assertEquals(6.6, loanDetails.getSummary().getTotalOutstanding());
+            assertEquals(6.6, 
loanDetails.getRepaymentSchedule().getTotalOutstanding());
+            assertEquals(3.65, 
loanDetails.getRepaymentSchedule().getPeriods().get(1).getFeeChargesDue());
+            assertEquals(0.0, 
loanDetails.getRepaymentSchedule().getPeriods().get(1).getFeeChargesPaid());
+            assertEquals(3.65, 
loanDetails.getRepaymentSchedule().getPeriods().get(1).getFeeChargesOutstanding());
+            assertEquals(0.0, 
loanDetails.getRepaymentSchedule().getPeriods().get(1).getPenaltyChargesDue());
+            assertEquals(0.0, 
loanDetails.getRepaymentSchedule().getPeriods().get(1).getPenaltyChargesPaid());
+            assertEquals(0.0, 
loanDetails.getRepaymentSchedule().getPeriods().get(1).getPenaltyChargesOutstanding());
+            assertEquals(127.95, 
loanDetails.getRepaymentSchedule().getPeriods().get(1).getPrincipalDue());
+            assertEquals(125.0, 
loanDetails.getRepaymentSchedule().getPeriods().get(1).getPrincipalPaid());
+            assertEquals(2.95, 
loanDetails.getRepaymentSchedule().getPeriods().get(1).getPrincipalOutstanding());
+            assertTrue(loanDetails.getStatus().getActive());
+

Review Comment:
   Hi @adamsaghy, Do we want to check distribution of various 
portions(principal, fee, penalty, interest etc) for transaction also as we did 
for repayment schedule.
   Same for rest of the test and scenario11.



-- 
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