From dde36f391c6b067c1939d027a8d52d971e25242e Mon Sep 17 00:00:00 2001 From: Janos Haber Date: Mon, 9 Jan 2023 13:34:37 +0100 Subject: [PATCH] FINERACT-1734 - Loan Account Delinquency Changed event definition [x] Fix Charge data because not fetched the content --- .../avro/loan/v1/LoanChargeDataRangeViewV1.avsc | 2 +- ...linquencyRangeChangeBusinessEventSerializer.java | 13 ++++++------- ...nAccountDelinquencyRangeEventSerializerTest.java | 12 +++++++++--- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/fineract-avro-schemas/src/main/avro/loan/v1/LoanChargeDataRangeViewV1.avsc b/fineract-avro-schemas/src/main/avro/loan/v1/LoanChargeDataRangeViewV1.avsc index ebb747c76..142f6446c 100644 --- a/fineract-avro-schemas/src/main/avro/loan/v1/LoanChargeDataRangeViewV1.avsc +++ b/fineract-avro-schemas/src/main/avro/loan/v1/LoanChargeDataRangeViewV1.avsc @@ -13,7 +13,7 @@ }, { "name": "currency", - "type": ["org.apache.fineract.avro.generic.v1.CurrencyDataV1"] + "type": "org.apache.fineract.avro.generic.v1.CurrencyDataV1" }, { "name": "amount", diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/event/external/service/serialization/serializer/loan/LoanDelinquencyRangeChangeBusinessEventSerializer.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/event/external/service/serialization/serializer/loan/LoanDelinquencyRangeChangeBusinessEventSerializer.java index f73b16b6c..bc448ff01 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/event/external/service/serialization/serializer/loan/LoanDelinquencyRangeChangeBusinessEventSerializer.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/event/external/service/serialization/serializer/loan/LoanDelinquencyRangeChangeBusinessEventSerializer.java @@ -37,8 +37,8 @@ import org.apache.fineract.infrastructure.event.external.service.serialization.s import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency; import org.apache.fineract.portfolio.loanaccount.data.LoanAccountData; import org.apache.fineract.portfolio.loanaccount.domain.Loan; -import org.apache.fineract.portfolio.loanaccount.domain.LoanInstallmentCharge; import org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleInstallment; +import org.apache.fineract.portfolio.loanaccount.service.LoanChargeReadPlatformService; import org.apache.fineract.portfolio.loanaccount.service.LoanReadPlatformService; import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; @@ -53,6 +53,8 @@ public class LoanDelinquencyRangeChangeBusinessEventSerializer extends AbstractB private final LoanDelinquencyRangeDataMapper mapper; + private final LoanChargeReadPlatformService loanChargeReadPlatformService; + private final LoanChargeDataMapper chargeMapper; private final CurrencyDataMapper currencyMapper; @@ -65,13 +67,10 @@ public class LoanDelinquencyRangeChangeBusinessEventSerializer extends AbstractB String accountNumber = data.getAccountNo(); String externalId = data.getExternalId().getValue(); MonetaryCurrency loanCurrency = event.get().getCurrency(); - List charges = event// - .get()// - .getRepaymentScheduleInstallments()// + + List charges = loanChargeReadPlatformService.retrieveLoanCharges(id)// .stream()// - .flatMap(installment -> installment.getInstallmentCharges().stream())// - .map(LoanInstallmentCharge::getLoancharge)// - .map(charge -> chargeMapper.mapRangeView(charge.toData()))// + .map(chargeMapper::mapRangeView)// .toList(); LoanAmountDataV1 amount = LoanAmountDataV1.newBuilder()// .setPrincipalAmount(calculateDataSummary(event.get(), diff --git a/fineract-provider/src/test/java/org/apache/fineract/infrastructure/event/external/service/serialization/serializer/loan/LoanAccountDelinquencyRangeEventSerializerTest.java b/fineract-provider/src/test/java/org/apache/fineract/infrastructure/event/external/service/serialization/serializer/loan/LoanAccountDelinquencyRangeEventSerializerTest.java index a4d70e36c..78f6b9205 100644 --- a/fineract-provider/src/test/java/org/apache/fineract/infrastructure/event/external/service/serialization/serializer/loan/LoanAccountDelinquencyRangeEventSerializerTest.java +++ b/fineract-provider/src/test/java/org/apache/fineract/infrastructure/event/external/service/serialization/serializer/loan/LoanAccountDelinquencyRangeEventSerializerTest.java @@ -21,6 +21,7 @@ package org.apache.fineract.infrastructure.event.external.service.serialization. import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -61,6 +62,7 @@ import org.apache.fineract.portfolio.loanaccount.domain.Loan; import org.apache.fineract.portfolio.loanaccount.domain.LoanCharge; import org.apache.fineract.portfolio.loanaccount.domain.LoanInstallmentCharge; import org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleInstallment; +import org.apache.fineract.portfolio.loanaccount.service.LoanChargeReadPlatformService; import org.apache.fineract.portfolio.loanaccount.service.LoanReadPlatformService; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -77,6 +79,9 @@ public class LoanAccountDelinquencyRangeEventSerializerTest { @Mock private LoanReadPlatformService loanReadPlatformService; + @Mock + private LoanChargeReadPlatformService loanChargeReadPlatformService; + @BeforeEach public void setUp() { ThreadLocalContextUtil.setTenant(new FineractPlatformTenant(1L, "default", "Default", "Asia/Kolkata", null)); @@ -88,8 +93,8 @@ public class LoanAccountDelinquencyRangeEventSerializerTest { public void testLoanRepaymentEventPayloadSerialization() throws IOException { // given LoanDelinquencyRangeChangeBusinessEventSerializer serializer = new LoanDelinquencyRangeChangeBusinessEventSerializer( - loanReadPlatformService, new LoanDelinquencyRangeDataMapperImpl(), new LoanChargeDataMapperImpl(), - new CurrencyDataMapperImpl()); + loanReadPlatformService, new LoanDelinquencyRangeDataMapperImpl(), loanChargeReadPlatformService, + new LoanChargeDataMapperImpl(), new CurrencyDataMapperImpl()); Loan loanForProcessing = Mockito.mock(Loan.class); LoanAccountData loanAccountData = mock(LoanAccountData.class); @@ -104,7 +109,6 @@ public class LoanAccountDelinquencyRangeEventSerializerTest { when(loanAccountData.getCurrency()).thenAnswer(a -> new CurrencyData(loanCurrency.getCode(), loanCurrency.getDigitsAfterDecimal(), loanCurrency.getCurrencyInMultiplesOf())); when(loanForProcessing.getCurrency()).thenReturn(loanCurrency); - when(loanReadPlatformService.retrieveOne(any(Long.class))).thenReturn(loanAccountData); LoanDelinquencyRangeChangeBusinessEvent event = new LoanDelinquencyRangeChangeBusinessEvent(loanForProcessing); @@ -113,6 +117,8 @@ public class LoanAccountDelinquencyRangeEventSerializerTest { repaymentScheduleInstallments.add(buildInstallment(loanForProcessing, loanCurrency, BigDecimal.valueOf(100), BigDecimal.valueOf(5), BigDecimal.valueOf(30), BigDecimal.valueOf(50), BigDecimal.valueOf(185), new BigDecimal("100.5"), new BigDecimal("200.3"))); when(loanForProcessing.getRepaymentScheduleInstallments()).thenReturn(repaymentScheduleInstallments); + when(loanChargeReadPlatformService.retrieveLoanCharges(anyLong())).thenAnswer(a -> repaymentScheduleInstallments.get(0) + .getInstallmentCharges().stream().map(c -> c.getLoancharge().toData()).collect(Collectors.toList())); moneyHelper.when(() -> MoneyHelper.getRoundingMode()).thenReturn(RoundingMode.UP);