From 611801e96557b74bfc1ec9a4ae418de352c18281 Mon Sep 17 00:00:00 2001 From: psemenkov Date: Tue, 21 Mar 2023 10:19:48 +0300 Subject: [PATCH] Adding ExecutionDepositComponentTest. --- .../ExecutionDepositComponentTest.java | 92 +++++++++++++++++++ .../service/PaymentUpdateBySdf04Test.java | 26 ++---- .../VerificationResultComponentTest.java | 27 ++---- .../ru/spcex/clearing/utils/TestUtils.java | 20 +++- 4 files changed, 128 insertions(+), 37 deletions(-) create mode 100644 clearing-parent/clearing-service/src/test/java/ru/spcex/clearing/service/ExecutionDepositComponentTest.java diff --git a/clearing-parent/clearing-service/src/test/java/ru/spcex/clearing/service/ExecutionDepositComponentTest.java b/clearing-parent/clearing-service/src/test/java/ru/spcex/clearing/service/ExecutionDepositComponentTest.java new file mode 100644 index 000000000..0f4ff3be6 --- /dev/null +++ b/clearing-parent/clearing-service/src/test/java/ru/spcex/clearing/service/ExecutionDepositComponentTest.java @@ -0,0 +1,92 @@ +package ru.spcex.clearing.service; + +import org.apache.kafka.clients.consumer.MockConsumer; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import ru.clearing.classes.statics.data.account.Account; +import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.classes.statics.data.execution.ExecutionDeposit; +import ru.clearing.classes.statics.data.misc.Listing; +import ru.clearing.classes.statics.data.misc.STrade; +import ru.clearing.classes.statics.data.security.Security; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.cud.schedule.LauncherCommandRequest; +import ru.spcex.platform.enumeration.Task; +import ru.spcex.platform.imdg.api.Imdg; + +import javax.annotation.PostConstruct; +import java.time.Instant; +import java.time.LocalDate; +import java.util.concurrent.atomic.AtomicInteger; + +import static ru.spcex.clearing.utils.TestUtils.addRecordToKafka; +import static ru.spcex.clearing.utils.TestUtils.getJsonStringForUPDATE; + +class ExecutionDepositComponentTest extends AbstractClearingTest { + private static final int PARTITION = 0; + private static final AtomicInteger currentInteger = new AtomicInteger(1); + private static final String TOPIC = Task.getOfTrades.topic(); + @Autowired + EventsReceiver eventsReceiver; + @Autowired + ExecutionDepositComponent executionDepositComponent; + private Instant todayInstant; + private Imdg sTradeImdg; + private Imdg securityImdg; + private Imdg executionDepositImdg; + private Imdg companyImdg; + private Imdg accountImdg; + private Imdg listingImdg; + + @PostConstruct + protected void init() { + super.init(); + executionDepositComponent.resetTradingDay(); + this.todayInstant = executionDepositComponent.tradingDay; + this.sTradeImdg = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_STrade, STrade.class); + this.securityImdg = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_Security, Security.class); + this.executionDepositImdg = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_ExecutionDeposit, ExecutionDeposit.class); + this.companyImdg = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_Company, Company.class); + this.accountImdg = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_Account, Account.class); + this.listingImdg = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_Listing, Listing.class); + + } + + /** + * {@link ExecutionDepositComponent#processNewTS()} ()}
+ * Тест проверяет создание сущностей + * {@link ExecutionDeposit} + * в Hazelcast при передаче из Apache Kafka.
+ */ + @Test + void processNewTS() { + String secCode = "SecCode"; + String operation = "oper"; + STrade sTrade = new STrade(); + Long exchangeExecutionId = 1221L; + LocalDate today = LocalDate.now(); + sTrade.setTradeDateTime(todayInstant); + sTrade.setSecCode(secCode); + sTrade.setOperation(operation); + sTradeImdg.insert(sTrade); + + Security security = new Security(); + security.setSecuritySymbol(secCode); + securityImdg.insert(security); + + ExecutionDeposit executionDeposit = new ExecutionDeposit(); + executionDeposit.setSide(operation); + executionDeposit.setClearingDate(today); + executionDeposit.setExchangeExecutionId(exchangeExecutionId); + executionDepositImdg.insert(executionDeposit); + + int times = currentInteger.getAndIncrement(); + + addRecordToKafka((MockConsumer) eventsReceiver.getConsumer(), TOPIC, + PARTITION, times, getJsonStringForUPDATE(new LauncherCommandRequest(), 1L)); + + //waiting for kafka producer send message (finale event) +// verify(mockProducer, timeout(30_000L).times(times)) +// .send(producerRecord.capture()); + } +} \ No newline at end of file diff --git a/clearing-parent/clearing-service/src/test/java/ru/spcex/clearing/service/PaymentUpdateBySdf04Test.java b/clearing-parent/clearing-service/src/test/java/ru/spcex/clearing/service/PaymentUpdateBySdf04Test.java index ecf793c94..4fae28b35 100644 --- a/clearing-parent/clearing-service/src/test/java/ru/spcex/clearing/service/PaymentUpdateBySdf04Test.java +++ b/clearing-parent/clearing-service/src/test/java/ru/spcex/clearing/service/PaymentUpdateBySdf04Test.java @@ -3,7 +3,6 @@ package ru.spcex.clearing.service; import org.apache.kafka.clients.consumer.MockConsumer; import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; -import org.mockito.Mockito; import org.springframework.beans.factory.annotation.Autowired; import ru.clearing.classes.statics.data.payment.PaymentInstruction; import ru.clearing.classes.statics.data.sdf.SDf04; @@ -12,16 +11,14 @@ import ru.spcex.clearing.platform.messaging.domain.Consts; import ru.spcex.clearing.platform.messaging.domain.cud.clearing.Sdf04Request; import ru.spcex.platform.enumeration.TransactionStatus; import ru.spcex.platform.imdg.api.Imdg; -import ru.spcex.platform.imdg.iml.hazelcast.adapter.ImdgHazelcast; import javax.annotation.PostConstruct; -import java.lang.reflect.Field; import java.util.concurrent.atomic.AtomicInteger; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.mockito.Mockito.*; -import static ru.spcex.clearing.utils.TestUtils.addRecordToKafka; -import static ru.spcex.clearing.utils.TestUtils.getJsonStringForUPDATE; +import static org.mockito.Mockito.timeout; +import static org.mockito.Mockito.verify; +import static ru.spcex.clearing.utils.TestUtils.*; class PaymentUpdateBySdf04Test extends AbstractClearingTest { private static final int PARTITION = 0; @@ -29,7 +26,7 @@ class PaymentUpdateBySdf04Test extends AbstractClearingTest { private static final String TOPIC_SDF04_PROCESS = Consts.SDF04_PROCESS; @Autowired EventsReceiver eventsReceiver; - ImdgHazelcast paymentImdgsMock; + private Imdg paymentImdgsMock; private ArgumentCaptor settingResult; private Imdg paymentImdgs; private Imdg sdf04Imdg; @@ -39,10 +36,10 @@ class PaymentUpdateBySdf04Test extends AbstractClearingTest { super.init(); this.paymentImdgs = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_PaymentInstruction, PaymentInstruction.class); this.sdf04Imdg = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_SDf04, SDf04.class); - this.paymentImdgsMock = Mockito.mock(ImdgHazelcast.class, withSettings() - .serializable() - .spiedInstance(paymentImdgs) - .defaultAnswer(CALLS_REAL_METHODS)); + + //setting imdg for been PaymentUpdateBySdf04 + this.paymentImdgsMock = getMockForFildObj(paymentImdgs, paymentUpdateBySdf04, "paymentImdgs"); + this.settingResult = ArgumentCaptor.forClass(PaymentInstruction.class); } @@ -53,7 +50,7 @@ class PaymentUpdateBySdf04Test extends AbstractClearingTest { * в Hazelcast при передаче из Apache Kafka.
*/ @Test - void updatePayments() throws NoSuchFieldException, IllegalAccessException { + void updatePayments() { //ARRANGE Long sdf04GroupId = 12L; Long paymentId = 10L; @@ -68,11 +65,6 @@ class PaymentUpdateBySdf04Test extends AbstractClearingTest { payment.setId(paymentId); paymentImdgs.insert(payment); - //setting imdg for been PaymentUpdateBySdf04 - Field dbServiceField = PaymentUpdateBySdf04.class.getDeclaredField("paymentImdgs"); - dbServiceField.setAccessible(true); - dbServiceField.set(paymentUpdateBySdf04, paymentImdgsMock); - //ACT & ASSERT checkTransactionStatus(sdf04GroupId, currentInteger.getAndIncrement(), TransactionStatus.ok.getKey()); diff --git a/clearing-parent/clearing-service/src/test/java/ru/spcex/clearing/service/VerificationResultComponentTest.java b/clearing-parent/clearing-service/src/test/java/ru/spcex/clearing/service/VerificationResultComponentTest.java index 5f981d193..248aed0c1 100644 --- a/clearing-parent/clearing-service/src/test/java/ru/spcex/clearing/service/VerificationResultComponentTest.java +++ b/clearing-parent/clearing-service/src/test/java/ru/spcex/clearing/service/VerificationResultComponentTest.java @@ -3,7 +3,6 @@ package ru.spcex.clearing.service; import org.apache.kafka.clients.consumer.MockConsumer; import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; -import org.mockito.Mockito; import org.springframework.beans.factory.annotation.Autowired; import ru.clearing.classes.statics.data.account.Account; import ru.clearing.classes.statics.data.account.AccountBalance; @@ -16,16 +15,15 @@ import ru.spcex.platform.enumeration.AccountType; import ru.spcex.platform.enumeration.ResultStatuses; import ru.spcex.platform.enumeration.Task; import ru.spcex.platform.imdg.api.Imdg; -import ru.spcex.platform.imdg.iml.hazelcast.adapter.ImdgHazelcast; import javax.annotation.PostConstruct; -import java.lang.reflect.Field; import java.math.BigDecimal; import java.util.Collection; import java.util.concurrent.atomic.AtomicInteger; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.timeout; +import static org.mockito.Mockito.verify; import static ru.spcex.clearing.utils.TestUtils.*; class VerificationResultComponentTest extends AbstractClearingTest { @@ -50,20 +48,13 @@ class VerificationResultComponentTest extends AbstractClearingTest { this.accountImdg = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_Account, Account.class); this.companyImdg = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_Company, Company.class); this.verificationResultImdg = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_VerificationResult, VerificationResult.class); - this.verificationResultImdgMock = Mockito.mock(ImdgHazelcast.class, withSettings() - .serializable() - .spiedInstance(verificationResultImdg) - .defaultAnswer(CALLS_REAL_METHODS)); - Field dbServiceField = null; - try { - dbServiceField = VerificationResultComponent.class.getDeclaredField("verificationResultImdg"); - dbServiceField.setAccessible(true); - dbServiceField.set(verificationResultComponent, verificationResultImdgMock); - } catch (NoSuchFieldException e) { - throw new RuntimeException(e); - } catch (IllegalAccessException e) { - throw new RuntimeException(e); - } + clearAllInImdg(sdf01Imdg); + clearAllInImdg(accountBalanceImdg); + clearAllInImdg(accountImdg); + clearAllInImdg(companyImdg); + + //setting imdg for been VerificationResultComponent + this.verificationResultImdgMock = getMockForFildObj(verificationResultImdg, verificationResultComponent, "verificationResultImdg"); } /** diff --git a/clearing-parent/clearing-service/src/test/java/ru/spcex/clearing/utils/TestUtils.java b/clearing-parent/clearing-service/src/test/java/ru/spcex/clearing/utils/TestUtils.java index acc01344c..3d3a969f8 100644 --- a/clearing-parent/clearing-service/src/test/java/ru/spcex/clearing/utils/TestUtils.java +++ b/clearing-parent/clearing-service/src/test/java/ru/spcex/clearing/utils/TestUtils.java @@ -9,6 +9,7 @@ import org.apache.kafka.clients.producer.ProducerRecord; import org.apache.kafka.clients.producer.RecordMetadata; import org.apache.kafka.common.TopicPartition; import org.mockito.ArgumentCaptor; +import org.mockito.Mockito; import ru.clearing.classes.statics.data.execution.ExecutionDeposit; import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets; import ru.clearing.classes.statics.data.payment.PaymentInstruction; @@ -22,6 +23,7 @@ import ru.spcex.platform.enumeration.ClearingCategory; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; +import java.lang.reflect.Field; import java.util.Collection; import java.util.Collections; import java.util.HashMap; @@ -32,8 +34,7 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.mockito.Mockito.timeout; -import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.*; import static ru.spcex.clearing.platform.messaging.service.Status.Success; import static ru.spcex.clearing.utils.MatcherFactory.usingIgnoringFieldsComparator; @@ -96,6 +97,21 @@ public class TestUtils { return jsonBaseRequest; } + public static T getMockForFildObj(T from, V obj, String fildName) { + T mock = Mockito.mock((Class) from.getClass(), withSettings() + .serializable() + .spiedInstance(from) + .defaultAnswer(CALLS_REAL_METHODS)); + try { + Field dbServiceField = obj.getClass().getDeclaredField(fildName); + dbServiceField.setAccessible(true); + dbServiceField.set(obj, mock); + } catch (NoSuchFieldException | IllegalAccessException e) { + throw new RuntimeException(e); + } + return mock; + } + public static void clearAllInImdg(Imdg imdg) { Collection values = imdg.getAllValues(); values.forEach(imdg::delete);