This is an automated email from the ASF dual-hosted git repository.
arnold pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract.git
The following commit(s) were added to refs/heads/develop by this push:
new 9571a5102 FINERACT-1724-reversal-date-not-included-in-events
9571a5102 is described below
commit 9571a51025b50824e904475e3f914cacc72449b9
Author: Ruchi Dhamankar <[email protected]>
AuthorDate: Mon Jul 3 12:17:51 2023 +0530
FINERACT-1724-reversal-date-not-included-in-events
---
.../main/avro/loan/v1/LoanTransactionDataV1.avsc | 8 ++
...justTransactionBusinessEventSerializerTest.java | 111 +++++++++++++++++++++
2 files changed, 119 insertions(+)
diff --git
a/fineract-avro-schemas/src/main/avro/loan/v1/LoanTransactionDataV1.avsc
b/fineract-avro-schemas/src/main/avro/loan/v1/LoanTransactionDataV1.avsc
index 9ee340aa3..1503ddafd 100644
--- a/fineract-avro-schemas/src/main/avro/loan/v1/LoanTransactionDataV1.avsc
+++ b/fineract-avro-schemas/src/main/avro/loan/v1/LoanTransactionDataV1.avsc
@@ -236,6 +236,14 @@
"items":
"org.apache.fineract.avro.loan.v1.UnpaidChargeDataV1"
}
]
+ },
+ {
+ "default": null,
+ "name": "reversedOnDate",
+ "type": [
+ "null",
+ "string"
+ ]
}
]
}
diff --git
a/fineract-provider/src/test/java/org/apache/fineract/infrastructure/event/external/service/serialization/serializer/loan/LoanAdjustTransactionBusinessEventSerializerTest.java
b/fineract-provider/src/test/java/org/apache/fineract/infrastructure/event/external/service/serialization/serializer/loan/LoanAdjustTransactionBusinessEventSerializerTest.java
new file mode 100644
index 000000000..f3b724c83
--- /dev/null
+++
b/fineract-provider/src/test/java/org/apache/fineract/infrastructure/event/external/service/serialization/serializer/loan/LoanAdjustTransactionBusinessEventSerializerTest.java
@@ -0,0 +1,111 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package
org.apache.fineract.infrastructure.event.external.service.serialization.serializer.loan;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.Mockito.when;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.fineract.avro.loan.v1.LoanTransactionAdjustmentDataV1;
+import org.apache.fineract.infrastructure.businessdate.domain.BusinessDateType;
+import org.apache.fineract.infrastructure.core.domain.ActionContext;
+import org.apache.fineract.infrastructure.core.domain.ExternalId;
+import org.apache.fineract.infrastructure.core.domain.FineractPlatformTenant;
+import org.apache.fineract.infrastructure.core.service.ThreadLocalContextUtil;
+import
org.apache.fineract.infrastructure.event.business.domain.loan.LoanAdjustTransactionBusinessEvent;
+import
org.apache.fineract.infrastructure.event.external.service.serialization.mapper.loan.LoanTransactionDataMapperImpl;
+import
org.apache.fineract.infrastructure.event.external.service.serialization.mapper.support.AvroDateTimeMapper;
+import
org.apache.fineract.infrastructure.event.external.service.serialization.mapper.support.ExternalIdMapper;
+import org.apache.fineract.portfolio.loanaccount.data.LoanTransactionData;
+import org.apache.fineract.portfolio.loanaccount.domain.Loan;
+import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction;
+import
org.apache.fineract.portfolio.loanaccount.service.LoanChargePaidByReadPlatformService;
+import
org.apache.fineract.portfolio.loanaccount.service.LoanReadPlatformService;
+import org.apache.fineract.portfolio.loanproduct.service.LoanEnumerations;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.mockito.junit.jupiter.MockitoSettings;
+import org.mockito.quality.Strictness;
+
+@ExtendWith(MockitoExtension.class)
+@MockitoSettings(strictness = Strictness.LENIENT)
+
+public class LoanAdjustTransactionBusinessEventSerializerTest {
+
+ @Mock
+ private LoanReadPlatformService service;
+ @Mock
+ private LoanChargePaidByReadPlatformService
loanChargePaidByReadPlatformService;
+ @Mock
+ private AvroDateTimeMapper avroDateTimeMapper;
+ @Mock
+ private ExternalIdMapper externalIdMapper;
+
+ @BeforeEach
+ public void setUp() {
+ ThreadLocalContextUtil.setTenant(new FineractPlatformTenant(1L,
"default", "Default", "Asia/Kolkata", null));
+ ThreadLocalContextUtil.setActionContext(ActionContext.DEFAULT);
+ ThreadLocalContextUtil
+ .setBusinessDates(new
HashMap<>(Map.of(BusinessDateType.BUSINESS_DATE,
LocalDate.now(ZoneId.systemDefault()))));
+ }
+
+ @Test
+ void loanTransactionReversedOnDateSerializationTest() {
+ Loan loanForProcessing = Mockito.mock(Loan.class);
+ LoanAdjustTransactionBusinessEventSerializer serializer = new
LoanAdjustTransactionBusinessEventSerializer(service,
+ new LoanTransactionDataMapperImpl(avroDateTimeMapper,
externalIdMapper), loanChargePaidByReadPlatformService);
+ LoanTransaction transactionToAdjust =
Mockito.mock(LoanTransaction.class);
+ LoanAdjustTransactionBusinessEvent.Data
loanAdjustTransactionBusinessEventData = new
LoanAdjustTransactionBusinessEvent.Data(
+ transactionToAdjust);
+ LocalDate reversedOnDate = LocalDate.now(ZoneId.systemDefault());
+ String reversedLocalDate =
reversedOnDate.format(DateTimeFormatter.ISO_DATE);
+ LoanAdjustTransactionBusinessEvent businessEvent = new
LoanAdjustTransactionBusinessEvent(loanAdjustTransactionBusinessEventData);
+
+ LoanTransactionData transactionToAdjustData = new
LoanTransactionData(1L, 1L, "", LoanEnumerations.transactionType(2), null, null,
+ LocalDate.now(ZoneId.systemDefault()),
BigDecimal.valueOf(0.0), BigDecimal.valueOf(0.0), BigDecimal.valueOf(0.0),
+ BigDecimal.valueOf(0.0), BigDecimal.valueOf(0.0),
BigDecimal.valueOf(0.0), BigDecimal.valueOf(0.0), BigDecimal.valueOf(0.0),
+ new ExternalId("testExternalId"), null, null,
BigDecimal.valueOf(0.0), LocalDate.now(ZoneId.systemDefault()).minusDays(4),
+ true, new ExternalId("testReversalExternalId"),
reversedOnDate, 1L, new ExternalId("testExternalLoanId"));
+
+ when(service.retrieveLoanTransaction(anyLong(),
anyLong())).thenReturn(transactionToAdjustData);
+
when(loanChargePaidByReadPlatformService.getLoanChargesPaidByTransactionId(anyLong())).thenReturn(new
ArrayList<>());
+ when(transactionToAdjust.getLoan()).thenReturn(loanForProcessing);
+ when(loanForProcessing.getId()).thenReturn(1L);
+ when(transactionToAdjust.getId()).thenReturn(1L);
+
when(avroDateTimeMapper.mapLocalDate(any())).thenReturn(reversedLocalDate);
+
+ LoanTransactionAdjustmentDataV1 loanTransactionAdjustmentDataV1 =
(LoanTransactionAdjustmentDataV1) serializer
+ .toAvroDTO(businessEvent);
+ assertEquals(reversedLocalDate,
loanTransactionAdjustmentDataV1.getTransactionToAdjust().getReversedOnDate());
+ }
+
+}