From 58d4cb6a8d903caa3e285126c0b75dabde052df2 Mon Sep 17 00:00:00 2001 From: Adam Saghy Date: Fri, 16 Jun 2023 15:01:32 +0200 Subject: [PATCH] FINERACT-1926: Remove unnecessary changes field from response --- .../ExternalAssetOwnersWriteServiceImpl.java | 13 +- ...nitiateExternalAssetOwnerTransferTest.java | 253 +++++++++++------- 2 files changed, 153 insertions(+), 113 deletions(-) diff --git a/fineract-investor/src/main/java/org/apache/fineract/investor/service/ExternalAssetOwnersWriteServiceImpl.java b/fineract-investor/src/main/java/org/apache/fineract/investor/service/ExternalAssetOwnersWriteServiceImpl.java index 270d08729..1a026023b 100644 --- a/fineract-investor/src/main/java/org/apache/fineract/investor/service/ExternalAssetOwnersWriteServiceImpl.java +++ b/fineract-investor/src/main/java/org/apache/fineract/investor/service/ExternalAssetOwnersWriteServiceImpl.java @@ -24,7 +24,6 @@ import java.lang.reflect.Type; import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; -import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -82,7 +81,7 @@ public class ExternalAssetOwnersWriteServiceImpl implements ExternalAssetOwnersW ExternalAssetOwnerTransfer externalAssetOwnerTransfer = createSaleTransfer(loanId, command.json(), loanIdAndExternalIdAndStatus.getExternalId()); validateSale(externalAssetOwnerTransfer); - externalAssetOwnerTransferRepository.save(externalAssetOwnerTransfer); + externalAssetOwnerTransferRepository.saveAndFlush(externalAssetOwnerTransfer); return buildResponseData(externalAssetOwnerTransfer); } @@ -96,7 +95,7 @@ public class ExternalAssetOwnersWriteServiceImpl implements ExternalAssetOwnersW validateSettlementDate(settlementDate); ExternalAssetOwnerTransfer effectiveTransfer = fetchAndValidateEffectiveTransferForBuyback(loanId, settlementDate); ExternalAssetOwnerTransfer externalAssetOwnerTransfer = createBuybackTransfer(effectiveTransfer, settlementDate, externalId); - externalAssetOwnerTransferRepository.save(externalAssetOwnerTransfer); + externalAssetOwnerTransferRepository.saveAndFlush(externalAssetOwnerTransfer); return buildResponseData(externalAssetOwnerTransfer); } @@ -162,18 +161,12 @@ public class ExternalAssetOwnersWriteServiceImpl implements ExternalAssetOwnersW } private CommandProcessingResult buildResponseData(ExternalAssetOwnerTransfer savedExternalAssetOwnerTransfer) { - Map 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()) .withEntityExternalId(savedExternalAssetOwnerTransfer.getExternalId()) .withSubEntityId(savedExternalAssetOwnerTransfer.getLoanId()) .withSubEntityExternalId(Objects.isNull(savedExternalAssetOwnerTransfer.getExternalLoanId()) ? null : savedExternalAssetOwnerTransfer.getExternalLoanId()) - .with(changes).build(); + .build(); } private void validateSale(ExternalAssetOwnerTransfer externalAssetOwnerTransfer) { diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/investor/externalassetowner/InitiateExternalAssetOwnerTransferTest.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/investor/externalassetowner/InitiateExternalAssetOwnerTransferTest.java index 1b4b8e8c2..45d3fcb45 100644 --- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/investor/externalassetowner/InitiateExternalAssetOwnerTransferTest.java +++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/investor/externalassetowner/InitiateExternalAssetOwnerTransferTest.java @@ -85,7 +85,6 @@ import org.junit.jupiter.api.extension.ExtendWith; @ExtendWith(LoanTestLifecycleExtension.class) public class InitiateExternalAssetOwnerTransferTest { - public String ownerExternalId; private static ResponseSpecification RESPONSE_SPEC; private static RequestSpecification REQUEST_SPEC; private static Account ASSET_ACCOUNT; @@ -99,6 +98,7 @@ public class InitiateExternalAssetOwnerTransferTest { private static LoanTransactionHelper LOAN_TRANSACTION_HELPER; private static SchedulerJobHelper SCHEDULER_JOB_HELPER; private static LocalDate TODAYS_DATE; + public String ownerExternalId; private DateTimeFormatter dateFormatter = new DateTimeFormatterBuilder().appendPattern("dd MMMM yyyy").toFormatter(); @BeforeAll @@ -139,28 +139,34 @@ public class InitiateExternalAssetOwnerTransferTest { @Test public void saleActiveLoanToExternalAssetOwnerAndBuybackADayLater() { try { + GlobalConfigurationHelper.manageConfigurations(REQUEST_SPEC, RESPONSE_SPEC, + GlobalConfigurationHelper.ENABLE_AUTOGENERATED_EXTERNAL_ID, true); setInitialBusinessDate("2020-03-02"); Integer clientID = createClient(); Integer loanID = createLoanForClient(clientID); addPenaltyForLoan(loanID, "10"); - String transferExternalId = createExternalAssetOwnerTransfer(loanID, "sale", "2020-03-02"); + PostInitiateTransferResponse saleTransferResponse = createExternalAssetOwnerTransfer(loanID, "sale", "2020-03-02"); + validateResponse(saleTransferResponse, loanID); getAndValidateExternalAssetOwnerTransferByLoan(loanID, - ExpectedExternalTransferData.expected(PENDING, transferExternalId, "2020-03-02", "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"))); - getAndValidateThereIsNoActiveMapping(transferExternalId); + ExpectedExternalTransferData.expected(PENDING, saleTransferResponse.getResourceExternalId(), "2020-03-02", "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"))); + getAndValidateThereIsNoActiveMapping(saleTransferResponse.getResourceExternalId()); PageExternalTransferData retrieveResponse = EXTERNAL_ASSET_OWNER_HELPER.retrieveTransfersByLoanId(loanID.longValue()); retrieveResponse.getContent().forEach(transfer -> getAndValidateThereIsNoJournalEntriesForTransfer(transfer.getTransferId())); updateBusinessDateAndExecuteCOBJob("2020-03-03"); getAndValidateExternalAssetOwnerTransferByLoan(loanID, - ExpectedExternalTransferData.expected(PENDING, transferExternalId, "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")), - ExpectedExternalTransferData.expected(ACTIVE, transferExternalId, "2020-03-02", "2020-03-03", "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"))); + ExpectedExternalTransferData.expected(PENDING, 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")), + ExpectedExternalTransferData.expected(ACTIVE, saleTransferResponse.getResourceExternalId(), "2020-03-02", "2020-03-03", + "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); retrieveResponse = EXTERNAL_ASSET_OWNER_HELPER.retrieveTransfersByLoanId(loanID.longValue()); LocalDate expectedDate = LocalDate.of(2020, 3, 2); @@ -178,17 +184,21 @@ public class InitiateExternalAssetOwnerTransferTest { ExpectedJournalEntryData.expected((long) TRANSFER_ACCOUNT.getAccountID(), (long) JournalEntryType.CREDIT.getValue(), 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, - ExpectedExternalTransferData.expected(PENDING, transferExternalId, "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")), - ExpectedExternalTransferData.expected(ACTIVE, transferExternalId, "2020-03-02", "2020-03-03", "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")), - ExpectedExternalTransferData.expected(BUYBACK, buybackTransferExternalId, "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"))); + ExpectedExternalTransferData.expected(PENDING, 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")), + ExpectedExternalTransferData.expected(ACTIVE, saleTransferResponse.getResourceExternalId(), "2020-03-02", "2020-03-03", + "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")), + 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); retrieveResponse = EXTERNAL_ASSET_OWNER_HELPER.retrieveTransfersByLoanId(loanID.longValue()); getAndValidateThereIsNoJournalEntriesForTransfer(retrieveResponse.getContent().get(2).getTransferId()); @@ -208,16 +218,19 @@ public class InitiateExternalAssetOwnerTransferTest { updateBusinessDateAndExecuteCOBJob("2020-03-04"); getAndValidateExternalAssetOwnerTransferByLoan(loanID, - ExpectedExternalTransferData.expected(PENDING, transferExternalId, "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")), - ExpectedExternalTransferData.expected(ACTIVE, transferExternalId, "2020-03-02", "2020-03-03", "2020-03-03", 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")), - ExpectedExternalTransferData.expected(BUYBACK, buybackTransferExternalId, "2020-03-03", "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(transferExternalId); + ExpectedExternalTransferData.expected(PENDING, 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")), + ExpectedExternalTransferData.expected(ACTIVE, saleTransferResponse.getResourceExternalId(), "2020-03-02", "2020-03-03", + "2020-03-03", 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")), + ExpectedExternalTransferData.expected(BUYBACK, buybackTransferResponse.getResourceExternalId(), "2020-03-03", + "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()); expectedDate = LocalDate.of(2020, 3, 3); 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 public void saleIsNotAllowedWhenTransferIsAlreadyPending() { try { + GlobalConfigurationHelper.manageConfigurations(REQUEST_SPEC, RESPONSE_SPEC, + GlobalConfigurationHelper.ENABLE_AUTOGENERATED_EXTERNAL_ID, true); setInitialBusinessDate("2020-03-02"); Integer clientID = createClient(); Integer loanID = createLoanForClient(clientID); @@ -314,6 +291,8 @@ public class InitiateExternalAssetOwnerTransferTest { @Test public void saleIsNotAllowedWhenLoanIsNotActive() { try { + GlobalConfigurationHelper.manageConfigurations(REQUEST_SPEC, RESPONSE_SPEC, + GlobalConfigurationHelper.ENABLE_AUTOGENERATED_EXTERNAL_ID, true); setInitialBusinessDate("2020-03-02"); Integer clientID = createClient(); Integer loanID = createLoanForClient(clientID); @@ -333,38 +312,48 @@ public class InitiateExternalAssetOwnerTransferTest { @Test public void saleAndBuybackOnTheSameDay() { try { + GlobalConfigurationHelper.manageConfigurations(REQUEST_SPEC, RESPONSE_SPEC, + GlobalConfigurationHelper.ENABLE_AUTOGENERATED_EXTERNAL_ID, true); setInitialBusinessDate("2020-03-02"); Integer clientID = createClient(); Integer loanID = createLoanForClient(clientID); - String transferExternalId = createExternalAssetOwnerTransfer(loanID, "sale", "2020-03-02"); - String buyBackTransferExternalId = createExternalAssetOwnerTransfer(loanID, "buyback", "2020-03-02"); + PostInitiateTransferResponse saleTransferResponse = createExternalAssetOwnerTransfer(loanID, "sale", "2020-03-02"); + validateResponse(saleTransferResponse, loanID); + PostInitiateTransferResponse buybackTransferResponse = createExternalAssetOwnerTransfer(loanID, "buyback", "2020-03-02"); + validateResponse(buybackTransferResponse, loanID); getAndValidateExternalAssetOwnerTransferByLoan(loanID, - ExpectedExternalTransferData.expected(PENDING, transferExternalId, "2020-03-02", "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")), - ExpectedExternalTransferData.expected(BUYBACK, buyBackTransferExternalId, "2020-03-02", "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"))); - getAndValidateThereIsNoActiveMapping(transferExternalId); - getAndValidateThereIsNoActiveMapping(buyBackTransferExternalId); + ExpectedExternalTransferData.expected(PENDING, saleTransferResponse.getResourceExternalId(), "2020-03-02", "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")), + ExpectedExternalTransferData.expected(BUYBACK, buybackTransferResponse.getResourceExternalId(), "2020-03-02", + "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"))); + getAndValidateThereIsNoActiveMapping(saleTransferResponse.getResourceExternalId()); + getAndValidateThereIsNoActiveMapping(buybackTransferResponse.getResourceExternalId()); updateBusinessDateAndExecuteCOBJob("2020-03-03"); getAndValidateExternalAssetOwnerTransferByLoan(loanID, - ExpectedExternalTransferData.expected(PENDING, transferExternalId, "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")), - ExpectedExternalTransferData.expected(BUYBACK, buyBackTransferExternalId, "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")), - ExpectedExternalTransferData.expected(CANCELLED, buyBackTransferExternalId, "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")), - ExpectedExternalTransferData.expected(CANCELLED, transferExternalId, "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"))); + ExpectedExternalTransferData.expected(PENDING, 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")), + ExpectedExternalTransferData.expected(BUYBACK, buybackTransferResponse.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")), + ExpectedExternalTransferData.expected(CANCELLED, buybackTransferResponse.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")), + 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); } finally { cleanUpAndRestoreBusinessDate(); @@ -374,20 +363,24 @@ public class InitiateExternalAssetOwnerTransferTest { @Test public void saleAndBuybackMultipleTimes() { try { + GlobalConfigurationHelper.manageConfigurations(REQUEST_SPEC, RESPONSE_SPEC, + GlobalConfigurationHelper.ENABLE_AUTOGENERATED_EXTERNAL_ID, true); setInitialBusinessDate("2020-03-02"); Integer clientID = createClient(); Integer loanID = createLoanForClient(clientID); - String transferExternalId = createExternalAssetOwnerTransfer(loanID, "sale", "2020-03-04"); - String buybackTransferExternalId = createExternalAssetOwnerTransfer(loanID, "buyback", "2020-03-04"); + PostInitiateTransferResponse saleTransferResponse = createExternalAssetOwnerTransfer(loanID, "sale", "2020-03-04"); + PostInitiateTransferResponse buybackTransferResponse = createExternalAssetOwnerTransfer(loanID, "buyback", "2020-03-04"); getAndValidateExternalAssetOwnerTransferByLoan(loanID, - ExpectedExternalTransferData.expected(PENDING, transferExternalId, "2020-03-04", "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")), - ExpectedExternalTransferData.expected(BUYBACK, buybackTransferExternalId, "2020-03-04", "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"))); + ExpectedExternalTransferData.expected(PENDING, saleTransferResponse.getResourceExternalId(), "2020-03-04", "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")), + ExpectedExternalTransferData.expected(BUYBACK, buybackTransferResponse.getResourceExternalId(), "2020-03-04", + "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, () -> createExternalAssetOwnerTransfer(loanID, "sale", "2020-03-04")); @@ -407,7 +400,7 @@ public class InitiateExternalAssetOwnerTransferTest { 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(); if (command.equals("sale")) { ownerExternalId = UUID.randomUUID().toString(); @@ -416,14 +409,14 @@ public class InitiateExternalAssetOwnerTransferTest { new PostInitiateTransferRequest().settlementDate(settlementDate).dateFormat("yyyy-MM-dd").locale("en") .transferExternalId(transferExternalId).ownerExternalId(ownerExternalId).purchasePriceRatio("1.0")); assertEquals(transferExternalId, saleResponse.getResourceExternalId()); - return transferExternalId; + return saleResponse; } private void addPenaltyForLoan(Integer loanID, String amount) { // Add Charge Penalty Integer penalty = ChargesHelper.createCharges(REQUEST_SPEC, RESPONSE_SPEC, 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)); assertNotNull(penalty1LoanChargeId); } @@ -441,6 +434,8 @@ public class InitiateExternalAssetOwnerTransferTest { RESPONSE_SPEC = new ResponseSpecBuilder().expectStatusCode(200).build(); BusinessDateHelper.updateBusinessDate(REQUEST_SPEC, RESPONSE_SPEC, BUSINESS_DATE, TODAYS_DATE); GlobalConfigurationHelper.updateIsBusinessDateEnabled(REQUEST_SPEC, RESPONSE_SPEC, Boolean.FALSE); + GlobalConfigurationHelper.manageConfigurations(REQUEST_SPEC, RESPONSE_SPEC, + GlobalConfigurationHelper.ENABLE_AUTOGENERATED_EXTERNAL_ID, false); } @NotNull @@ -564,13 +559,63 @@ public class InitiateExternalAssetOwnerTransferTest { 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() public static class ExpectedExternalTransferData { private final ExternalTransferData.StatusEnum status; private final String transferExternalId; + private final String settlementDate; + private final String effectiveFrom; private final String effectiveTo; private final boolean detailsExpected; @@ -596,7 +641,9 @@ public class InitiateExternalAssetOwnerTransferTest { public static class ExpectedJournalEntryData { private final Long glAccountId; + private final Long entryTypeId; + private final BigDecimal amount; private final LocalDate transactionDate; private final LocalDate submittedOnDate;