|
26 | 26 | import io.cucumber.java.en.Then; |
27 | 27 | import io.cucumber.java.en.When; |
28 | 28 | import java.math.BigDecimal; |
| 29 | +import java.time.LocalDate; |
29 | 30 | import java.util.List; |
30 | 31 | import java.util.Map; |
31 | 32 | import java.util.UUID; |
|
38 | 39 | import org.apache.fineract.client.models.DeleteWorkingCapitalLoanProductsProductIdResponse; |
39 | 40 | import org.apache.fineract.client.models.GetConfigurableAttributes; |
40 | 41 | import org.apache.fineract.client.models.GetPaymentAllocation; |
| 42 | +import org.apache.fineract.client.models.GetWorkingCapitalLoanDelinquencyRangeScheduleTagHistoryResponse; |
41 | 43 | import org.apache.fineract.client.models.GetWorkingCapitalLoanProductsProductIdResponse; |
42 | 44 | import org.apache.fineract.client.models.GetWorkingCapitalLoanProductsResponse; |
43 | 45 | import org.apache.fineract.client.models.GetWorkingCapitalLoanProductsTemplateResponse; |
| 46 | +import org.apache.fineract.client.models.InternalWorkingCapitalLoanPaymentRequest; |
44 | 47 | import org.apache.fineract.client.models.PostAllowAttributeOverrides; |
45 | 48 | import org.apache.fineract.client.models.PostWorkingCapitalLoanProductsRequest; |
46 | 49 | import org.apache.fineract.client.models.PostWorkingCapitalLoanProductsRequest.AccountingRuleEnum; |
47 | 50 | import org.apache.fineract.client.models.PostWorkingCapitalLoanProductsResponse; |
| 51 | +import org.apache.fineract.client.models.PostWorkingCapitalLoansResponse; |
48 | 52 | import org.apache.fineract.client.models.PutWorkingCapitalLoanProductsProductIdRequest; |
49 | 53 | import org.apache.fineract.client.models.PutWorkingCapitalLoanProductsProductIdResponse; |
50 | 54 | import org.apache.fineract.client.models.StringEnumOptionData; |
|
59 | 63 | import org.apache.fineract.test.stepdef.AbstractStepDef; |
60 | 64 | import org.apache.fineract.test.support.TestContextKey; |
61 | 65 | import org.assertj.core.api.SoftAssertions; |
| 66 | +import org.junit.jupiter.api.Assertions; |
62 | 67 |
|
63 | 68 | @Slf4j |
64 | 69 | @RequiredArgsConstructor |
@@ -719,6 +724,53 @@ private void assertGLAccountMappingId(final Map<String, ?> mappings, final Strin |
719 | 724 | assertions.assertAll(); |
720 | 725 | } |
721 | 726 |
|
| 727 | + private Long getWorkingCapitalLoanResourceId() { |
| 728 | + PostWorkingCapitalLoansResponse response = testContext().get(TestContextKey.LOAN_CREATE_RESPONSE); |
| 729 | + return response.getResourceId(); |
| 730 | + } |
| 731 | + |
| 732 | + @When("Admin makes Internal Payment {string} on {string}") |
| 733 | + public void internalPayWCLoan(String amount, String transactionDate) { |
| 734 | + Long resourceId = getWorkingCapitalLoanResourceId(); |
| 735 | + fineractFeignClient.workingCapitalLoans().payment(resourceId, new InternalWorkingCapitalLoanPaymentRequest() |
| 736 | + .amount(BigDecimal.valueOf(Double.parseDouble(amount))).transactionDate(LocalDate.parse(transactionDate))); |
| 737 | + } |
| 738 | + |
| 739 | + @Then("Delinquency Tag History for Working Capital loan has lines:") |
| 740 | + public void checkDelinquencyHistory(final DataTable table) { |
| 741 | + Long resourceId = getWorkingCapitalLoanResourceId(); |
| 742 | + List<GetWorkingCapitalLoanDelinquencyRangeScheduleTagHistoryResponse> actualLines = ok( |
| 743 | + () -> fineractFeignClient.workingCapitalLoans().getDelinquencyRangeScheduleTagHistoryById(resourceId)); |
| 744 | + |
| 745 | + // Sort by addedOnDate (descending), then by periodNumber (descending) |
| 746 | + actualLines.sort((a, b) -> { |
| 747 | + int dateCompare = b.getAddedOnDate().compareTo(a.getAddedOnDate()); |
| 748 | + if (dateCompare != 0) { |
| 749 | + return dateCompare; |
| 750 | + } |
| 751 | + return b.getPeriodNumber().compareTo(a.getPeriodNumber()); |
| 752 | + }); |
| 753 | + |
| 754 | + log.debug("Sorted Loan Delinquency History: {}", actualLines); |
| 755 | + List<List<String>> rows = table.asLists(); |
| 756 | + Assertions.assertEquals(rows.size() - 1, actualLines.size()); |
| 757 | + for (int i = 0; i < rows.size() - 1; i++) { |
| 758 | + GetWorkingCapitalLoanDelinquencyRangeScheduleTagHistoryResponse actual = actualLines.get(i); |
| 759 | + Assertions.assertNotNull(actual); |
| 760 | + List<String> expected = rows.get(i + 1); |
| 761 | + Assertions.assertEquals(expected.get(0), actual.getPeriodNumber() != null ? actual.getPeriodNumber().toString() : null); |
| 762 | + Assertions.assertEquals(expected.get(1), actual.getAddedOnDate() != null ? actual.getAddedOnDate().toString() : null); |
| 763 | + Assertions.assertEquals(expected.get(2), actual.getLiftedOnDate() != null ? actual.getLiftedOnDate().toString() : null); |
| 764 | + |
| 765 | + Assertions.assertNotNull(actual.getDelinquencyRange()); |
| 766 | + Assertions.assertEquals(expected.get(3), actual.getDelinquencyRange().getClassification()); |
| 767 | + Assertions.assertEquals(expected.get(4), actual.getDelinquencyRange().getMinimumAgeDays() == null ? null |
| 768 | + : actual.getDelinquencyRange().getMinimumAgeDays().toString()); |
| 769 | + Assertions.assertEquals(expected.get(5), actual.getDelinquencyRange().getMaximumAgeDays() == null ? null |
| 770 | + : actual.getDelinquencyRange().getMaximumAgeDays().toString()); |
| 771 | + } |
| 772 | + } |
| 773 | + |
722 | 774 | public PostWorkingCapitalLoanProductsResponse createWorkingCapitalLoanProduct( |
723 | 775 | PostWorkingCapitalLoanProductsRequest workingCapitalProductRequest) { |
724 | 776 | String workingCapitalProductName = workingCapitalProductRequest.getName(); |
|
0 commit comments