adamsaghy commented on code in PR #4282:
URL: https://github.com/apache/fineract/pull/4282#discussion_r1927233282


##########
integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanCOBCreateAccrualsTest.java:
##########
@@ -423,4 +424,44 @@ public void chargeForObligationMetLoan() {
 
         });
     }
+
+    @Test
+    public void testEarlyRepaymentAccruals() {
+        AtomicReference<Long> loanIdRef = new AtomicReference<>();
+        setup();
+        final PostLoanProductsResponse loanProductsResponse = 
loanProductHelper.createLoanProduct(create4IProgressive());
+
+        runAt("20 December 2024", () -> {
+            Long loanId = applyAndApproveProgressiveLoan(client.getClientId(), 
loanProductsResponse.getResourceId(), "20 December 2024",
+                    430.0, 26.0, 6, null);
+
+            loanIdRef.set(loanId);
+
+            disburseLoan(loanId, BigDecimal.valueOf(430), "20 December 2024");
+
+            GetLoansLoanIdResponse loanDetails = 
loanTransactionHelper.getLoanDetails(loanId);
+            validateFullyUnpaidRepaymentPeriod(loanDetails, 1, "20 January 
2025", 67.88, 0, 0, 9.32);
+            validateFullyUnpaidRepaymentPeriod(loanDetails, 2, "20 February 
2025", 69.35, 0, 0, 7.85);
+            validateFullyUnpaidRepaymentPeriod(loanDetails, 3, "20 March 
2025", 70.86, 0, 0, 6.34);
+            validateFullyUnpaidRepaymentPeriod(loanDetails, 4, "20 April 
2025", 72.39, 0, 0, 4.81);
+            validateFullyUnpaidRepaymentPeriod(loanDetails, 5, "20 May 2025", 
73.96, 0, 0, 3.24);
+            validateFullyUnpaidRepaymentPeriod(loanDetails, 6, "20 June 2025", 
75.56, 0, 0, 1.64);
+
+            verifyTransactions(loanId, transaction(430.0d, "Disbursement", "20 
December 2024"));
+            executeInlineCOB(loanId);
+        });
+        runAt("30 December 2024", () -> {
+            Long loanId = loanIdRef.get();
+            loanTransactionHelper.makeLoanRepayment("30 December 2024", 
200.0F, loanId.intValue());
+        });
+        runAt("22 March 2025", () -> {
+            Long loanId = loanIdRef.get();
+            executeInlineCOB(loanId);
+
+            GetLoansLoanIdResponse loanDetails = 
loanTransactionHelper.getLoanDetails(loanId);
+            
Assertions.assertTrue(loanDetails.getTransactions().stream().noneMatch(t -> 
(t.getType().getAccrual() && t.getAmount() > 0.31)

Review Comment:
   This is a little bit weird way to check whether there was any "unwanted" 
accrual / accrual adjustment. Would you mind rather check specifically the 
original issue does not happens on the due date and due date + 1 at least?
   
   However the best would be to check each transaction!
   
   Something like this:
   ```
     verifyTransactions(loanId, //
                       transaction(430.d, "Disbursement", "20 December 2024", 
430.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, false), //
                       transaction(200.0d, "Repayment", "30 December 2024", 0, 
197.0, 0, 0, 0, 0, 3.0, false)),//
                       transaction(0.3d, "Accrual", "21 December 2024", 0, 0, 
0, 0, 0, 0, 0.3, false)),//
                       ....
                       transaction(0.3d, "Accrual", "29 December 2024", 0, 0, 
0, 0, 0, 0, 0.3, false)),//
   ```



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