Adding ExecutionDepositComponentTest.

This commit is contained in:
psemenkov 2023-03-21 10:19:48 +03:00
parent de54b1c94a
commit 611801e965
4 changed files with 128 additions and 37 deletions

View file

@ -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<STrade> sTradeImdg;
private Imdg<Security> securityImdg;
private Imdg<ExecutionDeposit> executionDepositImdg;
private Imdg<Company> companyImdg;
private Imdg<Account> accountImdg;
private Imdg<Listing> 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()} ()} <br>
* Тест проверяет создание сущностей
* {@link ExecutionDeposit}
* в Hazelcast при передаче из Apache Kafka.<br>
*/
@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());
}
}

View file

@ -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<PaymentInstruction> paymentImdgsMock;
private Imdg<PaymentInstruction> paymentImdgsMock;
private ArgumentCaptor<PaymentInstruction> settingResult;
private Imdg<PaymentInstruction> paymentImdgs;
private Imdg<SDf04> 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.<br>
*/
@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());

View file

@ -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");
}
/**

View file

@ -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, V> T getMockForFildObj(T from, V obj, String fildName) {
T mock = Mockito.mock((Class<T>) 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 <T extends SpcexObjectBase> void clearAllInImdg(Imdg<T> imdg) {
Collection<T> values = imdg.getAllValues();
values.forEach(imdg::delete);