FINERACT-1724: Asset externalization of non-active loans
This commit is contained in:
committed by
Adam Saghy
parent
7c80bf2ffc
commit
61915bbcc4
+11
-3
@@ -119,9 +119,8 @@ public class GlobalConfigurationHelper {
|
||||
ArrayList<HashMap> expectedGlobalConfigurations = getAllDefaultGlobalConfigurations();
|
||||
ArrayList<HashMap> actualGlobalConfigurations = getAllGlobalConfigurations(requestSpec, responseSpec);
|
||||
|
||||
// There are currently 50 global configurations.
|
||||
Assertions.assertEquals(51, expectedGlobalConfigurations.size());
|
||||
Assertions.assertEquals(51, actualGlobalConfigurations.size());
|
||||
Assertions.assertEquals(52, expectedGlobalConfigurations.size());
|
||||
Assertions.assertEquals(52, actualGlobalConfigurations.size());
|
||||
|
||||
for (int i = 0; i < expectedGlobalConfigurations.size(); i++) {
|
||||
|
||||
@@ -566,6 +565,15 @@ public class GlobalConfigurationHelper {
|
||||
accrualForChargeDate.put("string_value", "due-date");
|
||||
defaults.add(accrualForChargeDate);
|
||||
|
||||
HashMap<String, Object> assetExternalizationOfNonActiveLoans = new HashMap<>();
|
||||
assetExternalizationOfNonActiveLoans.put("id", 57);
|
||||
assetExternalizationOfNonActiveLoans.put("name", "asset-externalization-of-non-active-loans");
|
||||
assetExternalizationOfNonActiveLoans.put("value", 0);
|
||||
assetExternalizationOfNonActiveLoans.put("enabled", true);
|
||||
assetExternalizationOfNonActiveLoans.put("trapDoor", false);
|
||||
assetExternalizationOfNonActiveLoans.put("string_value", "due-date");
|
||||
defaults.add(assetExternalizationOfNonActiveLoans);
|
||||
|
||||
return defaults;
|
||||
}
|
||||
|
||||
|
||||
+138
-5
@@ -21,7 +21,10 @@ package org.apache.fineract.integrationtests.investor.externalassetowner;
|
||||
import static org.apache.fineract.client.models.ExternalTransferData.StatusEnum.ACTIVE;
|
||||
import static org.apache.fineract.client.models.ExternalTransferData.StatusEnum.BUYBACK;
|
||||
import static org.apache.fineract.client.models.ExternalTransferData.StatusEnum.CANCELLED;
|
||||
import static org.apache.fineract.client.models.ExternalTransferData.StatusEnum.DECLINED;
|
||||
import static org.apache.fineract.client.models.ExternalTransferData.StatusEnum.PENDING;
|
||||
import static org.apache.fineract.client.models.ExternalTransferData.SubStatusEnum.BALANCE_ZERO;
|
||||
import static org.apache.fineract.client.models.ExternalTransferData.SubStatusEnum.SAMEDAY_TRANSFERS;
|
||||
import static org.apache.fineract.infrastructure.businessdate.domain.BusinessDateType.BUSINESS_DATE;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||
@@ -496,6 +499,118 @@ public class InitiateExternalAssetOwnerTransferTest {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void saleIsDeclinedWhenLoanIsCancelled() {
|
||||
try {
|
||||
GlobalConfigurationHelper.manageConfigurations(REQUEST_SPEC, RESPONSE_SPEC,
|
||||
GlobalConfigurationHelper.ENABLE_AUTOGENERATED_EXTERNAL_ID, true);
|
||||
setInitialBusinessDate("2020-03-02");
|
||||
Integer clientID = createClient();
|
||||
Integer loanID = createLoanForClient(clientID);
|
||||
|
||||
PostInitiateTransferResponse saleTransferResponse = createSaleTransfer(loanID, "2020-03-06");
|
||||
updateBusinessDateAndExecuteCOBJob("2020-03-04");
|
||||
|
||||
LOAN_TRANSACTION_HELPER.writeOffLoan("04 March 2020", loanID);
|
||||
|
||||
getAndValidateExternalAssetOwnerTransferByLoan(loanID,
|
||||
ExpectedExternalTransferData.expected(PENDING, saleTransferResponse.getResourceExternalId(), "2020-03-06", "2020-03-02",
|
||||
"2020-03-04"),
|
||||
ExpectedExternalTransferData.expected(DECLINED, saleTransferResponse.getResourceExternalId(), "2020-03-06",
|
||||
"2020-03-04", "2020-03-04", BALANCE_ZERO));
|
||||
} finally {
|
||||
cleanUpAndRestoreBusinessDate();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void buybackIsExecutedWhenLoanIsCancelled() {
|
||||
try {
|
||||
GlobalConfigurationHelper.manageConfigurations(REQUEST_SPEC, RESPONSE_SPEC,
|
||||
GlobalConfigurationHelper.ENABLE_AUTOGENERATED_EXTERNAL_ID, true);
|
||||
setInitialBusinessDate("2020-03-02");
|
||||
Integer clientID = createClient();
|
||||
Integer loanID = createLoanForClient(clientID);
|
||||
|
||||
PostInitiateTransferResponse saleTransferResponse = createSaleTransfer(loanID, "2020-03-04");
|
||||
updateBusinessDateAndExecuteCOBJob("2020-03-05");
|
||||
PostInitiateTransferResponse buybackTransferResponse = createBuybackTransfer(loanID, "2020-03-06");
|
||||
|
||||
LOAN_TRANSACTION_HELPER.writeOffLoan("04 March 2020", loanID);
|
||||
|
||||
getAndValidateExternalAssetOwnerTransferByLoan(loanID,
|
||||
ExpectedExternalTransferData.expected(PENDING, saleTransferResponse.getResourceExternalId(), "2020-03-04", "2020-03-02",
|
||||
"2020-03-04"),
|
||||
ExpectedExternalTransferData.expected(ACTIVE, saleTransferResponse.getResourceExternalId(), "2020-03-04", "2020-03-05",
|
||||
"2020-03-05", true, new BigDecimal("15757.420000"), new BigDecimal("15000.000000"),
|
||||
new BigDecimal("757.420000"), new BigDecimal("0.000000"), new BigDecimal("0.000000"),
|
||||
new BigDecimal("0.000000")),
|
||||
ExpectedExternalTransferData.expected(BUYBACK, buybackTransferResponse.getResourceExternalId(), "2020-03-06",
|
||||
"2020-03-05", "2020-03-05", true, new BigDecimal("15757.420000"), new BigDecimal("15000.000000"),
|
||||
new BigDecimal("757.420000"), new BigDecimal("0.000000"), new BigDecimal("0.000000"),
|
||||
new BigDecimal("0.000000")));
|
||||
getAndValidateThereIsNoActiveMapping(saleTransferResponse.getResourceExternalId());
|
||||
} finally {
|
||||
cleanUpAndRestoreBusinessDate();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void buybackAndSaleIsCancelledWhenLoanIsCancelled() {
|
||||
try {
|
||||
GlobalConfigurationHelper.manageConfigurations(REQUEST_SPEC, RESPONSE_SPEC,
|
||||
GlobalConfigurationHelper.ENABLE_AUTOGENERATED_EXTERNAL_ID, true);
|
||||
setInitialBusinessDate("2020-03-02");
|
||||
Integer clientID = createClient();
|
||||
Integer loanID = createLoanForClient(clientID);
|
||||
|
||||
PostInitiateTransferResponse saleTransferResponse = createSaleTransfer(loanID, "2020-03-04");
|
||||
PostInitiateTransferResponse buybackTransferResponse = createBuybackTransfer(loanID, "2020-03-06");
|
||||
|
||||
LOAN_TRANSACTION_HELPER.writeOffLoan("02 March 2020", loanID);
|
||||
|
||||
getAndValidateExternalAssetOwnerTransferByLoan(loanID,
|
||||
ExpectedExternalTransferData.expected(PENDING, saleTransferResponse.getResourceExternalId(), "2020-03-04", "2020-03-02",
|
||||
"2020-03-02"),
|
||||
ExpectedExternalTransferData.expected(BUYBACK, buybackTransferResponse.getResourceExternalId(), "2020-03-06",
|
||||
"2020-03-02", "2020-03-02"),
|
||||
ExpectedExternalTransferData.expected(CANCELLED, buybackTransferResponse.getResourceExternalId(), "2020-03-06",
|
||||
"2020-03-02", "2020-03-02", BALANCE_ZERO),
|
||||
ExpectedExternalTransferData.expected(CANCELLED, saleTransferResponse.getResourceExternalId(), "2020-03-04",
|
||||
"2020-03-02", "2020-03-02", BALANCE_ZERO));
|
||||
} finally {
|
||||
cleanUpAndRestoreBusinessDate();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void sameDayBuybackAndSaleIsCancelledWhenLoanIsCancelled() {
|
||||
try {
|
||||
GlobalConfigurationHelper.manageConfigurations(REQUEST_SPEC, RESPONSE_SPEC,
|
||||
GlobalConfigurationHelper.ENABLE_AUTOGENERATED_EXTERNAL_ID, true);
|
||||
setInitialBusinessDate("2020-03-02");
|
||||
Integer clientID = createClient();
|
||||
Integer loanID = createLoanForClient(clientID);
|
||||
|
||||
PostInitiateTransferResponse saleTransferResponse = createSaleTransfer(loanID, "2020-03-03");
|
||||
PostInitiateTransferResponse buybackTransferResponse = createBuybackTransfer(loanID, "2020-03-03");
|
||||
|
||||
LOAN_TRANSACTION_HELPER.writeOffLoan("02 March 2020", loanID);
|
||||
|
||||
getAndValidateExternalAssetOwnerTransferByLoan(loanID,
|
||||
ExpectedExternalTransferData.expected(PENDING, saleTransferResponse.getResourceExternalId(), "2020-03-03", "2020-03-02",
|
||||
"2020-03-02"),
|
||||
ExpectedExternalTransferData.expected(BUYBACK, buybackTransferResponse.getResourceExternalId(), "2020-03-03",
|
||||
"2020-03-02", "2020-03-02"),
|
||||
ExpectedExternalTransferData.expected(CANCELLED, buybackTransferResponse.getResourceExternalId(), "2020-03-03",
|
||||
"2020-03-02", "2020-03-02", SAMEDAY_TRANSFERS),
|
||||
ExpectedExternalTransferData.expected(CANCELLED, saleTransferResponse.getResourceExternalId(), "2020-03-03",
|
||||
"2020-03-02", "2020-03-02", SAMEDAY_TRANSFERS));
|
||||
} finally {
|
||||
cleanUpAndRestoreBusinessDate();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void saleAndBuybackOnTheSameDay() {
|
||||
try {
|
||||
@@ -592,8 +707,11 @@ public class InitiateExternalAssetOwnerTransferTest {
|
||||
CallFailedRuntimeException exception = assertThrows(CallFailedRuntimeException.class, () -> createBuybackTransfer(1, null));
|
||||
assertTrue(exception.getMessage().contains("The parameter `settlementDate` is mandatory."));
|
||||
|
||||
CallFailedRuntimeException exception2 = assertThrows(CallFailedRuntimeException.class,
|
||||
() -> createBuybackTransfer(1, "1970-01-01"));
|
||||
CallFailedRuntimeException exception2 = assertThrows(CallFailedRuntimeException.class, () -> {
|
||||
Integer clientID = createClient();
|
||||
Integer loanID = createLoanForClient(clientID);
|
||||
createBuybackTransfer(loanID, "1970-01-01");
|
||||
});
|
||||
assertTrue(exception2.getMessage().contains("Settlement date cannot be in the past"));
|
||||
|
||||
CallFailedRuntimeException exception3 = assertThrows(CallFailedRuntimeException.class, () -> {
|
||||
@@ -839,6 +957,9 @@ public class InitiateExternalAssetOwnerTransferTest {
|
||||
assertEquals(expected.totalFeeOutstanding, etd.getDetails().getTotalFeeChargesOutstanding());
|
||||
assertEquals(expected.totalOverpaid, etd.getDetails().getTotalOverpaid());
|
||||
}
|
||||
if (expected.subStatus != null) {
|
||||
assertEquals(expected.subStatus, etd.getSubStatus());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -919,6 +1040,7 @@ public class InitiateExternalAssetOwnerTransferTest {
|
||||
|
||||
private final String effectiveFrom;
|
||||
private final String effectiveTo;
|
||||
private final ExternalTransferData.SubStatusEnum subStatus;
|
||||
private final boolean detailsExpected;
|
||||
private final BigDecimal totalOutstanding;
|
||||
private final BigDecimal totalPrincipalOutstanding;
|
||||
@@ -931,11 +1053,22 @@ public class InitiateExternalAssetOwnerTransferTest {
|
||||
String settlementDate, String effectiveFrom, String effectiveTo, boolean detailsExpected, BigDecimal totalOutstanding,
|
||||
BigDecimal totalPrincipalOutstanding, BigDecimal totalInterestOutstanding, BigDecimal totalPenaltyOutstanding,
|
||||
BigDecimal totalFeeOutstanding, BigDecimal totalOverpaid) {
|
||||
return new ExpectedExternalTransferData(status, transferExternalId, settlementDate, effectiveFrom, effectiveTo, detailsExpected,
|
||||
totalOutstanding, totalPrincipalOutstanding, totalInterestOutstanding, totalPenaltyOutstanding, totalFeeOutstanding,
|
||||
totalOverpaid);
|
||||
return new ExpectedExternalTransferData(status, transferExternalId, settlementDate, effectiveFrom, effectiveTo, null,
|
||||
detailsExpected, totalOutstanding, totalPrincipalOutstanding, totalInterestOutstanding, totalPenaltyOutstanding,
|
||||
totalFeeOutstanding, totalOverpaid);
|
||||
}
|
||||
|
||||
static ExpectedExternalTransferData expected(ExternalTransferData.StatusEnum status, String transferExternalId,
|
||||
String settlementDate, String effectiveFrom, String effectiveTo) {
|
||||
return new ExpectedExternalTransferData(status, transferExternalId, settlementDate, effectiveFrom, effectiveTo, null, false,
|
||||
null, null, null, null, null, null);
|
||||
}
|
||||
|
||||
static ExpectedExternalTransferData expected(ExternalTransferData.StatusEnum status, String transferExternalId,
|
||||
String settlementDate, String effectiveFrom, String effectiveTo, ExternalTransferData.SubStatusEnum subStatus) {
|
||||
return new ExpectedExternalTransferData(status, transferExternalId, settlementDate, effectiveFrom, effectiveTo, subStatus,
|
||||
false, null, null, null, null, null, null);
|
||||
}
|
||||
}
|
||||
|
||||
@RequiredArgsConstructor()
|
||||
|
||||
Reference in New Issue
Block a user