FINERACT-1926: Remove unnecessary changes field from response

This commit is contained in:
Adam Saghy
2023-06-16 16:31:30 +02:00
parent c398c5affa
commit 58d4cb6a8d
2 changed files with 153 additions and 113 deletions
@@ -24,7 +24,6 @@ import java.lang.reflect.Type;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -82,7 +81,7 @@ public class ExternalAssetOwnersWriteServiceImpl implements ExternalAssetOwnersW
ExternalAssetOwnerTransfer externalAssetOwnerTransfer = createSaleTransfer(loanId, command.json(), ExternalAssetOwnerTransfer externalAssetOwnerTransfer = createSaleTransfer(loanId, command.json(),
loanIdAndExternalIdAndStatus.getExternalId()); loanIdAndExternalIdAndStatus.getExternalId());
validateSale(externalAssetOwnerTransfer); validateSale(externalAssetOwnerTransfer);
externalAssetOwnerTransferRepository.save(externalAssetOwnerTransfer); externalAssetOwnerTransferRepository.saveAndFlush(externalAssetOwnerTransfer);
return buildResponseData(externalAssetOwnerTransfer); return buildResponseData(externalAssetOwnerTransfer);
} }
@@ -96,7 +95,7 @@ public class ExternalAssetOwnersWriteServiceImpl implements ExternalAssetOwnersW
validateSettlementDate(settlementDate); validateSettlementDate(settlementDate);
ExternalAssetOwnerTransfer effectiveTransfer = fetchAndValidateEffectiveTransferForBuyback(loanId, settlementDate); ExternalAssetOwnerTransfer effectiveTransfer = fetchAndValidateEffectiveTransferForBuyback(loanId, settlementDate);
ExternalAssetOwnerTransfer externalAssetOwnerTransfer = createBuybackTransfer(effectiveTransfer, settlementDate, externalId); ExternalAssetOwnerTransfer externalAssetOwnerTransfer = createBuybackTransfer(effectiveTransfer, settlementDate, externalId);
externalAssetOwnerTransferRepository.save(externalAssetOwnerTransfer); externalAssetOwnerTransferRepository.saveAndFlush(externalAssetOwnerTransfer);
return buildResponseData(externalAssetOwnerTransfer); return buildResponseData(externalAssetOwnerTransfer);
} }
@@ -162,18 +161,12 @@ public class ExternalAssetOwnersWriteServiceImpl implements ExternalAssetOwnersW
} }
private CommandProcessingResult buildResponseData(ExternalAssetOwnerTransfer savedExternalAssetOwnerTransfer) { private CommandProcessingResult buildResponseData(ExternalAssetOwnerTransfer savedExternalAssetOwnerTransfer) {
Map<String, Object> changes = new HashMap<>();
changes.put(ExternalTransferRequestParameters.SETTLEMENT_DATE, savedExternalAssetOwnerTransfer.getSettlementDate());
changes.put(ExternalTransferRequestParameters.OWNER_EXTERNAL_ID,
savedExternalAssetOwnerTransfer.getOwner().getExternalId().getValue());
changes.put(ExternalTransferRequestParameters.TRANSFER_EXTERNAL_ID, savedExternalAssetOwnerTransfer.getExternalId().getValue());
changes.put(ExternalTransferRequestParameters.PURCHASE_PRICE_RATIO, savedExternalAssetOwnerTransfer.getPurchasePriceRatio());
return new CommandProcessingResultBuilder().withEntityId(savedExternalAssetOwnerTransfer.getId()) return new CommandProcessingResultBuilder().withEntityId(savedExternalAssetOwnerTransfer.getId())
.withEntityExternalId(savedExternalAssetOwnerTransfer.getExternalId()) .withEntityExternalId(savedExternalAssetOwnerTransfer.getExternalId())
.withSubEntityId(savedExternalAssetOwnerTransfer.getLoanId()) .withSubEntityId(savedExternalAssetOwnerTransfer.getLoanId())
.withSubEntityExternalId(Objects.isNull(savedExternalAssetOwnerTransfer.getExternalLoanId()) ? null .withSubEntityExternalId(Objects.isNull(savedExternalAssetOwnerTransfer.getExternalLoanId()) ? null
: savedExternalAssetOwnerTransfer.getExternalLoanId()) : savedExternalAssetOwnerTransfer.getExternalLoanId())
.with(changes).build(); .build();
} }
private void validateSale(ExternalAssetOwnerTransfer externalAssetOwnerTransfer) { private void validateSale(ExternalAssetOwnerTransfer externalAssetOwnerTransfer) {
@@ -85,7 +85,6 @@ import org.junit.jupiter.api.extension.ExtendWith;
@ExtendWith(LoanTestLifecycleExtension.class) @ExtendWith(LoanTestLifecycleExtension.class)
public class InitiateExternalAssetOwnerTransferTest { public class InitiateExternalAssetOwnerTransferTest {
public String ownerExternalId;
private static ResponseSpecification RESPONSE_SPEC; private static ResponseSpecification RESPONSE_SPEC;
private static RequestSpecification REQUEST_SPEC; private static RequestSpecification REQUEST_SPEC;
private static Account ASSET_ACCOUNT; private static Account ASSET_ACCOUNT;
@@ -99,6 +98,7 @@ public class InitiateExternalAssetOwnerTransferTest {
private static LoanTransactionHelper LOAN_TRANSACTION_HELPER; private static LoanTransactionHelper LOAN_TRANSACTION_HELPER;
private static SchedulerJobHelper SCHEDULER_JOB_HELPER; private static SchedulerJobHelper SCHEDULER_JOB_HELPER;
private static LocalDate TODAYS_DATE; private static LocalDate TODAYS_DATE;
public String ownerExternalId;
private DateTimeFormatter dateFormatter = new DateTimeFormatterBuilder().appendPattern("dd MMMM yyyy").toFormatter(); private DateTimeFormatter dateFormatter = new DateTimeFormatterBuilder().appendPattern("dd MMMM yyyy").toFormatter();
@BeforeAll @BeforeAll
@@ -139,28 +139,34 @@ public class InitiateExternalAssetOwnerTransferTest {
@Test @Test
public void saleActiveLoanToExternalAssetOwnerAndBuybackADayLater() { public void saleActiveLoanToExternalAssetOwnerAndBuybackADayLater() {
try { try {
GlobalConfigurationHelper.manageConfigurations(REQUEST_SPEC, RESPONSE_SPEC,
GlobalConfigurationHelper.ENABLE_AUTOGENERATED_EXTERNAL_ID, true);
setInitialBusinessDate("2020-03-02"); setInitialBusinessDate("2020-03-02");
Integer clientID = createClient(); Integer clientID = createClient();
Integer loanID = createLoanForClient(clientID); Integer loanID = createLoanForClient(clientID);
addPenaltyForLoan(loanID, "10"); addPenaltyForLoan(loanID, "10");
String transferExternalId = createExternalAssetOwnerTransfer(loanID, "sale", "2020-03-02"); PostInitiateTransferResponse saleTransferResponse = createExternalAssetOwnerTransfer(loanID, "sale", "2020-03-02");
validateResponse(saleTransferResponse, loanID);
getAndValidateExternalAssetOwnerTransferByLoan(loanID, getAndValidateExternalAssetOwnerTransferByLoan(loanID,
ExpectedExternalTransferData.expected(PENDING, transferExternalId, "2020-03-02", "2020-03-02", "9999-12-31", false, ExpectedExternalTransferData.expected(PENDING, saleTransferResponse.getResourceExternalId(), "2020-03-02", "2020-03-02",
new BigDecimal("15767.420000"), new BigDecimal("15000.000000"), new BigDecimal("757.420000"), "9999-12-31", false, new BigDecimal("15767.420000"), new BigDecimal("15000.000000"),
new BigDecimal("10.000000"), new BigDecimal("0.000000"), new BigDecimal("0.000000"))); new BigDecimal("757.420000"), new BigDecimal("10.000000"), new BigDecimal("0.000000"),
getAndValidateThereIsNoActiveMapping(transferExternalId); new BigDecimal("0.000000")));
getAndValidateThereIsNoActiveMapping(saleTransferResponse.getResourceExternalId());
PageExternalTransferData retrieveResponse = EXTERNAL_ASSET_OWNER_HELPER.retrieveTransfersByLoanId(loanID.longValue()); PageExternalTransferData retrieveResponse = EXTERNAL_ASSET_OWNER_HELPER.retrieveTransfersByLoanId(loanID.longValue());
retrieveResponse.getContent().forEach(transfer -> getAndValidateThereIsNoJournalEntriesForTransfer(transfer.getTransferId())); retrieveResponse.getContent().forEach(transfer -> getAndValidateThereIsNoJournalEntriesForTransfer(transfer.getTransferId()));
updateBusinessDateAndExecuteCOBJob("2020-03-03"); updateBusinessDateAndExecuteCOBJob("2020-03-03");
getAndValidateExternalAssetOwnerTransferByLoan(loanID, getAndValidateExternalAssetOwnerTransferByLoan(loanID,
ExpectedExternalTransferData.expected(PENDING, transferExternalId, "2020-03-02", "2020-03-02", "2020-03-02", false, ExpectedExternalTransferData.expected(PENDING, saleTransferResponse.getResourceExternalId(), "2020-03-02", "2020-03-02",
new BigDecimal("15767.420000"), new BigDecimal("15000.000000"), new BigDecimal("757.420000"), "2020-03-02", false, new BigDecimal("15767.420000"), new BigDecimal("15000.000000"),
new BigDecimal("10.000000"), new BigDecimal("0.000000"), new BigDecimal("0.000000")), new BigDecimal("757.420000"), new BigDecimal("10.000000"), new BigDecimal("0.000000"),
ExpectedExternalTransferData.expected(ACTIVE, transferExternalId, "2020-03-02", "2020-03-03", "9999-12-31", true, new BigDecimal("0.000000")),
new BigDecimal("15767.420000"), new BigDecimal("15000.000000"), new BigDecimal("757.420000"), ExpectedExternalTransferData.expected(ACTIVE, saleTransferResponse.getResourceExternalId(), "2020-03-02", "2020-03-03",
new BigDecimal("10.000000"), new BigDecimal("0.000000"), new BigDecimal("0.000000"))); "9999-12-31", true, new BigDecimal("15767.420000"), new BigDecimal("15000.000000"),
new BigDecimal("757.420000"), new BigDecimal("10.000000"), new BigDecimal("0.000000"),
new BigDecimal("0.000000")));
getAndValidateThereIsActiveMapping(loanID); getAndValidateThereIsActiveMapping(loanID);
retrieveResponse = EXTERNAL_ASSET_OWNER_HELPER.retrieveTransfersByLoanId(loanID.longValue()); retrieveResponse = EXTERNAL_ASSET_OWNER_HELPER.retrieveTransfersByLoanId(loanID.longValue());
LocalDate expectedDate = LocalDate.of(2020, 3, 2); LocalDate expectedDate = LocalDate.of(2020, 3, 2);
@@ -178,17 +184,21 @@ public class InitiateExternalAssetOwnerTransferTest {
ExpectedJournalEntryData.expected((long) TRANSFER_ACCOUNT.getAccountID(), (long) JournalEntryType.CREDIT.getValue(), ExpectedJournalEntryData.expected((long) TRANSFER_ACCOUNT.getAccountID(), (long) JournalEntryType.CREDIT.getValue(),
BigDecimal.valueOf(15767.420000), expectedDate, expectedDate)); BigDecimal.valueOf(15767.420000), expectedDate, expectedDate));
String buybackTransferExternalId = createExternalAssetOwnerTransfer(loanID, "buyback", "2020-03-03"); PostInitiateTransferResponse buybackTransferResponse = createExternalAssetOwnerTransfer(loanID, "buyback", "2020-03-03");
validateResponse(buybackTransferResponse, loanID);
getAndValidateExternalAssetOwnerTransferByLoan(loanID, getAndValidateExternalAssetOwnerTransferByLoan(loanID,
ExpectedExternalTransferData.expected(PENDING, transferExternalId, "2020-03-02", "2020-03-02", "2020-03-02", false, ExpectedExternalTransferData.expected(PENDING, saleTransferResponse.getResourceExternalId(), "2020-03-02", "2020-03-02",
new BigDecimal("15767.420000"), new BigDecimal("15000.000000"), new BigDecimal("757.420000"), "2020-03-02", false, new BigDecimal("15767.420000"), new BigDecimal("15000.000000"),
new BigDecimal("10.000000"), new BigDecimal("0.000000"), new BigDecimal("0.000000")), new BigDecimal("757.420000"), new BigDecimal("10.000000"), new BigDecimal("0.000000"),
ExpectedExternalTransferData.expected(ACTIVE, transferExternalId, "2020-03-02", "2020-03-03", "9999-12-31", true, new BigDecimal("0.000000")),
new BigDecimal("15767.420000"), new BigDecimal("15000.000000"), new BigDecimal("757.420000"), ExpectedExternalTransferData.expected(ACTIVE, saleTransferResponse.getResourceExternalId(), "2020-03-02", "2020-03-03",
new BigDecimal("10.000000"), new BigDecimal("0.000000"), new BigDecimal("0.000000")), "9999-12-31", true, new BigDecimal("15767.420000"), new BigDecimal("15000.000000"),
ExpectedExternalTransferData.expected(BUYBACK, buybackTransferExternalId, "2020-03-03", "2020-03-03", "9999-12-31", new BigDecimal("757.420000"), new BigDecimal("10.000000"), new BigDecimal("0.000000"),
false, new BigDecimal("15767.420000"), new BigDecimal("15000.000000"), new BigDecimal("757.420000"), new BigDecimal("0.000000")),
new BigDecimal("10.000000"), new BigDecimal("0.000000"), new BigDecimal("0.000000"))); ExpectedExternalTransferData.expected(BUYBACK, buybackTransferResponse.getResourceExternalId(), "2020-03-03",
"2020-03-03", "9999-12-31", false, new BigDecimal("15767.420000"), new BigDecimal("15000.000000"),
new BigDecimal("757.420000"), new BigDecimal("10.000000"), new BigDecimal("0.000000"),
new BigDecimal("0.000000")));
getAndValidateThereIsActiveMapping(loanID); getAndValidateThereIsActiveMapping(loanID);
retrieveResponse = EXTERNAL_ASSET_OWNER_HELPER.retrieveTransfersByLoanId(loanID.longValue()); retrieveResponse = EXTERNAL_ASSET_OWNER_HELPER.retrieveTransfersByLoanId(loanID.longValue());
getAndValidateThereIsNoJournalEntriesForTransfer(retrieveResponse.getContent().get(2).getTransferId()); getAndValidateThereIsNoJournalEntriesForTransfer(retrieveResponse.getContent().get(2).getTransferId());
@@ -208,16 +218,19 @@ public class InitiateExternalAssetOwnerTransferTest {
updateBusinessDateAndExecuteCOBJob("2020-03-04"); updateBusinessDateAndExecuteCOBJob("2020-03-04");
getAndValidateExternalAssetOwnerTransferByLoan(loanID, getAndValidateExternalAssetOwnerTransferByLoan(loanID,
ExpectedExternalTransferData.expected(PENDING, transferExternalId, "2020-03-02", "2020-03-02", "2020-03-02", false, ExpectedExternalTransferData.expected(PENDING, saleTransferResponse.getResourceExternalId(), "2020-03-02", "2020-03-02",
new BigDecimal("15767.420000"), new BigDecimal("15000.000000"), new BigDecimal("757.420000"), "2020-03-02", false, new BigDecimal("15767.420000"), new BigDecimal("15000.000000"),
new BigDecimal("10.000000"), new BigDecimal("0.000000"), new BigDecimal("0.000000")), new BigDecimal("757.420000"), new BigDecimal("10.000000"), new BigDecimal("0.000000"),
ExpectedExternalTransferData.expected(ACTIVE, transferExternalId, "2020-03-02", "2020-03-03", "2020-03-03", true, new BigDecimal("0.000000")),
new BigDecimal("15767.420000"), new BigDecimal("15000.000000"), new BigDecimal("757.420000"), ExpectedExternalTransferData.expected(ACTIVE, saleTransferResponse.getResourceExternalId(), "2020-03-02", "2020-03-03",
new BigDecimal("10.000000"), new BigDecimal("0.000000"), new BigDecimal("0.000000")), "2020-03-03", true, new BigDecimal("15767.420000"), new BigDecimal("15000.000000"),
ExpectedExternalTransferData.expected(BUYBACK, buybackTransferExternalId, "2020-03-03", "2020-03-03", "2020-03-03", new BigDecimal("757.420000"), new BigDecimal("10.000000"), new BigDecimal("0.000000"),
true, new BigDecimal("15762.420000"), new BigDecimal("15000.000000"), new BigDecimal("757.420000"), new BigDecimal("0.000000")),
new BigDecimal("5.000000"), new BigDecimal("0.000000"), new BigDecimal("0.000000"))); ExpectedExternalTransferData.expected(BUYBACK, buybackTransferResponse.getResourceExternalId(), "2020-03-03",
getAndValidateThereIsNoActiveMapping(transferExternalId); "2020-03-03", "2020-03-03", true, new BigDecimal("15762.420000"), new BigDecimal("15000.000000"),
new BigDecimal("757.420000"), new BigDecimal("5.000000"), new BigDecimal("0.000000"),
new BigDecimal("0.000000")));
getAndValidateThereIsNoActiveMapping(saleTransferResponse.getResourceExternalId());
retrieveResponse = EXTERNAL_ASSET_OWNER_HELPER.retrieveTransfersByLoanId(loanID.longValue()); retrieveResponse = EXTERNAL_ASSET_OWNER_HELPER.retrieveTransfersByLoanId(loanID.longValue());
expectedDate = LocalDate.of(2020, 3, 3); expectedDate = LocalDate.of(2020, 3, 3);
getAndValidateThereIsJournalEntriesForTransfer(retrieveResponse.getContent().get(2).getTransferId(), getAndValidateThereIsJournalEntriesForTransfer(retrieveResponse.getContent().get(2).getTransferId(),
@@ -256,47 +269,11 @@ public class InitiateExternalAssetOwnerTransferTest {
} }
} }
private void getAndValidateOwnerJournalEntries(String ownerExternalId, ExpectedJournalEntryData... expectedItems) {
ExternalOwnerJournalEntryData result = EXTERNAL_ASSET_OWNER_HELPER.retrieveJournalEntriesOfOwner(ownerExternalId);
assertNotNull(result);
assertEquals(expectedItems.length, result.getJournalEntryData().getTotalElements());
int i = 0;
assertEquals(ownerExternalId, result.getOwnerData().getExternalId());
for (ExpectedJournalEntryData expectedJournalEntryData : expectedItems) {
assertTrue(expectedJournalEntryData.amount.compareTo(result.getJournalEntryData().getContent().get(i).getAmount()) == 0);
assertEquals(expectedJournalEntryData.entryTypeId, result.getJournalEntryData().getContent().get(i).getEntryType().getId());
assertEquals(expectedJournalEntryData.glAccountId, result.getJournalEntryData().getContent().get(i).getGlAccountId());
assertEquals(expectedJournalEntryData.transactionDate, result.getJournalEntryData().getContent().get(i).getTransactionDate());
assertEquals(expectedJournalEntryData.submittedOnDate, result.getJournalEntryData().getContent().get(i).getSubmittedOnDate());
i++;
}
}
private void getAndValidateThereIsJournalEntriesForTransfer(Long transferId, ExpectedJournalEntryData... expectedItems) {
ExternalOwnerTransferJournalEntryData result = EXTERNAL_ASSET_OWNER_HELPER.retrieveJournalEntriesOfTransfer(transferId);
assertNotNull(result);
long totalElements = result.getJournalEntryData().getTotalElements();
assertEquals(expectedItems.length, totalElements);
int i = 0;
assertEquals(transferId, result.getTransferData().getTransferId());
for (ExpectedJournalEntryData expectedJournalEntryData : expectedItems) {
assertTrue(expectedJournalEntryData.amount.compareTo(result.getJournalEntryData().getContent().get(i).getAmount()) == 0);
assertEquals(expectedJournalEntryData.entryTypeId, result.getJournalEntryData().getContent().get(i).getEntryType().getId());
assertEquals(expectedJournalEntryData.glAccountId, result.getJournalEntryData().getContent().get(i).getGlAccountId());
assertEquals(expectedJournalEntryData.transactionDate, result.getJournalEntryData().getContent().get(i).getTransactionDate());
assertEquals(expectedJournalEntryData.submittedOnDate, result.getJournalEntryData().getContent().get(i).getSubmittedOnDate());
i++;
}
}
private void getAndValidateThereIsNoJournalEntriesForTransfer(Long transferId) {
ExternalOwnerTransferJournalEntryData result = EXTERNAL_ASSET_OWNER_HELPER.retrieveJournalEntriesOfTransfer(transferId);
assertNull(result.getJournalEntryData());
}
@Test @Test
public void saleIsNotAllowedWhenTransferIsAlreadyPending() { public void saleIsNotAllowedWhenTransferIsAlreadyPending() {
try { try {
GlobalConfigurationHelper.manageConfigurations(REQUEST_SPEC, RESPONSE_SPEC,
GlobalConfigurationHelper.ENABLE_AUTOGENERATED_EXTERNAL_ID, true);
setInitialBusinessDate("2020-03-02"); setInitialBusinessDate("2020-03-02");
Integer clientID = createClient(); Integer clientID = createClient();
Integer loanID = createLoanForClient(clientID); Integer loanID = createLoanForClient(clientID);
@@ -314,6 +291,8 @@ public class InitiateExternalAssetOwnerTransferTest {
@Test @Test
public void saleIsNotAllowedWhenLoanIsNotActive() { public void saleIsNotAllowedWhenLoanIsNotActive() {
try { try {
GlobalConfigurationHelper.manageConfigurations(REQUEST_SPEC, RESPONSE_SPEC,
GlobalConfigurationHelper.ENABLE_AUTOGENERATED_EXTERNAL_ID, true);
setInitialBusinessDate("2020-03-02"); setInitialBusinessDate("2020-03-02");
Integer clientID = createClient(); Integer clientID = createClient();
Integer loanID = createLoanForClient(clientID); Integer loanID = createLoanForClient(clientID);
@@ -333,38 +312,48 @@ public class InitiateExternalAssetOwnerTransferTest {
@Test @Test
public void saleAndBuybackOnTheSameDay() { public void saleAndBuybackOnTheSameDay() {
try { try {
GlobalConfigurationHelper.manageConfigurations(REQUEST_SPEC, RESPONSE_SPEC,
GlobalConfigurationHelper.ENABLE_AUTOGENERATED_EXTERNAL_ID, true);
setInitialBusinessDate("2020-03-02"); setInitialBusinessDate("2020-03-02");
Integer clientID = createClient(); Integer clientID = createClient();
Integer loanID = createLoanForClient(clientID); Integer loanID = createLoanForClient(clientID);
String transferExternalId = createExternalAssetOwnerTransfer(loanID, "sale", "2020-03-02"); PostInitiateTransferResponse saleTransferResponse = createExternalAssetOwnerTransfer(loanID, "sale", "2020-03-02");
String buyBackTransferExternalId = createExternalAssetOwnerTransfer(loanID, "buyback", "2020-03-02"); validateResponse(saleTransferResponse, loanID);
PostInitiateTransferResponse buybackTransferResponse = createExternalAssetOwnerTransfer(loanID, "buyback", "2020-03-02");
validateResponse(buybackTransferResponse, loanID);
getAndValidateExternalAssetOwnerTransferByLoan(loanID, getAndValidateExternalAssetOwnerTransferByLoan(loanID,
ExpectedExternalTransferData.expected(PENDING, transferExternalId, "2020-03-02", "2020-03-02", "9999-12-31", false, ExpectedExternalTransferData.expected(PENDING, saleTransferResponse.getResourceExternalId(), "2020-03-02", "2020-03-02",
new BigDecimal("15767.420000"), new BigDecimal("15000.000000"), new BigDecimal("757.420000"), "9999-12-31", false, new BigDecimal("15767.420000"), new BigDecimal("15000.000000"),
new BigDecimal("10.000000"), new BigDecimal("0.000000"), new BigDecimal("0.000000")), new BigDecimal("757.420000"), new BigDecimal("10.000000"), new BigDecimal("0.000000"),
ExpectedExternalTransferData.expected(BUYBACK, buyBackTransferExternalId, "2020-03-02", "2020-03-02", "9999-12-31", new BigDecimal("0.000000")),
false, new BigDecimal("15767.420000"), new BigDecimal("15000.000000"), new BigDecimal("757.420000"), ExpectedExternalTransferData.expected(BUYBACK, buybackTransferResponse.getResourceExternalId(), "2020-03-02",
new BigDecimal("10.000000"), new BigDecimal("0.000000"), new BigDecimal("0.000000"))); "2020-03-02", "9999-12-31", false, new BigDecimal("15767.420000"), new BigDecimal("15000.000000"),
getAndValidateThereIsNoActiveMapping(transferExternalId); new BigDecimal("757.420000"), new BigDecimal("10.000000"), new BigDecimal("0.000000"),
getAndValidateThereIsNoActiveMapping(buyBackTransferExternalId); new BigDecimal("0.000000")));
getAndValidateThereIsNoActiveMapping(saleTransferResponse.getResourceExternalId());
getAndValidateThereIsNoActiveMapping(buybackTransferResponse.getResourceExternalId());
updateBusinessDateAndExecuteCOBJob("2020-03-03"); updateBusinessDateAndExecuteCOBJob("2020-03-03");
getAndValidateExternalAssetOwnerTransferByLoan(loanID, getAndValidateExternalAssetOwnerTransferByLoan(loanID,
ExpectedExternalTransferData.expected(PENDING, transferExternalId, "2020-03-02", "2020-03-02", "2020-03-02", false, ExpectedExternalTransferData.expected(PENDING, saleTransferResponse.getResourceExternalId(), "2020-03-02", "2020-03-02",
new BigDecimal("15767.420000"), new BigDecimal("15000.000000"), new BigDecimal("757.420000"), "2020-03-02", false, new BigDecimal("15767.420000"), new BigDecimal("15000.000000"),
new BigDecimal("10.000000"), new BigDecimal("0.000000"), new BigDecimal("0.000000")), new BigDecimal("757.420000"), new BigDecimal("10.000000"), new BigDecimal("0.000000"),
ExpectedExternalTransferData.expected(BUYBACK, buyBackTransferExternalId, "2020-03-02", "2020-03-02", "2020-03-02", new BigDecimal("0.000000")),
false, new BigDecimal("15767.420000"), new BigDecimal("15000.000000"), new BigDecimal("757.420000"), ExpectedExternalTransferData.expected(BUYBACK, buybackTransferResponse.getResourceExternalId(), "2020-03-02",
new BigDecimal("10.000000"), new BigDecimal("0.000000"), new BigDecimal("0.000000")), "2020-03-02", "2020-03-02", false, new BigDecimal("15767.420000"), new BigDecimal("15000.000000"),
ExpectedExternalTransferData.expected(CANCELLED, buyBackTransferExternalId, "2020-03-02", "2020-03-02", "2020-03-02", new BigDecimal("757.420000"), new BigDecimal("10.000000"), new BigDecimal("0.000000"),
false, new BigDecimal("15767.420000"), new BigDecimal("15000.000000"), new BigDecimal("757.420000"), new BigDecimal("0.000000")),
new BigDecimal("10.000000"), new BigDecimal("0.000000"), new BigDecimal("0.000000")), ExpectedExternalTransferData.expected(CANCELLED, buybackTransferResponse.getResourceExternalId(), "2020-03-02",
ExpectedExternalTransferData.expected(CANCELLED, transferExternalId, "2020-03-02", "2020-03-02", "2020-03-02", false, "2020-03-02", "2020-03-02", false, new BigDecimal("15767.420000"), new BigDecimal("15000.000000"),
new BigDecimal("15767.420000"), new BigDecimal("15000.000000"), new BigDecimal("757.420000"), new BigDecimal("757.420000"), new BigDecimal("10.000000"), new BigDecimal("0.000000"),
new BigDecimal("10.000000"), new BigDecimal("0.000000"), new BigDecimal("0.000000"))); new BigDecimal("0.000000")),
ExpectedExternalTransferData.expected(CANCELLED, saleTransferResponse.getResourceExternalId(), "2020-03-02",
"2020-03-02", "2020-03-02", false, new BigDecimal("15767.420000"), new BigDecimal("15000.000000"),
new BigDecimal("757.420000"), new BigDecimal("10.000000"), new BigDecimal("0.000000"),
new BigDecimal("0.000000")));
getAndValidateThereIsNoActiveMapping((long) loanID); getAndValidateThereIsNoActiveMapping((long) loanID);
} finally { } finally {
cleanUpAndRestoreBusinessDate(); cleanUpAndRestoreBusinessDate();
@@ -374,20 +363,24 @@ public class InitiateExternalAssetOwnerTransferTest {
@Test @Test
public void saleAndBuybackMultipleTimes() { public void saleAndBuybackMultipleTimes() {
try { try {
GlobalConfigurationHelper.manageConfigurations(REQUEST_SPEC, RESPONSE_SPEC,
GlobalConfigurationHelper.ENABLE_AUTOGENERATED_EXTERNAL_ID, true);
setInitialBusinessDate("2020-03-02"); setInitialBusinessDate("2020-03-02");
Integer clientID = createClient(); Integer clientID = createClient();
Integer loanID = createLoanForClient(clientID); Integer loanID = createLoanForClient(clientID);
String transferExternalId = createExternalAssetOwnerTransfer(loanID, "sale", "2020-03-04"); PostInitiateTransferResponse saleTransferResponse = createExternalAssetOwnerTransfer(loanID, "sale", "2020-03-04");
String buybackTransferExternalId = createExternalAssetOwnerTransfer(loanID, "buyback", "2020-03-04"); PostInitiateTransferResponse buybackTransferResponse = createExternalAssetOwnerTransfer(loanID, "buyback", "2020-03-04");
getAndValidateExternalAssetOwnerTransferByLoan(loanID, getAndValidateExternalAssetOwnerTransferByLoan(loanID,
ExpectedExternalTransferData.expected(PENDING, transferExternalId, "2020-03-04", "2020-03-02", "9999-12-31", false, ExpectedExternalTransferData.expected(PENDING, saleTransferResponse.getResourceExternalId(), "2020-03-04", "2020-03-02",
new BigDecimal("15767.420000"), new BigDecimal("15000.000000"), new BigDecimal("757.420000"), "9999-12-31", false, new BigDecimal("15767.420000"), new BigDecimal("15000.000000"),
new BigDecimal("10.000000"), new BigDecimal("0.000000"), new BigDecimal("0.000000")), new BigDecimal("757.420000"), new BigDecimal("10.000000"), new BigDecimal("0.000000"),
ExpectedExternalTransferData.expected(BUYBACK, buybackTransferExternalId, "2020-03-04", "2020-03-02", "9999-12-31", new BigDecimal("0.000000")),
false, new BigDecimal("15767.420000"), new BigDecimal("15000.000000"), new BigDecimal("757.420000"), ExpectedExternalTransferData.expected(BUYBACK, buybackTransferResponse.getResourceExternalId(), "2020-03-04",
new BigDecimal("10.000000"), new BigDecimal("0.000000"), new BigDecimal("0.000000"))); "2020-03-02", "9999-12-31", false, new BigDecimal("15767.420000"), new BigDecimal("15000.000000"),
new BigDecimal("757.420000"), new BigDecimal("10.000000"), new BigDecimal("0.000000"),
new BigDecimal("0.000000")));
CallFailedRuntimeException exception = assertThrows(CallFailedRuntimeException.class, CallFailedRuntimeException exception = assertThrows(CallFailedRuntimeException.class,
() -> createExternalAssetOwnerTransfer(loanID, "sale", "2020-03-04")); () -> createExternalAssetOwnerTransfer(loanID, "sale", "2020-03-04"));
@@ -407,7 +400,7 @@ public class InitiateExternalAssetOwnerTransferTest {
SCHEDULER_JOB_HELPER.executeAndAwaitJob("Loan COB"); SCHEDULER_JOB_HELPER.executeAndAwaitJob("Loan COB");
} }
private String createExternalAssetOwnerTransfer(Integer loanID, String command, String settlementDate) { private PostInitiateTransferResponse createExternalAssetOwnerTransfer(Integer loanID, String command, String settlementDate) {
String transferExternalId = UUID.randomUUID().toString(); String transferExternalId = UUID.randomUUID().toString();
if (command.equals("sale")) { if (command.equals("sale")) {
ownerExternalId = UUID.randomUUID().toString(); ownerExternalId = UUID.randomUUID().toString();
@@ -416,14 +409,14 @@ public class InitiateExternalAssetOwnerTransferTest {
new PostInitiateTransferRequest().settlementDate(settlementDate).dateFormat("yyyy-MM-dd").locale("en") new PostInitiateTransferRequest().settlementDate(settlementDate).dateFormat("yyyy-MM-dd").locale("en")
.transferExternalId(transferExternalId).ownerExternalId(ownerExternalId).purchasePriceRatio("1.0")); .transferExternalId(transferExternalId).ownerExternalId(ownerExternalId).purchasePriceRatio("1.0"));
assertEquals(transferExternalId, saleResponse.getResourceExternalId()); assertEquals(transferExternalId, saleResponse.getResourceExternalId());
return transferExternalId; return saleResponse;
} }
private void addPenaltyForLoan(Integer loanID, String amount) { private void addPenaltyForLoan(Integer loanID, String amount) {
// Add Charge Penalty // Add Charge Penalty
Integer penalty = ChargesHelper.createCharges(REQUEST_SPEC, RESPONSE_SPEC, Integer penalty = ChargesHelper.createCharges(REQUEST_SPEC, RESPONSE_SPEC,
ChargesHelper.getLoanSpecifiedDueDateJSON(ChargesHelper.CHARGE_CALCULATION_TYPE_FLAT, amount, true)); ChargesHelper.getLoanSpecifiedDueDateJSON(ChargesHelper.CHARGE_CALCULATION_TYPE_FLAT, amount, true));
Integer penalty1LoanChargeId = this.LOAN_TRANSACTION_HELPER.addChargesForLoan(loanID, Integer penalty1LoanChargeId = LOAN_TRANSACTION_HELPER.addChargesForLoan(loanID,
LoanTransactionHelper.getSpecifiedDueDateChargesForLoanAsJSON(String.valueOf(penalty), "02 March 2020", amount)); LoanTransactionHelper.getSpecifiedDueDateChargesForLoanAsJSON(String.valueOf(penalty), "02 March 2020", amount));
assertNotNull(penalty1LoanChargeId); assertNotNull(penalty1LoanChargeId);
} }
@@ -441,6 +434,8 @@ public class InitiateExternalAssetOwnerTransferTest {
RESPONSE_SPEC = new ResponseSpecBuilder().expectStatusCode(200).build(); RESPONSE_SPEC = new ResponseSpecBuilder().expectStatusCode(200).build();
BusinessDateHelper.updateBusinessDate(REQUEST_SPEC, RESPONSE_SPEC, BUSINESS_DATE, TODAYS_DATE); BusinessDateHelper.updateBusinessDate(REQUEST_SPEC, RESPONSE_SPEC, BUSINESS_DATE, TODAYS_DATE);
GlobalConfigurationHelper.updateIsBusinessDateEnabled(REQUEST_SPEC, RESPONSE_SPEC, Boolean.FALSE); GlobalConfigurationHelper.updateIsBusinessDateEnabled(REQUEST_SPEC, RESPONSE_SPEC, Boolean.FALSE);
GlobalConfigurationHelper.manageConfigurations(REQUEST_SPEC, RESPONSE_SPEC,
GlobalConfigurationHelper.ENABLE_AUTOGENERATED_EXTERNAL_ID, false);
} }
@NotNull @NotNull
@@ -564,13 +559,63 @@ public class InitiateExternalAssetOwnerTransferTest {
assertNull(activeTransfer); assertNull(activeTransfer);
} }
private void validateResponse(PostInitiateTransferResponse transferResponse, Integer loanID) {
assertNotNull(transferResponse);
assertNotNull(transferResponse.getResourceId());
assertNotNull(transferResponse.getResourceExternalId());
assertNotNull(transferResponse.getSubResourceId());
assertEquals((long) loanID, transferResponse.getSubResourceId());
assertNotNull(transferResponse.getSubResourceExternalId());
assertNull(transferResponse.getChanges());
}
private void getAndValidateOwnerJournalEntries(String ownerExternalId, ExpectedJournalEntryData... expectedItems) {
ExternalOwnerJournalEntryData result = EXTERNAL_ASSET_OWNER_HELPER.retrieveJournalEntriesOfOwner(ownerExternalId);
assertNotNull(result);
assertEquals(expectedItems.length, result.getJournalEntryData().getTotalElements());
int i = 0;
assertEquals(ownerExternalId, result.getOwnerData().getExternalId());
for (ExpectedJournalEntryData expectedJournalEntryData : expectedItems) {
assertTrue(expectedJournalEntryData.amount.compareTo(result.getJournalEntryData().getContent().get(i).getAmount()) == 0);
assertEquals(expectedJournalEntryData.entryTypeId, result.getJournalEntryData().getContent().get(i).getEntryType().getId());
assertEquals(expectedJournalEntryData.glAccountId, result.getJournalEntryData().getContent().get(i).getGlAccountId());
assertEquals(expectedJournalEntryData.transactionDate, result.getJournalEntryData().getContent().get(i).getTransactionDate());
assertEquals(expectedJournalEntryData.submittedOnDate, result.getJournalEntryData().getContent().get(i).getSubmittedOnDate());
i++;
}
}
private void getAndValidateThereIsJournalEntriesForTransfer(Long transferId, ExpectedJournalEntryData... expectedItems) {
ExternalOwnerTransferJournalEntryData result = EXTERNAL_ASSET_OWNER_HELPER.retrieveJournalEntriesOfTransfer(transferId);
assertNotNull(result);
long totalElements = result.getJournalEntryData().getTotalElements();
assertEquals(expectedItems.length, totalElements);
int i = 0;
assertEquals(transferId, result.getTransferData().getTransferId());
for (ExpectedJournalEntryData expectedJournalEntryData : expectedItems) {
assertTrue(expectedJournalEntryData.amount.compareTo(result.getJournalEntryData().getContent().get(i).getAmount()) == 0);
assertEquals(expectedJournalEntryData.entryTypeId, result.getJournalEntryData().getContent().get(i).getEntryType().getId());
assertEquals(expectedJournalEntryData.glAccountId, result.getJournalEntryData().getContent().get(i).getGlAccountId());
assertEquals(expectedJournalEntryData.transactionDate, result.getJournalEntryData().getContent().get(i).getTransactionDate());
assertEquals(expectedJournalEntryData.submittedOnDate, result.getJournalEntryData().getContent().get(i).getSubmittedOnDate());
i++;
}
}
private void getAndValidateThereIsNoJournalEntriesForTransfer(Long transferId) {
ExternalOwnerTransferJournalEntryData result = EXTERNAL_ASSET_OWNER_HELPER.retrieveJournalEntriesOfTransfer(transferId);
assertNull(result.getJournalEntryData());
}
@RequiredArgsConstructor() @RequiredArgsConstructor()
public static class ExpectedExternalTransferData { public static class ExpectedExternalTransferData {
private final ExternalTransferData.StatusEnum status; private final ExternalTransferData.StatusEnum status;
private final String transferExternalId; private final String transferExternalId;
private final String settlementDate; private final String settlementDate;
private final String effectiveFrom; private final String effectiveFrom;
private final String effectiveTo; private final String effectiveTo;
private final boolean detailsExpected; private final boolean detailsExpected;
@@ -596,7 +641,9 @@ public class InitiateExternalAssetOwnerTransferTest {
public static class ExpectedJournalEntryData { public static class ExpectedJournalEntryData {
private final Long glAccountId; private final Long glAccountId;
private final Long entryTypeId; private final Long entryTypeId;
private final BigDecimal amount; private final BigDecimal amount;
private final LocalDate transactionDate; private final LocalDate transactionDate;
private final LocalDate submittedOnDate; private final LocalDate submittedOnDate;