FINERACT-1694: Bulk event support
This commit is contained in:
committed by
Arnold Gálovics
parent
a0749ffe19
commit
7558b09def
+42
-3
@@ -20,26 +20,33 @@ package org.apache.fineract.infrastructure.event.external.service;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.BDDMockito.given;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.time.LocalDate;
|
||||
import java.time.ZoneId;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import javax.persistence.EntityManager;
|
||||
import org.apache.fineract.avro.BulkMessageItemV1;
|
||||
import org.apache.fineract.avro.loan.v1.LoanAccountDataV1;
|
||||
import org.apache.fineract.infrastructure.businessdate.domain.BusinessDateType;
|
||||
import org.apache.fineract.infrastructure.core.domain.FineractPlatformTenant;
|
||||
import org.apache.fineract.infrastructure.core.service.ThreadLocalContextUtil;
|
||||
import org.apache.fineract.infrastructure.event.business.domain.BulkBusinessEvent;
|
||||
import org.apache.fineract.infrastructure.event.business.domain.BusinessEvent;
|
||||
import org.apache.fineract.infrastructure.event.external.repository.ExternalEventRepository;
|
||||
import org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEvent;
|
||||
import org.apache.fineract.infrastructure.event.external.service.idempotency.ExternalEventIdempotencyKeyGenerator;
|
||||
import org.apache.fineract.infrastructure.event.external.service.serialization.BusinessEventSerializerFactory;
|
||||
import org.apache.fineract.infrastructure.event.external.service.message.BulkMessageItemFactory;
|
||||
import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.BusinessEventSerializer;
|
||||
import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.BusinessEventSerializerFactory;
|
||||
import org.apache.fineract.infrastructure.event.external.service.support.ByteBufferConverter;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
@@ -58,13 +65,18 @@ class ExternalEventServiceTest {
|
||||
@Mock
|
||||
private BusinessEventSerializerFactory serializerFactory;
|
||||
@Mock
|
||||
private ByteBufferConverter byteBufferConverter;
|
||||
@Mock
|
||||
private BulkMessageItemFactory bulkMessageItemFactory;
|
||||
@Mock
|
||||
private EntityManager entityManager;
|
||||
|
||||
private ExternalEventService underTest;
|
||||
|
||||
@BeforeEach
|
||||
public void setUp() {
|
||||
underTest = new ExternalEventService(repository, idempotencyKeyGenerator, serializerFactory);
|
||||
underTest = new ExternalEventService(repository, idempotencyKeyGenerator, serializerFactory, byteBufferConverter,
|
||||
bulkMessageItemFactory);
|
||||
underTest.setEntityManager(entityManager);
|
||||
FineractPlatformTenant tenant = new FineractPlatformTenant(1L, "default", "Default Tenant", "Europe/Budapest", null);
|
||||
ThreadLocalContextUtil.setTenant(tenant);
|
||||
@@ -94,7 +106,7 @@ class ExternalEventServiceTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPostEventShouldWork() throws IOException {
|
||||
public void testPostEventShouldWorkWithRegularEvent() throws IOException {
|
||||
// given
|
||||
ArgumentCaptor<ExternalEvent> externalEventArgumentCaptor = ArgumentCaptor.forClass(ExternalEvent.class);
|
||||
|
||||
@@ -120,4 +132,31 @@ class ExternalEventServiceTest {
|
||||
assertThat(externalEvent.getType()).isEqualTo(eventType);
|
||||
assertThat(externalEvent.getSchema()).isEqualTo(eventSchema);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPostEventShouldWorkWithBulkEvent() throws IOException {
|
||||
// given
|
||||
ArgumentCaptor<ExternalEvent> externalEventArgumentCaptor = ArgumentCaptor.forClass(ExternalEvent.class);
|
||||
String eventType = "BulkBusinessEvent";
|
||||
String schema = "org.apache.fineract.avro.BulkMessagePayloadV1";
|
||||
|
||||
String idempotencyKey = "key";
|
||||
BusinessEvent event = mock(BusinessEvent.class);
|
||||
BulkMessageItemV1 messageItem = new BulkMessageItemV1(1, "", "", "", ByteBuffer.wrap(new byte[0]));
|
||||
BulkBusinessEvent bulkEvent = new BulkBusinessEvent(List.of(event));
|
||||
byte[] data = new byte[0];
|
||||
|
||||
given(bulkMessageItemFactory.createBulkMessageItem(1, event)).willReturn(messageItem);
|
||||
given(idempotencyKeyGenerator.generate(bulkEvent)).willReturn(idempotencyKey);
|
||||
given(byteBufferConverter.convert(any(ByteBuffer.class))).willReturn(data);
|
||||
// when
|
||||
underTest.postEvent(bulkEvent);
|
||||
// then
|
||||
verify(repository).save(externalEventArgumentCaptor.capture());
|
||||
ExternalEvent externalEvent = externalEventArgumentCaptor.getValue();
|
||||
assertThat(externalEvent.getIdempotencyKey()).isEqualTo(idempotencyKey);
|
||||
assertThat(externalEvent.getData()).isEqualTo(data);
|
||||
assertThat(externalEvent.getType()).isEqualTo(eventType);
|
||||
assertThat(externalEvent.getSchema()).isEqualTo(schema);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user