Поправил тесты. Скопировал реализацию недостающих методов для транзакционного ImdgTransactionalHazelcast из ImdgHazelcast.
This commit is contained in:
parent
a3d2726b23
commit
3437106728
13 changed files with 215 additions and 329 deletions
|
|
@ -1,7 +1,5 @@
|
||||||
package ru.spcex.clearing.account.service;
|
package ru.spcex.clearing.account.service;
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
||||||
import org.apache.kafka.clients.consumer.MockConsumer;
|
import org.apache.kafka.clients.consumer.MockConsumer;
|
||||||
import org.apache.kafka.clients.producer.MockProducer;
|
import org.apache.kafka.clients.producer.MockProducer;
|
||||||
import org.apache.kafka.clients.producer.Producer;
|
import org.apache.kafka.clients.producer.Producer;
|
||||||
|
|
@ -25,39 +23,26 @@ import ru.spcex.clearing.account.config.BeanConfiguration;
|
||||||
import ru.spcex.clearing.account.config.validation.AccountValidationConfig;
|
import ru.spcex.clearing.account.config.validation.AccountValidationConfig;
|
||||||
import ru.spcex.clearing.account.config.validation.InformationAccountValidationConfig;
|
import ru.spcex.clearing.account.config.validation.InformationAccountValidationConfig;
|
||||||
import ru.spcex.clearing.account.config.validation.ValidationConfig;
|
import ru.spcex.clearing.account.config.validation.ValidationConfig;
|
||||||
import ru.spcex.clearing.account.utils.MatcherFactory;
|
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.ActionType;
|
|
||||||
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
|
|
||||||
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.account.CorrespondentAccountNewRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.account.CorrespondentAccountNewRequest;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.account.CorrespondentAccountUpdateRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.account.CorrespondentAccountUpdateRequest;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.account.sdf01.AccountSdf01Request;
|
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.account.sdf01.AccountSdfRequestPart;
|
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.balance.AccountSdfToStatementRequestPart;
|
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.balance.StatementRequest;
|
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest;
|
||||||
import ru.spcex.clearing.platform.messaging.service.RequestInfo;
|
import ru.spcex.clearing.platform.messaging.service.RequestInfo;
|
||||||
import ru.spcex.clearing.platform.messaging.service.Status;
|
import ru.spcex.clearing.test.MatcherFactory;
|
||||||
import ru.spcex.clearing.test.TestObjectCreator;
|
import ru.spcex.clearing.test.TestObjectCreator;
|
||||||
import ru.spcex.clearing.test.config.ImdgTestConfig;
|
import ru.spcex.clearing.test.config.ImdgTestConfig;
|
||||||
import ru.spcex.clearing.test.config.KafkaTestConfig;
|
import ru.spcex.clearing.test.config.KafkaTestConfig;
|
||||||
import ru.spcex.platform.enumeration.*;
|
import ru.spcex.platform.enumeration.*;
|
||||||
import ru.spcex.platform.imdg.api.Imdg;
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
import ru.spcex.platform.imdg.iml.hazelcast.adapter.ImdgHazelcast;
|
|
||||||
import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService;
|
import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService;
|
||||||
|
|
||||||
import javax.annotation.PostConstruct;
|
import javax.annotation.PostConstruct;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import static org.mockito.Mockito.timeout;
|
import static ru.spcex.clearing.test.MatcherFactory.usingIgnoringFieldsComparator;
|
||||||
import static org.mockito.Mockito.verify;
|
|
||||||
import static ru.spcex.clearing.account.utils.MatcherFactory.usingIgnoringFieldsComparator;
|
|
||||||
import static ru.spcex.clearing.test.TestUtils.*;
|
import static ru.spcex.clearing.test.TestUtils.*;
|
||||||
import static ru.spcex.clearing.test.config.ImdgTestConfig.currentID;
|
|
||||||
|
|
||||||
@ExtendWith(SpringExtension.class)
|
@ExtendWith(SpringExtension.class)
|
||||||
@ContextConfiguration(classes = {
|
@ContextConfiguration(classes = {
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,13 @@
|
||||||
package ru.spcex.clearing.account.service;
|
package ru.spcex.clearing.account.service;
|
||||||
|
|
||||||
import org.apache.kafka.clients.consumer.MockConsumer;
|
import org.apache.kafka.clients.consumer.MockConsumer;
|
||||||
import org.apache.kafka.clients.producer.MockProducer;
|
|
||||||
import org.apache.kafka.clients.producer.Producer;
|
import org.apache.kafka.clients.producer.Producer;
|
||||||
import org.apache.kafka.clients.producer.ProducerRecord;
|
import org.apache.kafka.clients.producer.ProducerRecord;
|
||||||
import org.junit.jupiter.api.Assertions;
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
import org.mockito.ArgumentCaptor;
|
import org.mockito.ArgumentCaptor;
|
||||||
import org.mockito.Captor;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.beans.factory.annotation.Qualifier;
|
import org.springframework.beans.factory.annotation.Qualifier;
|
||||||
import org.springframework.boot.test.mock.mockito.SpyBean;
|
|
||||||
import org.springframework.test.context.ContextConfiguration;
|
import org.springframework.test.context.ContextConfiguration;
|
||||||
import org.springframework.test.context.junit.jupiter.SpringExtension;
|
import org.springframework.test.context.junit.jupiter.SpringExtension;
|
||||||
import ru.clearing.classes.statics.data.account.Account;
|
import ru.clearing.classes.statics.data.account.Account;
|
||||||
|
|
@ -25,7 +21,6 @@ import ru.spcex.clearing.account.config.validation.AccountValidationConfig;
|
||||||
import ru.spcex.clearing.account.config.validation.BankAccountValidationConfig;
|
import ru.spcex.clearing.account.config.validation.BankAccountValidationConfig;
|
||||||
import ru.spcex.clearing.account.config.validation.ValidationConfig;
|
import ru.spcex.clearing.account.config.validation.ValidationConfig;
|
||||||
import ru.spcex.clearing.account.errors.AccountError;
|
import ru.spcex.clearing.account.errors.AccountError;
|
||||||
import ru.spcex.clearing.account.utils.MatcherFactory.Matcher;
|
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.ActionType;
|
import ru.spcex.clearing.platform.messaging.domain.ActionType;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
|
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
|
||||||
|
|
@ -34,12 +29,13 @@ import ru.spcex.clearing.platform.messaging.domain.cud.account.BankAccountNewReq
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.account.BankAccountUpdateRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.account.BankAccountUpdateRequest;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest;
|
||||||
import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate;
|
import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate;
|
||||||
|
import ru.spcex.clearing.test.MatcherFactory.Matcher;
|
||||||
import ru.spcex.clearing.test.TestObjectCreator;
|
import ru.spcex.clearing.test.TestObjectCreator;
|
||||||
import ru.spcex.clearing.test.config.ImdgTestConfig;
|
import ru.spcex.clearing.test.config.ImdgTestConfig;
|
||||||
import ru.spcex.clearing.test.config.KafkaTestConfig;
|
import ru.spcex.clearing.test.config.KafkaTestConfig;
|
||||||
import ru.spcex.platform.enumeration.*;
|
import ru.spcex.platform.enumeration.*;
|
||||||
import ru.spcex.platform.imdg.api.Imdg;
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService;
|
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
||||||
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
||||||
|
|
||||||
|
|
@ -49,9 +45,10 @@ import java.util.concurrent.atomic.AtomicInteger;
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
import static org.mockito.Mockito.timeout;
|
import static org.mockito.Mockito.timeout;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static ru.spcex.clearing.account.utils.MatcherFactory.usingIgnoringFieldsComparator;
|
|
||||||
import static ru.spcex.clearing.platform.messaging.service.Status.Error;
|
import static ru.spcex.clearing.platform.messaging.service.Status.Error;
|
||||||
|
import static ru.spcex.clearing.test.MatcherFactory.usingIgnoringFieldsComparator;
|
||||||
import static ru.spcex.clearing.test.TestUtils.*;
|
import static ru.spcex.clearing.test.TestUtils.*;
|
||||||
|
import static ru.spcex.clearing.test.config.KafkaTestConfig.getCaptor;
|
||||||
|
|
||||||
@ExtendWith(SpringExtension.class)
|
@ExtendWith(SpringExtension.class)
|
||||||
@ContextConfiguration(classes = {
|
@ContextConfiguration(classes = {
|
||||||
|
|
@ -97,15 +94,11 @@ public class BankAccountServiceTest {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@Qualifier("hazelcastServiceTest")
|
@Qualifier("hazelcastServiceTest")
|
||||||
private HazelcastService hazelcastServiceTest;
|
private ImdgProvider hazelcastServiceTest;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private BankAccountService bankAccountService;
|
private BankAccountService bankAccountService;
|
||||||
|
|
||||||
@Captor
|
|
||||||
private ArgumentCaptor<ProducerRecord> producerRecord;
|
|
||||||
@SpyBean
|
|
||||||
private MockProducer<String, Object> producer;
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@Qualifier("mockProducer")
|
@Qualifier("mockProducer")
|
||||||
protected Producer<String, Object> mockProducer;
|
protected Producer<String, Object> mockProducer;
|
||||||
|
|
@ -216,11 +209,11 @@ public class BankAccountServiceTest {
|
||||||
//AccountValidationRule.RequiredFields
|
//AccountValidationRule.RequiredFields
|
||||||
//WrongFieldValue
|
//WrongFieldValue
|
||||||
bankAccountNewRequest.setCurrency(null);
|
bankAccountNewRequest.setCurrency(null);
|
||||||
errMsg = messageResolver.resolve(new EnumMessage(AccountError.RequiredFieldEmpty, "currency"));
|
errMsg = messageResolver.resolve(new EnumMessage(AccountError.RequiredFieldEmpty, "null, currency"));
|
||||||
checkError(errMsg, bankAccountNewRequest);
|
checkError(errMsg, bankAccountNewRequest);
|
||||||
|
|
||||||
bankAccountNewRequest.setCurrency("TT0");
|
bankAccountNewRequest.setCurrency("TT0");
|
||||||
errMsg = messageResolver.resolve(new EnumMessage(AccountError.WrongFieldValue, "currency"));
|
errMsg = messageResolver.resolve(new EnumMessage(AccountError.DictionaryNotFound, "TT0, CurrencyCodeDictionary"));
|
||||||
checkError(errMsg, bankAccountNewRequest);
|
checkError(errMsg, bankAccountNewRequest);
|
||||||
|
|
||||||
bankAccountNewRequest.setCurrency(currency);
|
bankAccountNewRequest.setCurrency(currency);
|
||||||
|
|
@ -239,36 +232,20 @@ public class BankAccountServiceTest {
|
||||||
checkError(errMsg, bankAccountNewRequest);
|
checkError(errMsg, bankAccountNewRequest);
|
||||||
|
|
||||||
bankAccountNewRequest.setAccount(acc);
|
bankAccountNewRequest.setAccount(acc);
|
||||||
bankAccountNewRequest.setDestination(null);
|
|
||||||
errMsg = messageResolver.resolve(new EnumMessage(AccountError.RequiredFieldEmpty, "destination"));
|
|
||||||
checkError(errMsg, bankAccountNewRequest);
|
|
||||||
|
|
||||||
bankAccountNewRequest.setDestination(destination);
|
|
||||||
bankAccountNewRequest.setCompanyId(null);
|
|
||||||
errMsg = messageResolver.resolve(new EnumMessage(AccountError.RequiredFieldEmpty, "companyId"));
|
|
||||||
checkError(errMsg, bankAccountNewRequest);
|
|
||||||
bankAccountNewRequest.setCompanyId(addresseeIdNew);
|
|
||||||
|
|
||||||
//AccountValidationRule.CompanyPresent
|
//AccountValidationRule.CompanyPresent
|
||||||
//CompanyNotFound
|
//CompanyNotFound
|
||||||
bankAccountNewRequest.setCompanyId(999924535239L);
|
bankAccountNewRequest.setCompanyId(999924535239L);
|
||||||
errMsg = messageResolver.resolve(new EnumMessage(AccountError.CompanyNotFound, "companyId"));
|
errMsg = messageResolver.resolve(new EnumMessage(AccountError.CompanyNotFound, bankAccountNewRequest.getCompanyId()+", companyId"));
|
||||||
checkError(errMsg, bankAccountNewRequest);
|
checkError(errMsg, bankAccountNewRequest);
|
||||||
|
|
||||||
//CompanyNotActive
|
|
||||||
company.setWorkflowStatus(Status.Blocked.getKey());
|
|
||||||
companyImdg.insert(company);
|
|
||||||
bankAccountNewRequest.setCompanyId(company.getId());
|
bankAccountNewRequest.setCompanyId(company.getId());
|
||||||
errMsg = messageResolver.resolve(new EnumMessage(AccountError.CompanyNotActive, "companyId"));
|
|
||||||
checkError(errMsg, bankAccountNewRequest);
|
|
||||||
|
|
||||||
//AccountValidationRule.AccountIsNew
|
//AccountValidationRule.AccountIsNew
|
||||||
//AccountAlreadyExist
|
//AccountAlreadyExist
|
||||||
company.setWorkflowStatus(Status.Active.getKey());
|
|
||||||
companyImdg.insert(company);
|
|
||||||
Account existAccount = getTestAccount(accountId, acc);
|
Account existAccount = getTestAccount(accountId, acc);
|
||||||
accountImdg.insert(existAccount);
|
accountImdg.insert(existAccount);
|
||||||
errMsg = messageResolver.resolve(new EnumMessage(AccountError.AccountAlreadyExist, "account"));
|
errMsg = messageResolver.resolve(new EnumMessage(AccountError.AccountAlreadyExist, existAccount.getAccount()));
|
||||||
checkError(errMsg, bankAccountNewRequest);
|
checkError(errMsg, bankAccountNewRequest);
|
||||||
accountImdg.delete(existAccount);
|
accountImdg.delete(existAccount);
|
||||||
}
|
}
|
||||||
|
|
@ -291,8 +268,9 @@ public class BankAccountServiceTest {
|
||||||
//ACT
|
//ACT
|
||||||
addRecordToKafka((MockConsumer) bankAccountService.getConsumer(), TOPIC_ACCOUNT_NEW, PARTITION, currentOffset, jsonString);
|
addRecordToKafka((MockConsumer) bankAccountService.getConsumer(), TOPIC_ACCOUNT_NEW, PARTITION, currentOffset, jsonString);
|
||||||
|
|
||||||
|
ArgumentCaptor<ProducerRecord> producerRecord = getCaptor(mockProducer);
|
||||||
//waiting for kafka producer send message (finale event)
|
//waiting for kafka producer send message (finale event)
|
||||||
verify(producer, timeout(30_000L).times(currentTime))
|
verify(mockProducer, timeout(30_000L).times(currentTime))
|
||||||
.send(producerRecord.capture());
|
.send(producerRecord.capture());
|
||||||
BaseRequest<Object> baseRequestResult = (BaseRequest<Object>) producerRecord.getValue().value();
|
BaseRequest<Object> baseRequestResult = (BaseRequest<Object>) producerRecord.getValue().value();
|
||||||
|
|
||||||
|
|
@ -368,13 +346,13 @@ public class BankAccountServiceTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@link BankAccountService#bankAccountDelete(BaseRequest)}
|
* {@link BankAccountService#bankAccountBlock(BaseRequest)}
|
||||||
* Тест проверяет удаление сущности {@link BankAccount} в Hazelcast при передаче из Apache Kafka.
|
* Тест проверяет удаление сущности {@link BankAccount} в Hazelcast при передаче из Apache Kafka.
|
||||||
* Входной запрос {@link CommonDeleteRequest}:
|
* Входной запрос {@link CommonDeleteRequest}:
|
||||||
* {@link CommonDeleteRequest#id} - Идентификатор записи
|
* {@link CommonDeleteRequest#id} - Идентификатор записи
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
void bankAccountDelete() {
|
void bankAccountBlock() {
|
||||||
//ARRANGE
|
//ARRANGE
|
||||||
BankAccount bankAccountExists = getBankAccount();
|
BankAccount bankAccountExists = getBankAccount();
|
||||||
bankAccountImdg.insert(bankAccountExists);
|
bankAccountImdg.insert(bankAccountExists);
|
||||||
|
|
@ -393,8 +371,8 @@ public class BankAccountServiceTest {
|
||||||
//ASSERT
|
//ASSERT
|
||||||
waitingSendAndCheckRecord(ID, mockProducer);
|
waitingSendAndCheckRecord(ID, mockProducer);
|
||||||
|
|
||||||
BankAccount bankAccount = bankAccountImdg.getSingleObjectByID(ID);
|
Account bankAccount = accountImdg.getSingleObjectByID(accountId);
|
||||||
Assertions.assertNull(bankAccount);
|
assertEquals(bankAccount.getStatus(), WorkflowStatus.Blocked.getKey());
|
||||||
}
|
}
|
||||||
|
|
||||||
private Company getTestCompany() {
|
private Company getTestCompany() {
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,13 @@
|
||||||
package ru.spcex.clearing.account.service;
|
package ru.spcex.clearing.account.service;
|
||||||
|
|
||||||
import org.apache.kafka.clients.consumer.MockConsumer;
|
import org.apache.kafka.clients.consumer.MockConsumer;
|
||||||
import org.apache.kafka.clients.producer.MockProducer;
|
|
||||||
import org.apache.kafka.clients.producer.Producer;
|
import org.apache.kafka.clients.producer.Producer;
|
||||||
import org.apache.kafka.clients.producer.ProducerRecord;
|
|
||||||
import org.junit.jupiter.api.Assertions;
|
import org.junit.jupiter.api.Assertions;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
import org.mockito.ArgumentCaptor;
|
|
||||||
import org.mockito.Captor;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.beans.factory.annotation.Qualifier;
|
import org.springframework.beans.factory.annotation.Qualifier;
|
||||||
import org.springframework.boot.test.mock.mockito.SpyBean;
|
import org.springframework.kafka.core.KafkaTemplate;
|
||||||
import org.springframework.test.context.ContextConfiguration;
|
import org.springframework.test.context.ContextConfiguration;
|
||||||
import org.springframework.test.context.junit.jupiter.SpringExtension;
|
import org.springframework.test.context.junit.jupiter.SpringExtension;
|
||||||
import ru.clearing.classes.statics.data.account.Account;
|
import ru.clearing.classes.statics.data.account.Account;
|
||||||
|
|
@ -26,25 +22,30 @@ import ru.spcex.clearing.account.config.validation.AccountValidationConfig;
|
||||||
import ru.spcex.clearing.account.config.validation.ClearingAccountValidationConfig;
|
import ru.spcex.clearing.account.config.validation.ClearingAccountValidationConfig;
|
||||||
import ru.spcex.clearing.account.config.validation.ValidationConfig;
|
import ru.spcex.clearing.account.config.validation.ValidationConfig;
|
||||||
import ru.spcex.clearing.account.errors.AccountError;
|
import ru.spcex.clearing.account.errors.AccountError;
|
||||||
import ru.spcex.clearing.account.utils.MatcherFactory;
|
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.account.ClearingAccountNewRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.account.ClearingAccountNewRequest;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.account.ClearingAccountUpdateRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.account.ClearingAccountUpdateRequest;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.cud.account.sdf01.AccountSdf01Request;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.cud.account.sdf01.AccountSdfRequestPart;
|
||||||
|
import ru.spcex.clearing.test.MatcherFactory;
|
||||||
import ru.spcex.clearing.test.TestObjectCreator;
|
import ru.spcex.clearing.test.TestObjectCreator;
|
||||||
import ru.spcex.clearing.test.config.ImdgTestConfig;
|
import ru.spcex.clearing.test.config.ImdgTestConfig;
|
||||||
import ru.spcex.clearing.test.config.KafkaTestConfig;
|
import ru.spcex.clearing.test.config.KafkaTestConfig;
|
||||||
import ru.spcex.platform.enumeration.*;
|
import ru.spcex.platform.enumeration.*;
|
||||||
import ru.spcex.platform.imdg.api.Imdg;
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService;
|
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
|
import ru.spcex.platform.imdg.iml.hazelcast.adapter.ImdgHazelcast;
|
||||||
|
|
||||||
import javax.annotation.PostConstruct;
|
import javax.annotation.PostConstruct;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import static org.mockito.Mockito.timeout;
|
import static ru.spcex.clearing.test.MatcherFactory.usingIgnoringFieldsComparator;
|
||||||
import static org.mockito.Mockito.verify;
|
|
||||||
import static ru.spcex.clearing.account.utils.MatcherFactory.usingIgnoringFieldsComparator;
|
|
||||||
import static ru.spcex.clearing.test.TestUtils.*;
|
import static ru.spcex.clearing.test.TestUtils.*;
|
||||||
|
import static ru.spcex.clearing.test.config.ImdgTestConfig.currentID;
|
||||||
|
import static ru.spcex.clearing.test.config.KafkaTestConfig.setMockFuture;
|
||||||
|
|
||||||
@ExtendWith(SpringExtension.class)
|
@ExtendWith(SpringExtension.class)
|
||||||
@ContextConfiguration(classes = {
|
@ContextConfiguration(classes = {
|
||||||
|
|
@ -72,16 +73,16 @@ class ClearingAccountServiceTest {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@Qualifier("hazelcastServiceTest")
|
@Qualifier("hazelcastServiceTest")
|
||||||
private HazelcastService hazelcastServiceTest;
|
private ImdgProvider hazelcastServiceTest;
|
||||||
|
|
||||||
@Captor
|
|
||||||
private ArgumentCaptor<ProducerRecord> producerRecord;
|
|
||||||
@SpyBean
|
|
||||||
private MockProducer<String, Object> producer;
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@Qualifier("mockProducer")
|
@Qualifier("mockProducer")
|
||||||
protected Producer<String, Object> mockProducer;
|
protected Producer<String, Object> mockProducer;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
@Qualifier("kafkaTestTemplate")
|
||||||
|
protected KafkaTemplate<String, Object> kafkaTemplate;
|
||||||
|
|
||||||
private Imdg<ClearingAccount> clearingAccountImdg;
|
private Imdg<ClearingAccount> clearingAccountImdg;
|
||||||
private Imdg<Account> accountImdg;
|
private Imdg<Account> accountImdg;
|
||||||
private Imdg<Company> companyImdg;
|
private Imdg<Company> companyImdg;
|
||||||
|
|
@ -162,8 +163,7 @@ class ClearingAccountServiceTest {
|
||||||
0,
|
0,
|
||||||
jsonString);
|
jsonString);
|
||||||
|
|
||||||
verify(producer, timeout(30_000L).times(2))
|
waitingSendAndCheckRecord(0L, mockProducer);
|
||||||
.send(producerRecord.capture());
|
|
||||||
|
|
||||||
Account predictableAccount = new Account();
|
Account predictableAccount = new Account();
|
||||||
predictableAccount.setAccount(ACCOUNT_VALUE);
|
predictableAccount.setAccount(ACCOUNT_VALUE);
|
||||||
|
|
@ -233,77 +233,58 @@ class ClearingAccountServiceTest {
|
||||||
Assertions.assertEquals("2", clearingAccountService.makeSdfErrorText(null, SDFProcessService.SDF_STATUS_ERROR_COMPANY_NOT_FOUND));
|
Assertions.assertEquals("2", clearingAccountService.makeSdfErrorText(null, SDFProcessService.SDF_STATUS_ERROR_COMPANY_NOT_FOUND));
|
||||||
}
|
}
|
||||||
|
|
||||||
// /**
|
/**
|
||||||
// * {@link ClearingAccountService#accountNewSdf01(BaseRequest)}<br>
|
* {@link ClearingAccountService#accountNewSdf01(BaseRequest)}<br>
|
||||||
// * Тест проверяет создание сущности {@link BaseRequest} в Hazelcast при передаче из Apache Kafka.<br>
|
* Тест проверяет создание сущности {@link BaseRequest} в Hazelcast при передаче из Apache Kafka.<br>
|
||||||
// * Входной запрос {@link AccountSdf01Request}:<br>
|
* Входной запрос {@link AccountSdf01Request}:<br>
|
||||||
// * {@link AccountSdfRequestPart#setSdfId} - текущий Id<br>
|
* {@link AccountSdfRequestPart#setSdfId} - текущий Id<br>
|
||||||
// * {@link AccountSdfRequestPart#setAccount} - 123456789123<br>
|
* {@link AccountSdfRequestPart#setAccount} - 123456789123<br>
|
||||||
// * {@link AccountSdfRequestPart#setCompanyId} - текущий Id<br>
|
* {@link AccountSdfRequestPart#setCompanyId} - текущий Id<br>
|
||||||
// * {@link AccountSdf01Request#setGroupingSdf01Id} - текущий Id<br>
|
* {@link AccountSdf01Request#setGroupingSdf01Id} - текущий Id<br>
|
||||||
// * {@link AccountSdf01Request#setAccounts} - Collections.singletonList(AccountSdfRequestPart)<br>
|
* {@link AccountSdf01Request#setAccounts} - Collections.singletonList(AccountSdfRequestPart)<br>
|
||||||
// */
|
*/
|
||||||
// @Test
|
@Test
|
||||||
// void accountSdf01New() throws InterruptedException {
|
void accountSdf01New() throws InterruptedException {
|
||||||
// //ARRANGE
|
//ARRANGE
|
||||||
// Long firstID = currentID.getAndIncrement();
|
clearImdg(accountImdg);
|
||||||
// Long secondID = currentID.getAndIncrement();
|
setMockFuture(kafkaTemplate);
|
||||||
// AccountSdfRequestPart accountSdfRequestPart = new AccountSdfRequestPart();
|
Long firstID = currentID.getAndIncrement();
|
||||||
// accountSdfRequestPart.setSdfId(firstID);
|
Long secondID = currentID.getAndIncrement();
|
||||||
// accountSdfRequestPart.setAccount(account);
|
AccountSdfRequestPart accountSdfRequestPart = new AccountSdfRequestPart();
|
||||||
// accountSdfRequestPart.setCompanyId(firstID);
|
accountSdfRequestPart.setSdfId(firstID);
|
||||||
// AccountSdf01Request accountSdf01Request = new AccountSdf01Request();
|
accountSdfRequestPart.setAccount(ACCOUNT_VALUE);
|
||||||
// accountSdf01Request.setGroupingSdf01Id(firstID);
|
accountSdfRequestPart.setCompanyId(firstID);
|
||||||
// accountSdf01Request.setAccounts(Collections.singletonList(accountSdfRequestPart));
|
AccountSdf01Request accountSdf01Request = new AccountSdf01Request();
|
||||||
// BaseRequest<AccountSdf01Request> baseNewRequest = new BaseRequest<>();
|
accountSdf01Request.setGroupingSdf01Id(firstID);
|
||||||
// baseNewRequest.setRequestPayload(accountSdf01Request);
|
accountSdf01Request.setAccounts(Collections.singletonList(accountSdfRequestPart));
|
||||||
// baseNewRequest.setId(firstID);
|
|
||||||
// baseNewRequest.setActionType(ActionType.NEW);
|
String jsonString = getJsonStringForNew(accountSdf01Request, 0L);
|
||||||
// String jsonBaseNewRequest;
|
|
||||||
// ObjectMapper objectMapper = new ObjectMapper();
|
Account predictableAccount = new Account();
|
||||||
// try {
|
predictableAccount.setAccount(ACCOUNT_VALUE);
|
||||||
// jsonBaseNewRequest = objectMapper.writeValueAsString(baseNewRequest);
|
predictableAccount.setCompanyId(firstID);
|
||||||
// } catch (JsonProcessingException e) {
|
predictableAccount.setAccountType(AccountType.Clrn.getKey());
|
||||||
// throw new RuntimeException(e);
|
predictableAccount.setStatus(ServiceStatus.Active.getKey());
|
||||||
// }
|
predictableAccount.setRelationId(relationId);
|
||||||
//
|
ClearingAccount predictableClearingAccount = new ClearingAccount();
|
||||||
// AccountSdfToStatementRequestPart responsePart = new AccountSdfToStatementRequestPart();
|
predictableClearingAccount.setCompanyId(companyId);
|
||||||
// responsePart.setSdfId(firstID);
|
// predictableClearingAccount.setClearingAccountType(CLEARING_ACCOUNT_TYPE_DICT);
|
||||||
// responsePart.setErrorCode(null);
|
|
||||||
// responsePart.setErrorText(null);
|
//KAFKA
|
||||||
// List<AccountSdfToStatementRequestPart> accountToStatement = Collections.singletonList(responsePart);
|
addRecordToKafka((MockConsumer) clearingAccountService.getConsumer(), Consts.ACCOUNT_NEW_SDF01, PARTITION, 0, jsonString);
|
||||||
// StatementRequest statementRequest = new StatementRequest();
|
waitingSendAndCheckRecord(0L, mockProducer);
|
||||||
// statementRequest.setGroupId(firstID);
|
|
||||||
// statementRequest.setAccountCreationResults(accountToStatement);
|
ImdgHazelcast<Account> accountImdg = (ImdgHazelcast<Account>) hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_Account, Account.class);
|
||||||
//
|
|
||||||
// BaseRequest<Object> baseRequest = new BaseRequest<>();
|
//ASSERT
|
||||||
// baseRequest.setId(secondID);
|
Account accountResult = accountImdg.getSingleObjectBySQL(String.format("account = %s", ACCOUNT_VALUE));
|
||||||
// baseRequest.setActionType(ActionType.SYSTEM);
|
ClearingAccount resultClearingAccountNew = clearingAccountImdg.getFirstObjectByFieldValues(Map.of("accountId", accountResult.getId()));
|
||||||
// baseRequest.setRequestPayload(statementRequest);
|
predictableAccount.setId(accountResult.getId());
|
||||||
//
|
predictableClearingAccount.setAccountId(accountResult.getId());
|
||||||
// Account predictableAccount = new Account();
|
predictableClearingAccount.setId(resultClearingAccountNew.getId());
|
||||||
// predictableAccount.setAccount(account);
|
predictableAccount.setId(accountResult.getId());
|
||||||
// predictableAccount.setCompanyId(firstID);
|
ACCOUNT_MATCHER.assertMatch(accountResult, predictableAccount);
|
||||||
//
|
CLEARING_ACCOUNT_MATCHER.assertMatch(resultClearingAccountNew, predictableClearingAccount);
|
||||||
// RequestInfo predictableRequestInfo = new RequestInfo();
|
accountImdg.delete(accountResult);
|
||||||
// predictableRequestInfo.setId(secondID);
|
}
|
||||||
// predictableRequestInfo.setStatus(Status.Processing);
|
|
||||||
//
|
|
||||||
// //KAFKA
|
|
||||||
// final String TOPIC_ACCOUNT_NEW = Consts.ACCOUNT_NEW_SDF01;
|
|
||||||
// addRecordToKafka((MockConsumer) accountService.getConsumer(), TOPIC_ACCOUNT_NEW, PARTITION, 0, jsonBaseNewRequest);
|
|
||||||
//
|
|
||||||
// //waiting for kafka producer send message (finale event)
|
|
||||||
// verify(producer, timeout(30_000L).times(2))
|
|
||||||
// .send(producerRecord.capture());
|
|
||||||
// //todo переписать валидацию ожидания на новые waitingSendAndCheckRecord / waitingWhenTryAddRecordAndCheckError
|
|
||||||
//
|
|
||||||
// ImdgHazelcast<Account> accountImdg = (ImdgHazelcast<Account>) hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_Account, Account.class);
|
|
||||||
//
|
|
||||||
// //ASSERT
|
|
||||||
// Account accountResult = accountImdg.getSingleObjectBySQL(String.format("account = %s", account));
|
|
||||||
// predictableAccount.setId(accountResult.getId());
|
|
||||||
// ACCOUNT_MATCHER.assertMatch(accountResult, predictableAccount);
|
|
||||||
// accountImdg.delete(accountResult);
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
@ -24,13 +24,13 @@ import ru.spcex.clearing.account.config.BeanConfiguration;
|
||||||
import ru.spcex.clearing.account.config.validation.ClientCodeValidationConfig;
|
import ru.spcex.clearing.account.config.validation.ClientCodeValidationConfig;
|
||||||
import ru.spcex.clearing.account.config.validation.TradingClearingRegistryValidationConfig;
|
import ru.spcex.clearing.account.config.validation.TradingClearingRegistryValidationConfig;
|
||||||
import ru.spcex.clearing.account.config.validation.ValidationConfig;
|
import ru.spcex.clearing.account.config.validation.ValidationConfig;
|
||||||
import ru.spcex.clearing.account.utils.MatcherFactory;
|
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
|
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.account.ClientCodeNewRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.account.ClientCodeNewRequest;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.account.ClientCodeUpdateRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.account.ClientCodeUpdateRequest;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest;
|
||||||
|
import ru.spcex.clearing.test.MatcherFactory;
|
||||||
import ru.spcex.clearing.test.TestObjectCreator;
|
import ru.spcex.clearing.test.TestObjectCreator;
|
||||||
import ru.spcex.clearing.test.TestUtils;
|
import ru.spcex.clearing.test.TestUtils;
|
||||||
import ru.spcex.clearing.test.config.ImdgTestConfig;
|
import ru.spcex.clearing.test.config.ImdgTestConfig;
|
||||||
|
|
@ -376,7 +376,7 @@ class ClientCodeServiceTest {
|
||||||
|
|
||||||
waitingSendAndCheckRecord(ID, mockProducer);
|
waitingSendAndCheckRecord(ID, mockProducer);
|
||||||
ClientCode resultUpdate = clientCodeImdg.getSingleObjectByID(ID);
|
ClientCode resultUpdate = clientCodeImdg.getSingleObjectByID(ID);
|
||||||
Assertions.assertNull(resultUpdate);
|
assertEquals(WorkflowStatus.Blocked.getKey(), resultUpdate.getStatus());
|
||||||
}
|
}
|
||||||
|
|
||||||
// /**
|
// /**
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,11 @@
|
||||||
package ru.spcex.clearing.account.service;
|
package ru.spcex.clearing.account.service;
|
||||||
|
|
||||||
import org.apache.kafka.clients.consumer.MockConsumer;
|
import org.apache.kafka.clients.consumer.MockConsumer;
|
||||||
import org.apache.kafka.clients.producer.MockProducer;
|
|
||||||
import org.apache.kafka.clients.producer.Producer;
|
import org.apache.kafka.clients.producer.Producer;
|
||||||
import org.apache.kafka.clients.producer.ProducerRecord;
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
import org.mockito.ArgumentCaptor;
|
|
||||||
import org.mockito.Captor;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.beans.factory.annotation.Qualifier;
|
import org.springframework.beans.factory.annotation.Qualifier;
|
||||||
import org.springframework.boot.test.mock.mockito.SpyBean;
|
|
||||||
import org.springframework.test.context.ContextConfiguration;
|
import org.springframework.test.context.ContextConfiguration;
|
||||||
import org.springframework.test.context.junit.jupiter.SpringExtension;
|
import org.springframework.test.context.junit.jupiter.SpringExtension;
|
||||||
import ru.clearing.classes.statics.data.account.Account;
|
import ru.clearing.classes.statics.data.account.Account;
|
||||||
|
|
@ -24,25 +19,22 @@ import ru.spcex.clearing.account.config.BeanConfiguration;
|
||||||
import ru.spcex.clearing.account.config.validation.AccountValidationConfig;
|
import ru.spcex.clearing.account.config.validation.AccountValidationConfig;
|
||||||
import ru.spcex.clearing.account.config.validation.DepoAccountValidationConfig;
|
import ru.spcex.clearing.account.config.validation.DepoAccountValidationConfig;
|
||||||
import ru.spcex.clearing.account.config.validation.ValidationConfig;
|
import ru.spcex.clearing.account.config.validation.ValidationConfig;
|
||||||
import ru.spcex.clearing.account.utils.MatcherFactory;
|
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.account.DepoAccountNewRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.account.DepoAccountNewRequest;
|
||||||
|
import ru.spcex.clearing.test.MatcherFactory;
|
||||||
import ru.spcex.clearing.test.TestObjectCreator;
|
import ru.spcex.clearing.test.TestObjectCreator;
|
||||||
import ru.spcex.clearing.test.config.ImdgTestConfig;
|
import ru.spcex.clearing.test.config.ImdgTestConfig;
|
||||||
import ru.spcex.clearing.test.config.KafkaTestConfig;
|
import ru.spcex.clearing.test.config.KafkaTestConfig;
|
||||||
import ru.spcex.platform.enumeration.*;
|
import ru.spcex.platform.enumeration.*;
|
||||||
import ru.spcex.platform.imdg.api.Imdg;
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService;
|
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
|
|
||||||
import javax.annotation.PostConstruct;
|
import javax.annotation.PostConstruct;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import static org.mockito.Mockito.timeout;
|
import static ru.spcex.clearing.test.MatcherFactory.usingIgnoringFieldsComparator;
|
||||||
import static org.mockito.Mockito.verify;
|
import static ru.spcex.clearing.test.TestUtils.*;
|
||||||
import static ru.spcex.clearing.account.utils.MatcherFactory.usingIgnoringFieldsComparator;
|
|
||||||
import static ru.spcex.clearing.test.TestUtils.addRecordToKafka;
|
|
||||||
import static ru.spcex.clearing.test.TestUtils.getJsonStringForNew;
|
|
||||||
|
|
||||||
@ExtendWith(SpringExtension.class)
|
@ExtendWith(SpringExtension.class)
|
||||||
@ContextConfiguration(classes = {
|
@ContextConfiguration(classes = {
|
||||||
|
|
@ -69,12 +61,8 @@ class DepoAccountServiceTest {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@Qualifier("hazelcastServiceTest")
|
@Qualifier("hazelcastServiceTest")
|
||||||
private HazelcastService hazelcastServiceTest;
|
private ImdgProvider hazelcastServiceTest;
|
||||||
|
|
||||||
@Captor
|
|
||||||
private ArgumentCaptor<ProducerRecord> producerRecord;
|
|
||||||
@SpyBean
|
|
||||||
private MockProducer<String, Object> producer;
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@Qualifier("mockProducer")
|
@Qualifier("mockProducer")
|
||||||
protected Producer<String, Object> mockProducer;
|
protected Producer<String, Object> mockProducer;
|
||||||
|
|
@ -159,8 +147,7 @@ class DepoAccountServiceTest {
|
||||||
0,
|
0,
|
||||||
jsonString);
|
jsonString);
|
||||||
|
|
||||||
verify(producer, timeout(30_000L).times(2))
|
waitingSendAndCheckRecord(0L, mockProducer);
|
||||||
.send(producerRecord.capture());
|
|
||||||
|
|
||||||
Account predictableAccount = new Account();
|
Account predictableAccount = new Account();
|
||||||
predictableAccount.setAccount(ACCOUNT_VALUE);
|
predictableAccount.setAccount(ACCOUNT_VALUE);
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,13 @@
|
||||||
package ru.spcex.clearing.account.service;
|
package ru.spcex.clearing.account.service;
|
||||||
|
|
||||||
import org.apache.kafka.clients.consumer.MockConsumer;
|
import org.apache.kafka.clients.consumer.MockConsumer;
|
||||||
import org.apache.kafka.clients.producer.MockProducer;
|
|
||||||
import org.apache.kafka.clients.producer.Producer;
|
import org.apache.kafka.clients.producer.Producer;
|
||||||
import org.apache.kafka.clients.producer.ProducerRecord;
|
|
||||||
import org.junit.jupiter.api.Assertions;
|
import org.junit.jupiter.api.Assertions;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
import org.mockito.ArgumentCaptor;
|
|
||||||
import org.mockito.Captor;
|
|
||||||
import org.mockito.Mockito;
|
import org.mockito.Mockito;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.beans.factory.annotation.Qualifier;
|
import org.springframework.beans.factory.annotation.Qualifier;
|
||||||
import org.springframework.boot.test.mock.mockito.SpyBean;
|
|
||||||
import org.springframework.test.context.ContextConfiguration;
|
import org.springframework.test.context.ContextConfiguration;
|
||||||
import org.springframework.test.context.junit.jupiter.SpringExtension;
|
import org.springframework.test.context.junit.jupiter.SpringExtension;
|
||||||
import ru.clearing.classes.statics.data.account.Account;
|
import ru.clearing.classes.statics.data.account.Account;
|
||||||
|
|
@ -25,10 +20,10 @@ import ru.spcex.clearing.account.config.BeanConfiguration;
|
||||||
import ru.spcex.clearing.account.config.validation.AccountValidationConfig;
|
import ru.spcex.clearing.account.config.validation.AccountValidationConfig;
|
||||||
import ru.spcex.clearing.account.config.validation.InformationAccountValidationConfig;
|
import ru.spcex.clearing.account.config.validation.InformationAccountValidationConfig;
|
||||||
import ru.spcex.clearing.account.config.validation.ValidationConfig;
|
import ru.spcex.clearing.account.config.validation.ValidationConfig;
|
||||||
import ru.spcex.clearing.account.utils.MatcherFactory;
|
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.account.InformationAccountNewRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.account.InformationAccountNewRequest;
|
||||||
|
import ru.spcex.clearing.test.MatcherFactory;
|
||||||
import ru.spcex.clearing.test.TestObjectCreator;
|
import ru.spcex.clearing.test.TestObjectCreator;
|
||||||
import ru.spcex.clearing.test.config.ImdgTestConfig;
|
import ru.spcex.clearing.test.config.ImdgTestConfig;
|
||||||
import ru.spcex.clearing.test.config.KafkaTestConfig;
|
import ru.spcex.clearing.test.config.KafkaTestConfig;
|
||||||
|
|
@ -36,16 +31,12 @@ import ru.spcex.clearing.util.security.UserRoleVerification;
|
||||||
import ru.spcex.platform.enumeration.*;
|
import ru.spcex.platform.enumeration.*;
|
||||||
import ru.spcex.platform.imdg.api.Imdg;
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService;
|
|
||||||
|
|
||||||
import javax.annotation.PostConstruct;
|
import javax.annotation.PostConstruct;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import static org.mockito.Mockito.timeout;
|
import static ru.spcex.clearing.test.MatcherFactory.usingIgnoringFieldsComparator;
|
||||||
import static org.mockito.Mockito.verify;
|
import static ru.spcex.clearing.test.TestUtils.*;
|
||||||
import static ru.spcex.clearing.account.utils.MatcherFactory.usingIgnoringFieldsComparator;
|
|
||||||
import static ru.spcex.clearing.test.TestUtils.addRecordToKafka;
|
|
||||||
import static ru.spcex.clearing.test.TestUtils.getJsonStringForNew;
|
|
||||||
|
|
||||||
@ExtendWith(SpringExtension.class)
|
@ExtendWith(SpringExtension.class)
|
||||||
@ContextConfiguration(classes = {
|
@ContextConfiguration(classes = {
|
||||||
|
|
@ -71,12 +62,8 @@ class InformationAccountServiceTest {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@Qualifier("hazelcastServiceTest")
|
@Qualifier("hazelcastServiceTest")
|
||||||
private HazelcastService hazelcastServiceTest;
|
private ImdgProvider hazelcastServiceTest;
|
||||||
|
|
||||||
@Captor
|
|
||||||
private ArgumentCaptor<ProducerRecord> producerRecord;
|
|
||||||
@SpyBean
|
|
||||||
private MockProducer<String, Object> producer;
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@Qualifier("mockProducer")
|
@Qualifier("mockProducer")
|
||||||
protected Producer<String, Object> mockProducer;
|
protected Producer<String, Object> mockProducer;
|
||||||
|
|
@ -98,6 +85,7 @@ class InformationAccountServiceTest {
|
||||||
accountImdg = hazelcastServiceTest.getImdg(
|
accountImdg = hazelcastServiceTest.getImdg(
|
||||||
IMDGDistributedNames.Map_Account, Account.class
|
IMDGDistributedNames.Map_Account, Account.class
|
||||||
);
|
);
|
||||||
|
clearImdg(accountImdg);
|
||||||
|
|
||||||
companyImdg = hazelcastServiceTest.getImdg(
|
companyImdg = hazelcastServiceTest.getImdg(
|
||||||
IMDGDistributedNames.Map_Company, Company.class
|
IMDGDistributedNames.Map_Company, Company.class
|
||||||
|
|
@ -145,6 +133,7 @@ class InformationAccountServiceTest {
|
||||||
void accountInformationNew() {
|
void accountInformationNew() {
|
||||||
InformationAccountNewRequest InformationAccountNewRequest = new InformationAccountNewRequest();
|
InformationAccountNewRequest InformationAccountNewRequest = new InformationAccountNewRequest();
|
||||||
InformationAccountNewRequest.setCompanyId(companyId);
|
InformationAccountNewRequest.setCompanyId(companyId);
|
||||||
|
InformationAccountNewRequest.setAccount(account);
|
||||||
|
|
||||||
String jsonString = getJsonStringForNew(InformationAccountNewRequest, 0L);
|
String jsonString = getJsonStringForNew(InformationAccountNewRequest, 0L);
|
||||||
|
|
||||||
|
|
@ -154,9 +143,7 @@ class InformationAccountServiceTest {
|
||||||
0,
|
0,
|
||||||
jsonString);
|
jsonString);
|
||||||
|
|
||||||
//waiting for kafka producer send message (finale event)
|
waitingSendAndCheckRecord(0L, mockProducer);
|
||||||
verify(producer, timeout(30_000L).times(2))
|
|
||||||
.send(producerRecord.capture());
|
|
||||||
|
|
||||||
Account predictableAccount = new Account();
|
Account predictableAccount = new Account();
|
||||||
predictableAccount.setAccountType(AccountType.Info.getKey());
|
predictableAccount.setAccountType(AccountType.Info.getKey());
|
||||||
|
|
@ -172,7 +159,7 @@ class InformationAccountServiceTest {
|
||||||
InformationAccount resultInfoAccountNew = informationAccountImdg.getFirstObjectByFieldValues(Map.of("accountId", resultAccountNew.getId()));
|
InformationAccount resultInfoAccountNew = informationAccountImdg.getFirstObjectByFieldValues(Map.of("accountId", resultAccountNew.getId()));
|
||||||
|
|
||||||
predictableAccount.setId(resultAccountNew.getId());
|
predictableAccount.setId(resultAccountNew.getId());
|
||||||
predictableAccount.setAccount(informationAccountService.generateInfoAccount(resultInfoAccountNew.getId()));
|
predictableAccount.setAccount(account);
|
||||||
predictableInfoAccount.setAccountId(resultAccountNew.getId());
|
predictableInfoAccount.setAccountId(resultAccountNew.getId());
|
||||||
predictableInfoAccount.setId(resultInfoAccountNew.getId());
|
predictableInfoAccount.setId(resultInfoAccountNew.getId());
|
||||||
|
|
||||||
|
|
@ -183,7 +170,6 @@ class InformationAccountServiceTest {
|
||||||
accountImdg.delete(resultAccountNew);
|
accountImdg.delete(resultAccountNew);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Autowired ImdgProvider imdgProvider;
|
|
||||||
@Test
|
@Test
|
||||||
void accountIncrementSequence() {
|
void accountIncrementSequence() {
|
||||||
Imdg<InformationAccount> accountInfoImdg = hazelcastServiceTest.getImdg( IMDGDistributedNames.Map_InformationAccount, InformationAccount.class );
|
Imdg<InformationAccount> accountInfoImdg = hazelcastServiceTest.getImdg( IMDGDistributedNames.Map_InformationAccount, InformationAccount.class );
|
||||||
|
|
@ -203,7 +189,7 @@ class InformationAccountServiceTest {
|
||||||
}
|
}
|
||||||
UserRoleVerification userRoleVerification = Mockito.mock(UserRoleVerification.class);
|
UserRoleVerification userRoleVerification = Mockito.mock(UserRoleVerification.class);
|
||||||
InformationAccountService infoAccSvc=new InformationAccountService(null,null,null,
|
InformationAccountService infoAccSvc=new InformationAccountService(null,null,null,
|
||||||
null, userRoleVerification, imdgProvider, null, null, null, null);
|
null, userRoleVerification, hazelcastServiceTest, null, null, null, null);
|
||||||
Long n = infoAccSvc.accountNextId();
|
Long n = infoAccSvc.accountNextId();
|
||||||
Assertions.assertEquals(13L, n);
|
Assertions.assertEquals(13L, n);
|
||||||
n = infoAccSvc.accountNextId();
|
n = infoAccSvc.accountNextId();
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
package ru.spcex.clearing.account.service;
|
package ru.spcex.clearing.account.service;
|
||||||
|
|
||||||
import org.apache.kafka.clients.consumer.MockConsumer;
|
|
||||||
import org.apache.kafka.clients.producer.MockProducer;
|
import org.apache.kafka.clients.producer.MockProducer;
|
||||||
import org.apache.kafka.clients.producer.Producer;
|
import org.apache.kafka.clients.producer.Producer;
|
||||||
import org.apache.kafka.clients.producer.ProducerRecord;
|
import org.apache.kafka.clients.producer.ProducerRecord;
|
||||||
|
|
@ -27,15 +26,11 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
import ru.spcex.clearing.test.TestObjectCreator;
|
import ru.spcex.clearing.test.TestObjectCreator;
|
||||||
import ru.spcex.clearing.test.config.ImdgTestConfig;
|
import ru.spcex.clearing.test.config.ImdgTestConfig;
|
||||||
import ru.spcex.clearing.test.config.KafkaTestConfig;
|
import ru.spcex.clearing.test.config.KafkaTestConfig;
|
||||||
import ru.spcex.platform.enumeration.*;
|
import ru.spcex.platform.enumeration.AccountStatus;
|
||||||
import ru.spcex.platform.imdg.api.Imdg;
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService;
|
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
|
|
||||||
import javax.annotation.PostConstruct;
|
import javax.annotation.PostConstruct;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import static ru.spcex.clearing.account.utils.MatcherFactory.usingIgnoringFieldsComparator;
|
|
||||||
import static ru.spcex.clearing.test.TestUtils.*;
|
|
||||||
|
|
||||||
@ExtendWith(SpringExtension.class)
|
@ExtendWith(SpringExtension.class)
|
||||||
@ContextConfiguration(classes = {
|
@ContextConfiguration(classes = {
|
||||||
|
|
@ -50,7 +45,7 @@ class SDFProcessServiceTest {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@Qualifier("hazelcastServiceTest")
|
@Qualifier("hazelcastServiceTest")
|
||||||
private HazelcastService hazelcastServiceTest;
|
private ImdgProvider hazelcastServiceTest;
|
||||||
|
|
||||||
@Captor
|
@Captor
|
||||||
private ArgumentCaptor<ProducerRecord> producerRecord;
|
private ArgumentCaptor<ProducerRecord> producerRecord;
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,13 @@
|
||||||
package ru.spcex.clearing.account.service;
|
package ru.spcex.clearing.account.service;
|
||||||
|
|
||||||
import org.apache.kafka.clients.consumer.MockConsumer;
|
import org.apache.kafka.clients.consumer.MockConsumer;
|
||||||
import org.apache.kafka.clients.producer.MockProducer;
|
|
||||||
import org.apache.kafka.clients.producer.Producer;
|
import org.apache.kafka.clients.producer.Producer;
|
||||||
import org.apache.kafka.clients.producer.ProducerRecord;
|
|
||||||
import org.junit.jupiter.api.Assertions;
|
import org.junit.jupiter.api.Assertions;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
import org.mockito.ArgumentCaptor;
|
|
||||||
import org.mockito.Captor;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.beans.factory.annotation.Qualifier;
|
import org.springframework.beans.factory.annotation.Qualifier;
|
||||||
import org.springframework.boot.test.mock.mockito.SpyBean;
|
import org.springframework.kafka.core.KafkaTemplate;
|
||||||
import org.springframework.test.context.ContextConfiguration;
|
import org.springframework.test.context.ContextConfiguration;
|
||||||
import org.springframework.test.context.junit.jupiter.SpringExtension;
|
import org.springframework.test.context.junit.jupiter.SpringExtension;
|
||||||
import ru.clearing.classes.statics.data.account.Account;
|
import ru.clearing.classes.statics.data.account.Account;
|
||||||
|
|
@ -19,31 +15,30 @@ import ru.clearing.classes.statics.data.account.ClearingAccount;
|
||||||
import ru.clearing.classes.statics.data.account.DepoAccount;
|
import ru.clearing.classes.statics.data.account.DepoAccount;
|
||||||
import ru.clearing.classes.statics.data.account.InformationAccount;
|
import ru.clearing.classes.statics.data.account.InformationAccount;
|
||||||
import ru.clearing.classes.statics.data.company.Company;
|
import ru.clearing.classes.statics.data.company.Company;
|
||||||
|
import ru.clearing.classes.statics.data.company.CompanySymbols;
|
||||||
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
|
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
|
||||||
import ru.clearing.platform.dictionary.ServiceStatusDictionary;
|
import ru.clearing.platform.dictionary.ServiceStatusDictionary;
|
||||||
import ru.spcex.clearing.account.config.BeanConfiguration;
|
import ru.spcex.clearing.account.config.BeanConfiguration;
|
||||||
import ru.spcex.clearing.account.config.validation.TradingClearingRegistryValidationConfig;
|
import ru.spcex.clearing.account.config.validation.TradingClearingRegistryValidationConfig;
|
||||||
import ru.spcex.clearing.account.config.validation.ValidationConfig;
|
import ru.spcex.clearing.account.config.validation.ValidationConfig;
|
||||||
import ru.spcex.clearing.account.utils.MatcherFactory;
|
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.registry.TradingClearingRegistryNewRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.registry.TradingClearingRegistryNewRequest;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.registry.TradingClearingRegistryUpdateRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.registry.TradingClearingRegistryUpdateRequest;
|
||||||
|
import ru.spcex.clearing.test.MatcherFactory;
|
||||||
import ru.spcex.clearing.test.TestObjectCreator;
|
import ru.spcex.clearing.test.TestObjectCreator;
|
||||||
import ru.spcex.clearing.test.config.ImdgTestConfig;
|
import ru.spcex.clearing.test.config.ImdgTestConfig;
|
||||||
import ru.spcex.clearing.test.config.KafkaTestConfig;
|
import ru.spcex.clearing.test.config.KafkaTestConfig;
|
||||||
import ru.spcex.platform.enumeration.ServiceStatus;
|
import ru.spcex.platform.enumeration.*;
|
||||||
import ru.spcex.platform.enumeration.TradingClearingRegistryPurpose;
|
|
||||||
import ru.spcex.platform.enumeration.TradingClearingRegistryType;
|
|
||||||
import ru.spcex.platform.enumeration.WorkflowStatus;
|
|
||||||
import ru.spcex.platform.imdg.api.Imdg;
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService;
|
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
|
|
||||||
import javax.annotation.PostConstruct;
|
import javax.annotation.PostConstruct;
|
||||||
|
|
||||||
import static ru.spcex.clearing.account.utils.MatcherFactory.usingIgnoringFieldsComparator;
|
import static ru.spcex.clearing.test.MatcherFactory.usingIgnoringFieldsComparator;
|
||||||
import static ru.spcex.clearing.test.TestUtils.*;
|
import static ru.spcex.clearing.test.TestUtils.*;
|
||||||
|
import static ru.spcex.clearing.test.config.KafkaTestConfig.setMockFuture;
|
||||||
|
|
||||||
@ExtendWith(SpringExtension.class)
|
@ExtendWith(SpringExtension.class)
|
||||||
@ContextConfiguration(classes = {
|
@ContextConfiguration(classes = {
|
||||||
|
|
@ -64,18 +59,19 @@ class TradingClearingRegistryServiceTest {
|
||||||
TradingClearingRegistryService tradingClearingRegistryService;
|
TradingClearingRegistryService tradingClearingRegistryService;
|
||||||
@Autowired
|
@Autowired
|
||||||
@Qualifier("hazelcastServiceTest")
|
@Qualifier("hazelcastServiceTest")
|
||||||
private HazelcastService hazelcastServiceTest;
|
private ImdgProvider hazelcastServiceTest;
|
||||||
|
|
||||||
@Captor
|
|
||||||
private ArgumentCaptor<ProducerRecord> producerRecord;
|
|
||||||
@SpyBean
|
|
||||||
private MockProducer<String, Object> producer;
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@Qualifier("mockProducer")
|
@Qualifier("mockProducer")
|
||||||
protected Producer<String, Object> mockProducer;
|
protected Producer<String, Object> mockProducer;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
@Qualifier("kafkaTestTemplate")
|
||||||
|
protected KafkaTemplate<String, Object> kafkaTemplate;
|
||||||
|
|
||||||
private Imdg<TradingClearingRegistry> tradingClearingRegistryImdg;
|
private Imdg<TradingClearingRegistry> tradingClearingRegistryImdg;
|
||||||
private Imdg<Company> companyImdg;
|
private Imdg<Company> companyImdg;
|
||||||
|
private Imdg<CompanySymbols> companySymbolsImdg;
|
||||||
private Imdg<ServiceStatusDictionary> serviceStatusDictionaryImdg;
|
private Imdg<ServiceStatusDictionary> serviceStatusDictionaryImdg;
|
||||||
|
|
||||||
private Imdg<ClearingAccount> clearingAccountImdg;
|
private Imdg<ClearingAccount> clearingAccountImdg;
|
||||||
|
|
@ -103,6 +99,9 @@ class TradingClearingRegistryServiceTest {
|
||||||
companyImdg = hazelcastServiceTest.getImdg(
|
companyImdg = hazelcastServiceTest.getImdg(
|
||||||
IMDGDistributedNames.Map_Company, Company.class
|
IMDGDistributedNames.Map_Company, Company.class
|
||||||
);
|
);
|
||||||
|
companySymbolsImdg = hazelcastServiceTest.getImdg(
|
||||||
|
IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class
|
||||||
|
);
|
||||||
serviceStatusDictionaryImdg = hazelcastServiceTest.getImdg(
|
serviceStatusDictionaryImdg = hazelcastServiceTest.getImdg(
|
||||||
IMDGDistributedNames.Map_ServiceStatusDictionary, ServiceStatusDictionary.class
|
IMDGDistributedNames.Map_ServiceStatusDictionary, ServiceStatusDictionary.class
|
||||||
);
|
);
|
||||||
|
|
@ -129,8 +128,14 @@ class TradingClearingRegistryServiceTest {
|
||||||
company.setClearingCode("77");
|
company.setClearingCode("77");
|
||||||
companyImdg.insert(company);
|
companyImdg.insert(company);
|
||||||
|
|
||||||
|
CompanySymbols companySymbols = new CompanySymbols();
|
||||||
|
companySymbols.setCompanyId(companyId);
|
||||||
|
companySymbols.setCompanySymbol(CompanySymbol.CLRC.getKey());
|
||||||
|
companySymbolsImdg.insert(companySymbols);
|
||||||
|
|
||||||
Account account = new Account();
|
Account account = new Account();
|
||||||
account.setStatus(ServiceStatus.Active.getKey());
|
account.setStatus(ServiceStatus.Active.getKey());
|
||||||
|
account.setAccountType(AccountType.Clrn.getKey());
|
||||||
accountId = accountImdg.insert(account);
|
accountId = accountImdg.insert(account);
|
||||||
|
|
||||||
account2Id = accountImdg.insert(account);
|
account2Id = accountImdg.insert(account);
|
||||||
|
|
@ -154,15 +159,17 @@ class TradingClearingRegistryServiceTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void tradingClearingRegistryNew_moneyAccount_clearingAccount() {
|
void tradingClearingRegistryNew_moneyAccount_clearingAccount() {
|
||||||
|
setMockFuture(kafkaTemplate);
|
||||||
TradingClearingRegistryNewRequest tradingClearingRegistryNewRequest = new TradingClearingRegistryNewRequest();
|
TradingClearingRegistryNewRequest tradingClearingRegistryNewRequest = new TradingClearingRegistryNewRequest();
|
||||||
tradingClearingRegistryNewRequest.setCompanyId(companyId);
|
tradingClearingRegistryNewRequest.setCompanyId(companyId);
|
||||||
tradingClearingRegistryNewRequest.setMoneyAccountId(accountId);
|
tradingClearingRegistryNewRequest.setMoneyAccountId(accountId);
|
||||||
|
tradingClearingRegistryNewRequest.setTradingClearingRegistryType(TradingClearingRegistryType.Owner_A.getKey());
|
||||||
|
|
||||||
TradingClearingRegistry predictableTradingClearingRegistry = new TradingClearingRegistry();
|
TradingClearingRegistry predictableTradingClearingRegistry = new TradingClearingRegistry();
|
||||||
predictableTradingClearingRegistry.setCompanyId(companyId);
|
predictableTradingClearingRegistry.setCompanyId(companyId);
|
||||||
predictableTradingClearingRegistry.setCode("0077MAT");
|
predictableTradingClearingRegistry.setCode("0077MAT00001");
|
||||||
predictableTradingClearingRegistry.setMoneyAccountId(accountId);
|
predictableTradingClearingRegistry.setMoneyAccountId(accountId);
|
||||||
predictableTradingClearingRegistry.setTradingClearingRegistryType("CAT");
|
predictableTradingClearingRegistry.setTradingClearingRegistryType(TradingClearingRegistryType.Owner_A.getKey());
|
||||||
predictableTradingClearingRegistry.setTradingClearingRegistryPurpose(TradingClearingRegistryPurpose.M.getKey());
|
predictableTradingClearingRegistry.setTradingClearingRegistryPurpose(TradingClearingRegistryPurpose.M.getKey());
|
||||||
predictableTradingClearingRegistry.setStatus(ServiceStatus.Active.getKey());
|
predictableTradingClearingRegistry.setStatus(ServiceStatus.Active.getKey());
|
||||||
|
|
||||||
|
|
@ -178,7 +185,6 @@ class TradingClearingRegistryServiceTest {
|
||||||
|
|
||||||
TradingClearingRegistry resultNew = tradingClearingRegistryImdg.getAllValues().iterator().next();
|
TradingClearingRegistry resultNew = tradingClearingRegistryImdg.getAllValues().iterator().next();
|
||||||
predictableTradingClearingRegistry.setId(resultNew.getId());
|
predictableTradingClearingRegistry.setId(resultNew.getId());
|
||||||
predictableTradingClearingRegistry.setCode(predictableTradingClearingRegistry.getCode() + resultNew.getId());
|
|
||||||
predictableTradingClearingRegistry.setUpdated(resultNew.getUpdated());
|
predictableTradingClearingRegistry.setUpdated(resultNew.getUpdated());
|
||||||
predictableTradingClearingRegistry.setCreated(resultNew.getCreated());
|
predictableTradingClearingRegistry.setCreated(resultNew.getCreated());
|
||||||
|
|
||||||
|
|
@ -190,13 +196,16 @@ class TradingClearingRegistryServiceTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void tradingClearingRegistryNew_moneyAccount_informationAccount() {
|
void tradingClearingRegistryNew_moneyAccount_informationAccount() {
|
||||||
|
setMockFuture(kafkaTemplate);
|
||||||
|
clearImdg(tradingClearingRegistryImdg);
|
||||||
TradingClearingRegistryNewRequest tradingClearingRegistryNewRequest = new TradingClearingRegistryNewRequest();
|
TradingClearingRegistryNewRequest tradingClearingRegistryNewRequest = new TradingClearingRegistryNewRequest();
|
||||||
tradingClearingRegistryNewRequest.setCompanyId(companyId);
|
tradingClearingRegistryNewRequest.setCompanyId(companyId);
|
||||||
tradingClearingRegistryNewRequest.setMoneyAccountId(account2Id);
|
tradingClearingRegistryNewRequest.setMoneyAccountId(account2Id);
|
||||||
|
tradingClearingRegistryNewRequest.setTradingClearingRegistryType(TradingClearingRegistryType.Owner_A.getKey());
|
||||||
|
|
||||||
TradingClearingRegistry predictableTradingClearingRegistry = new TradingClearingRegistry();
|
TradingClearingRegistry predictableTradingClearingRegistry = new TradingClearingRegistry();
|
||||||
predictableTradingClearingRegistry.setCompanyId(companyId);
|
predictableTradingClearingRegistry.setCompanyId(companyId);
|
||||||
predictableTradingClearingRegistry.setCode("0077MAT");
|
predictableTradingClearingRegistry.setCode("0077MAT00001");
|
||||||
predictableTradingClearingRegistry.setMoneyAccountId(account2Id);
|
predictableTradingClearingRegistry.setMoneyAccountId(account2Id);
|
||||||
predictableTradingClearingRegistry.setTradingClearingRegistryType(TradingClearingRegistryType.Owner_A.getKey());
|
predictableTradingClearingRegistry.setTradingClearingRegistryType(TradingClearingRegistryType.Owner_A.getKey());
|
||||||
predictableTradingClearingRegistry.setTradingClearingRegistryPurpose(TradingClearingRegistryPurpose.M.getKey());
|
predictableTradingClearingRegistry.setTradingClearingRegistryPurpose(TradingClearingRegistryPurpose.M.getKey());
|
||||||
|
|
@ -210,11 +219,10 @@ class TradingClearingRegistryServiceTest {
|
||||||
0,
|
0,
|
||||||
jsonString);
|
jsonString);
|
||||||
|
|
||||||
waitingSendAndCheckRecord(0L, producer, producerRecord);
|
waitingSendAndCheckRecord(0L, mockProducer);
|
||||||
|
|
||||||
TradingClearingRegistry resultNew = tradingClearingRegistryImdg.getAllValues().iterator().next();
|
TradingClearingRegistry resultNew = tradingClearingRegistryImdg.getAllValues().iterator().next();
|
||||||
predictableTradingClearingRegistry.setId(resultNew.getId());
|
predictableTradingClearingRegistry.setId(resultNew.getId());
|
||||||
predictableTradingClearingRegistry.setCode(predictableTradingClearingRegistry.getCode() + resultNew.getId());
|
|
||||||
predictableTradingClearingRegistry.setUpdated(resultNew.getUpdated());
|
predictableTradingClearingRegistry.setUpdated(resultNew.getUpdated());
|
||||||
predictableTradingClearingRegistry.setCreated(resultNew.getCreated());
|
predictableTradingClearingRegistry.setCreated(resultNew.getCreated());
|
||||||
|
|
||||||
|
|
@ -227,6 +235,8 @@ class TradingClearingRegistryServiceTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void tradingClearingRegistryNew_depoAccount() {
|
void tradingClearingRegistryNew_depoAccount() {
|
||||||
|
setMockFuture(kafkaTemplate);
|
||||||
|
clearImdg(tradingClearingRegistryImdg);
|
||||||
TradingClearingRegistryNewRequest tradingClearingRegistryNewRequest = new TradingClearingRegistryNewRequest();
|
TradingClearingRegistryNewRequest tradingClearingRegistryNewRequest = new TradingClearingRegistryNewRequest();
|
||||||
tradingClearingRegistryNewRequest.setCompanyId(companyId);
|
tradingClearingRegistryNewRequest.setCompanyId(companyId);
|
||||||
tradingClearingRegistryNewRequest.setMoneyAccountId(accountId);
|
tradingClearingRegistryNewRequest.setMoneyAccountId(accountId);
|
||||||
|
|
@ -234,7 +244,7 @@ class TradingClearingRegistryServiceTest {
|
||||||
|
|
||||||
TradingClearingRegistry predictableTradingClearingRegistry = new TradingClearingRegistry();
|
TradingClearingRegistry predictableTradingClearingRegistry = new TradingClearingRegistry();
|
||||||
predictableTradingClearingRegistry.setCompanyId(companyId);
|
predictableTradingClearingRegistry.setCompanyId(companyId);
|
||||||
predictableTradingClearingRegistry.setCode("0077CDAT");
|
predictableTradingClearingRegistry.setCode("0077CDATT00001");
|
||||||
predictableTradingClearingRegistry.setMoneyAccountId(accountId);
|
predictableTradingClearingRegistry.setMoneyAccountId(accountId);
|
||||||
predictableTradingClearingRegistry.setDepoAccountId(account2Id);
|
predictableTradingClearingRegistry.setDepoAccountId(account2Id);
|
||||||
predictableTradingClearingRegistry.setTradingClearingRegistryType("DAT");
|
predictableTradingClearingRegistry.setTradingClearingRegistryType("DAT");
|
||||||
|
|
@ -249,14 +259,12 @@ class TradingClearingRegistryServiceTest {
|
||||||
0,
|
0,
|
||||||
jsonString);
|
jsonString);
|
||||||
|
|
||||||
waitingSendAndCheckRecord(0L, producer, producerRecord);
|
waitingSendAndCheckRecord(0L, mockProducer);
|
||||||
|
|
||||||
TradingClearingRegistry resultNew = tradingClearingRegistryImdg.getAllValues().iterator().next();
|
TradingClearingRegistry resultNew = tradingClearingRegistryImdg.getAllValues().iterator().next();
|
||||||
predictableTradingClearingRegistry.setId(resultNew.getId());
|
predictableTradingClearingRegistry.setId(resultNew.getId());
|
||||||
predictableTradingClearingRegistry.setCode(predictableTradingClearingRegistry.getCode() + resultNew.getId());
|
|
||||||
predictableTradingClearingRegistry.setUpdated(resultNew.getUpdated());
|
predictableTradingClearingRegistry.setUpdated(resultNew.getUpdated());
|
||||||
predictableTradingClearingRegistry.setCreated(resultNew.getCreated());
|
predictableTradingClearingRegistry.setCreated(resultNew.getCreated());
|
||||||
predictableTradingClearingRegistry.setCompanyId(123L);
|
|
||||||
|
|
||||||
TRADING_CLEARING_REGISTRY_MATCHER.assertMatch(resultNew, predictableTradingClearingRegistry);
|
TRADING_CLEARING_REGISTRY_MATCHER.assertMatch(resultNew, predictableTradingClearingRegistry);
|
||||||
tradingClearingRegistryImdg.delete(resultNew);
|
tradingClearingRegistryImdg.delete(resultNew);
|
||||||
|
|
@ -284,7 +292,7 @@ class TradingClearingRegistryServiceTest {
|
||||||
jsonString);
|
jsonString);
|
||||||
|
|
||||||
//ASSERT
|
//ASSERT
|
||||||
waitingSendAndCheckRecord(0L, producer, producerRecord);
|
waitingSendAndCheckRecord(0L, mockProducer);
|
||||||
|
|
||||||
TradingClearingRegistry resultUpdating = tradingClearingRegistryImdg.getSingleObjectByID(registryId);
|
TradingClearingRegistry resultUpdating = tradingClearingRegistryImdg.getSingleObjectByID(registryId);
|
||||||
existTradingClearingRegistry.setUpdated(resultUpdating.getUpdated());
|
existTradingClearingRegistry.setUpdated(resultUpdating.getUpdated());
|
||||||
|
|
@ -312,7 +320,7 @@ class TradingClearingRegistryServiceTest {
|
||||||
jsonString);
|
jsonString);
|
||||||
|
|
||||||
//ASSERT
|
//ASSERT
|
||||||
waitingSendAndCheckRecord(0L, producer, producerRecord);
|
waitingSendAndCheckRecord(0L, mockProducer);
|
||||||
|
|
||||||
TradingClearingRegistry resultUpdating = tradingClearingRegistryImdg.getSingleObjectByID(registryId);
|
TradingClearingRegistry resultUpdating = tradingClearingRegistryImdg.getSingleObjectByID(registryId);
|
||||||
existTradingClearingRegistry.setUpdated(resultUpdating.getUpdated());
|
existTradingClearingRegistry.setUpdated(resultUpdating.getUpdated());
|
||||||
|
|
@ -333,8 +341,8 @@ class TradingClearingRegistryServiceTest {
|
||||||
"000000105", TradingClearingRegistryPurpose.C, "ER", 100012L
|
"000000105", TradingClearingRegistryPurpose.C, "ER", 100012L
|
||||||
));
|
));
|
||||||
|
|
||||||
Assertions.assertEquals("0105MAT100012", tradingClearingRegistryService.makeCode(
|
Assertions.assertEquals("0105MAT00012", tradingClearingRegistryService.makeCode(
|
||||||
"000000105", TradingClearingRegistryPurpose.M, "ER", 100012L
|
"000000105", TradingClearingRegistryPurpose.M, "A", 100012L
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,63 +0,0 @@
|
||||||
package ru.spcex.clearing.account.utils;
|
|
||||||
|
|
||||||
import com.hazelcast.core.IMap;
|
|
||||||
import com.hazelcast.map.listener.EntryAddedListener;
|
|
||||||
import com.hazelcast.map.listener.EntryRemovedListener;
|
|
||||||
import com.hazelcast.map.listener.EntryUpdatedListener;
|
|
||||||
|
|
||||||
import java.util.Timer;
|
|
||||||
import java.util.TimerTask;
|
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
|
||||||
|
|
||||||
public class ImapEvent<T> {
|
|
||||||
private final IMap<Long, T> iMap;
|
|
||||||
private final String listenerAdding;
|
|
||||||
private final String listenerUpdating;
|
|
||||||
private final String listenerRemoving;
|
|
||||||
private final AtomicBoolean checkEventHappened = new AtomicBoolean(false);
|
|
||||||
|
|
||||||
public ImapEvent(IMap<Long, T> iMap) {
|
|
||||||
this.iMap = iMap;
|
|
||||||
listenerAdding = iMap.addEntryListener((EntryAddedListener<Long, T>) entryEvent -> {
|
|
||||||
synchronized (checkEventHappened) {
|
|
||||||
checkEventHappened.set(true);
|
|
||||||
checkEventHappened.notify();
|
|
||||||
}
|
|
||||||
}, false);
|
|
||||||
listenerUpdating = iMap.addEntryListener((EntryUpdatedListener<Long, T>) entryEvent -> {
|
|
||||||
synchronized (checkEventHappened) {
|
|
||||||
checkEventHappened.set(true);
|
|
||||||
checkEventHappened.notify();
|
|
||||||
}
|
|
||||||
}, false);
|
|
||||||
listenerRemoving = iMap.addEntryListener((EntryRemovedListener<Long, T>) entryEvent -> {
|
|
||||||
synchronized (checkEventHappened) {
|
|
||||||
checkEventHappened.set(true);
|
|
||||||
checkEventHappened.notify();
|
|
||||||
}
|
|
||||||
}, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void waitWhenHappened() throws InterruptedException {
|
|
||||||
//running timer task as daemon thread
|
|
||||||
Timer timer = new Timer(true);
|
|
||||||
timer.scheduleAtFixedRate(new TimerTask() {
|
|
||||||
boolean secondRan;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
checkEventHappened.set(secondRan);//если что-то пойдет не так не тормозить основной поток
|
|
||||||
secondRan = true;
|
|
||||||
}
|
|
||||||
}, 0, 30 * 1000);
|
|
||||||
synchronized (checkEventHappened) {
|
|
||||||
while (!checkEventHappened.get()) {
|
|
||||||
checkEventHappened.wait(100);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//preparing hazelcastImdgProvider for next test
|
|
||||||
iMap.removeEntryListener(listenerAdding);
|
|
||||||
iMap.removeEntryListener(listenerUpdating);
|
|
||||||
iMap.removeEntryListener(listenerRemoving);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,38 +0,0 @@
|
||||||
package ru.spcex.clearing.account.utils;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Factory for creating test matchers.
|
|
||||||
* <p>
|
|
||||||
* Comparing actual and expected objects via AssertJ
|
|
||||||
*/
|
|
||||||
public class MatcherFactory {
|
|
||||||
|
|
||||||
public static <T> Matcher<T> usingIgnoringFieldsComparator(String... fieldsToIgnore) {
|
|
||||||
return new Matcher<>(fieldsToIgnore);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class Matcher<T> {
|
|
||||||
private final String[] fieldsToIgnore;
|
|
||||||
|
|
||||||
private Matcher(String... fieldsToIgnore) {
|
|
||||||
this.fieldsToIgnore = fieldsToIgnore;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void assertMatch(T actual, T expected) {
|
|
||||||
assertThat(actual).usingRecursiveComparison().ignoringFields(fieldsToIgnore).isEqualTo(expected);
|
|
||||||
}
|
|
||||||
|
|
||||||
@SafeVarargs
|
|
||||||
public final void assertMatch(Iterable<T> actual, T... expected) {
|
|
||||||
assertMatch(actual, Arrays.asList(expected));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void assertMatch(Iterable<T> actual, Iterable<T> expected) {
|
|
||||||
assertThat(actual).usingRecursiveFieldByFieldElementComparatorIgnoringFields(fieldsToIgnore).isEqualTo(expected);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -89,7 +89,8 @@ public class ImdgTestConfig {
|
||||||
params.setPassword("dev-pass");
|
params.setPassword("dev-pass");
|
||||||
params.setClusterMembers("127.0.0.1");
|
params.setClusterMembers("127.0.0.1");
|
||||||
params.setInstanceName("hzTestClient" + new Random().nextInt());
|
params.setInstanceName("hzTestClient" + new Random().nextInt());
|
||||||
params.setNearCacheConfig(new NearCacheConfig());
|
// params.setNearCacheConfig(new NearCacheConfig()); Если добавить будет с опазданием(8-12с) обновлятся данные для метода Imdg.getSingleObjectByID
|
||||||
|
// (getSingleObjectByFieldValues, getAllValues, getSingleObjectBySQL работают корректно) при ТРАНЗАКЦИЯХ. Используется в проде(по факту нет) если в конфиг добавить эту настройку..
|
||||||
return params;
|
return params;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -60,6 +60,15 @@ public class KafkaTestConfig {
|
||||||
TestUtils.FutureRecordMetadata future = spy(new TestUtils.FutureRecordMetadata());
|
TestUtils.FutureRecordMetadata future = spy(new TestUtils.FutureRecordMetadata());
|
||||||
doReturn(future).when(mockProducer).send(captor.capture());
|
doReturn(future).when(mockProducer).send(captor.capture());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Позволяет избежать NPE при вызове Future.get(), из-за очисткой перед каждым тестом(MockReset.withSettings(MockReset.AFTER) необходимо обновлять перед вызовом
|
||||||
|
* @param mockProducer
|
||||||
|
*/
|
||||||
|
public static void setMockFuture(Producer<String, Object> mockProducer){
|
||||||
|
ArgumentCaptor<ProducerRecord> captor = producerCaptors.get(mockProducer);
|
||||||
|
setFuture(captor, mockProducer);
|
||||||
|
}
|
||||||
public static void setFuture(ArgumentCaptor<ProducerRecord> recordArgumentCaptor, ReplyingKafkaTemplate<String, Object, Object> kafkaTemplate){
|
public static void setFuture(ArgumentCaptor<ProducerRecord> recordArgumentCaptor, ReplyingKafkaTemplate<String, Object, Object> kafkaTemplate){
|
||||||
|
|
||||||
//sendToQueueWaitForAnswer
|
//sendToQueueWaitForAnswer
|
||||||
|
|
@ -89,6 +98,15 @@ public class KafkaTestConfig {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Позволяет избежать NPE при вызове Future.get(), из-за очисткой перед каждым тестом(MockReset.withSettings(MockReset.AFTER) необходимо обновлять перед вызовом
|
||||||
|
* @param kafkaTemplate
|
||||||
|
*/
|
||||||
|
public static void setMockFuture(KafkaTemplate<String, Object> kafkaTemplate){
|
||||||
|
ArgumentCaptor<ProducerRecord> captor = templateCaptors.get(kafkaTemplate);
|
||||||
|
setFuture(captor, (ReplyingKafkaTemplate<String, Object, Object>) kafkaTemplate);
|
||||||
|
}
|
||||||
|
|
||||||
// @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
|
// @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
|
||||||
@Bean("mockProducer")
|
@Bean("mockProducer")
|
||||||
public Producer<String, Object> kafkaProducer() {
|
public Producer<String, Object> kafkaProducer() {
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,10 @@ import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
||||||
import ru.spcex.platform.imdg.api.Imdg;
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
|
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
|
||||||
|
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
||||||
|
import ru.spcex.platform.imdg.iml.hazelcast.adapter.predicate.ImdgPredicateBuilderHazelcast;
|
||||||
|
import ru.spcex.platform.imdg.iml.hazelcast.adapter.predicate.ImdgPredicateHazelcast;
|
||||||
import ru.spcex.platform.utils.log.ExceptionUtils;
|
import ru.spcex.platform.utils.log.ExceptionUtils;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
@ -25,6 +29,11 @@ public class ImdgTransactionalHazelcast<T extends SpcexObjectBase> implements Im
|
||||||
|
|
||||||
private HazelcastInstance hzInstance;
|
private HazelcastInstance hzInstance;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Collection<T> getAllValues() {
|
||||||
|
return map.values();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Long insert(T paramT) {
|
public Long insert(T paramT) {
|
||||||
if (paramT.getId() == null) {
|
if (paramT.getId() == null) {
|
||||||
|
|
@ -183,4 +192,43 @@ public class ImdgTransactionalHazelcast<T extends SpcexObjectBase> implements Im
|
||||||
public Long nextIDSequenceFor() {
|
public Long nextIDSequenceFor() {
|
||||||
return idGenerator.newId();
|
return idGenerator.newId();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Predicate API
|
||||||
|
@Override
|
||||||
|
public Collection<T> getCollectionObjectsByPredicate(ImdgPredicate predicateImdg) {
|
||||||
|
Predicate hazelcastPredicate = ((ImdgPredicateHazelcast) predicateImdg).getRawPredicate();
|
||||||
|
Set<Long> ids = map.keySet(hazelcastPredicate);
|
||||||
|
Iterator<Long> idIterator = ids.iterator();
|
||||||
|
Collection<T> searchResult = new ArrayList<>();
|
||||||
|
while (idIterator.hasNext()) {
|
||||||
|
T element = map.get(idIterator.next());
|
||||||
|
if (element != null) {
|
||||||
|
searchResult.add(element);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return searchResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public T getSingleObjectByPredicate(ImdgPredicate predicate) {
|
||||||
|
Collection<T> els = getCollectionObjectsByPredicate(predicate);
|
||||||
|
if (els.size() > 1) {
|
||||||
|
throw new RuntimeException("More than one element found by predicate [" + predicate + "] - " + els.size());
|
||||||
|
}
|
||||||
|
return els.size() == 1 ? els.iterator().next() : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public T getFirstObjectByPredicate(ImdgPredicate predicate) {
|
||||||
|
Collection<T> els = getCollectionObjectsByPredicate(predicate);
|
||||||
|
Iterator<T> iterator = els.iterator();
|
||||||
|
if (iterator.hasNext()) {
|
||||||
|
return iterator.next();
|
||||||
|
} else return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ImdgPredicateBuilder predicateBuilder() {
|
||||||
|
return ImdgPredicateBuilderHazelcast.instance();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue