http://jira.mfd.msk:8088/browse/CLS-272 доделал тесты (не стабильно работают)

This commit is contained in:
AKurakin 2023-05-04 16:16:13 +03:00
parent 795b488629
commit 3ec2177641
3 changed files with 99 additions and 77 deletions

View file

@ -89,7 +89,7 @@ public class BiDirectionQueueExchanger<TOut extends BaseRequest<?>> extends Queu
this.timeout = timeout; this.timeout = timeout;
this.ignoreOtherResponse = ignoreOtherResponse; this.ignoreOtherResponse = ignoreOtherResponse;
//fixme debug only ! initReplyListener(); initReplyListener();
} }
/** /**

View file

@ -111,7 +111,7 @@ public class ClientCodeValidationConfig {
CompanyErrors.RecordNotFound CompanyErrors.RecordNotFound
), ),
FieldRequiredRule.instance("companyId", ClientCodeNewRequest::getCompanyId, CompanyErrors.RequiredFieldEmpty), FieldRequiredRule.instance("companyId", ClientCodeUpdateRequest::getCompanyId, CompanyErrors.RequiredFieldEmpty),
IdPresentRule.instance("companyId", IdPresentRule.instance("companyId",
ClientCodeUpdateRequest::getCompanyId, ClientCodeUpdateRequest::getCompanyId,
IMDGDistributedNames.Map_Company, IMDGDistributedNames.Map_Company,

View file

@ -13,6 +13,7 @@ import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.test.mock.mockito.SpyBean; 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.ClientCode; import ru.clearing.classes.statics.data.account.ClientCode;
import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.profile.CompanyInfo; import ru.clearing.classes.statics.data.profile.CompanyInfo;
@ -44,6 +45,7 @@ import static ru.spcex.clearing.test.MatcherFactory.usingIgnoringFieldsComparato
import static ru.spcex.clearing.test.TestUtils.*; import static ru.spcex.clearing.test.TestUtils.*;
import static ru.spcex.clearing.test.config.ImdgTestConfig.waitAvailableImdgProviderAndAddAdminWithDefaultId; import static ru.spcex.clearing.test.config.ImdgTestConfig.waitAvailableImdgProviderAndAddAdminWithDefaultId;
//todo тесты случайно ломаются из-за BiDirectionQueueExchanger. Когда там выключаю initReplyListener() то тесты стабильно работают.
@ExtendWith(SpringExtension.class) @ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = { @ContextConfiguration(classes = {
ClientCodeService.class, ClientCodeService.class,
@ -58,7 +60,7 @@ class ClientCodeServiceTest {
private static final int PARTITION = 0; private static final int PARTITION = 0;
private static final Long ID = 4L; private static final Long ID = 4L;
public static final MatcherFactory.Matcher<ClientCode> CLIENT_CODE_MATCHER = usingIgnoringFieldsComparator(); public static final MatcherFactory.Matcher<ClientCode> CLIENT_CODE_MATCHER = usingIgnoringFieldsComparator("created","updated");
private static final Long TCR_ID = 41L; private static final Long TCR_ID = 41L;
private static final Long COMPANY_ID = 42L; private static final Long COMPANY_ID = 42L;
@ -118,6 +120,20 @@ class ClientCodeServiceTest {
registry1.setStatus(WorkflowStatus.Active.getKey()); registry1.setStatus(WorkflowStatus.Active.getKey());
tcrImdg.insert(registry1); tcrImdg.insert(registry1);
Imdg<Account> accounts = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_Account, Account.class);
Account moneyAccount=new Account();
moneyAccount.setId(131L);
moneyAccount.setAccount("AAAA-4444");
moneyAccount.setStatus("ACTV");
moneyAccount.setCompanyId(COMPANY_ID); // для валидации принадлежности счёта
accounts.insert(moneyAccount);
Account depoAccount=new Account();
depoAccount.setId(132L);
depoAccount.setAccount("AAAB-44654");
depoAccount.setStatus("ACTV");
depoAccount.setCompanyId(COMPANY_ID); // для валидации принадлежности счёта
accounts.insert(depoAccount);
TestUtils.FutureRecordMetadata future = spy(TestUtils.FutureRecordMetadata.class); TestUtils.FutureRecordMetadata future = spy(TestUtils.FutureRecordMetadata.class);
doReturn(future).when(mockProducer).send(producerRecord.capture()); doReturn(future).when(mockProducer).send(producerRecord.capture());
} }
@ -167,8 +183,8 @@ class ClientCodeServiceTest {
predictableClientCode.setCode(ccCode); predictableClientCode.setCode(ccCode);
predictableClientCode.setStatus("ACTV"); predictableClientCode.setStatus("ACTV");
predictableClientCode.setCompanyId(COMPANY_ID); predictableClientCode.setCompanyId(COMPANY_ID);
predictableClientCode.setMoneyAccountId(131L); // predictableClientCode.setMoneyAccountId(131L);
predictableClientCode.setDepoAccountId(132L); // predictableClientCode.setDepoAccountId(132L);
predictableClientCode.setTradingClearingRegistryId(TCR_ID); predictableClientCode.setTradingClearingRegistryId(TCR_ID);
//ACT //ACT
@ -181,6 +197,7 @@ class ClientCodeServiceTest {
ClientCode resultNew = clientCodeImdg.getSingleObjectBySQL(String.format("code = '%s'", ccCode)); ClientCode resultNew = clientCodeImdg.getSingleObjectBySQL(String.format("code = '%s'", ccCode));
predictableClientCode.setId(resultNew.getId()); predictableClientCode.setId(resultNew.getId());
CLIENT_CODE_MATCHER.assertMatch(resultNew, predictableClientCode); CLIENT_CODE_MATCHER.assertMatch(resultNew, predictableClientCode);
assertNotNull(resultNew.getCreated());
} }
/** /**
@ -204,8 +221,8 @@ class ClientCodeServiceTest {
predictableClientCode.setCode(ccCode); predictableClientCode.setCode(ccCode);
predictableClientCode.setStatus("ACTV"); predictableClientCode.setStatus("ACTV");
predictableClientCode.setCompanyId(COMPANY_ID); predictableClientCode.setCompanyId(COMPANY_ID);
predictableClientCode.setMoneyAccountId(131L); // predictableClientCode.setMoneyAccountId(131L);
predictableClientCode.setDepoAccountId(132L); // predictableClientCode.setDepoAccountId(132L);
predictableClientCode.setTradingClearingRegistryId(TCR_ID); predictableClientCode.setTradingClearingRegistryId(TCR_ID);
//ACT //ACT
@ -218,8 +235,11 @@ class ClientCodeServiceTest {
ClientCode resultNew = clientCodeImdg.getSingleObjectBySQL(String.format("code = '%s'", ccCode)); ClientCode resultNew = clientCodeImdg.getSingleObjectBySQL(String.format("code = '%s'", ccCode));
predictableClientCode.setId(resultNew.getId()); predictableClientCode.setId(resultNew.getId());
CLIENT_CODE_MATCHER.assertMatch(resultNew, predictableClientCode); CLIENT_CODE_MATCHER.assertMatch(resultNew, predictableClientCode);
assertNotNull(resultNew.getCreated());
} }
//todo добавить тест NEW заполненными MoneyAccountId(131L), DepoAccountId(132L); - от этого направляется дополнительное сообщение в очередь и используется ожидание ответа.
/** /**
* {@link ClientCodeService#clientCodeUpdate(BaseRequest)}<br> * {@link ClientCodeService#clientCodeUpdate(BaseRequest)}<br>
* Тест проверяет обновление сущности {@link ClientCode} в IMDG при передаче из Apache Kafka.<br> * Тест проверяет обновление сущности {@link ClientCode} в IMDG при передаче из Apache Kafka.<br>
@ -233,26 +253,27 @@ class ClientCodeServiceTest {
existsClientCode.setCompanyId(COMPANY_ID); existsClientCode.setCompanyId(COMPANY_ID);
existsClientCode.setCode("0000"); existsClientCode.setCode("0000");
existsClientCode.setTradingClearingRegistryId(TCR_ID); existsClientCode.setTradingClearingRegistryId(TCR_ID);
existsClientCode.setMoneyAccountId(200L); existsClientCode.setMoneyAccountId(131L);
existsClientCode.setDepoAccountId(201L); existsClientCode.setDepoAccountId(132L);
existsClientCode.setStatus("ACTV"); existsClientCode.setStatus("ACTV");
clientCodeImdg.insert(existsClientCode);
ClientCodeUpdateRequest clientCodeUpdateRequest = new ClientCodeUpdateRequest(); ClientCodeUpdateRequest clientCodeUpdateRequest = new ClientCodeUpdateRequest();
clientCodeUpdateRequest.setId(ID); clientCodeUpdateRequest.setId(ID);
existsClientCode.setCompanyId(COMPANY_ID); clientCodeUpdateRequest.setCompanyId(COMPANY_ID);
existsClientCode.setCode("1111"); clientCodeUpdateRequest.setCode("1111");
// existsClientCode.setTradingClearingRegistryId(TCR_ID); clientCodeUpdateRequest.setTradingClearingRegistryId(TCR_ID);
existsClientCode.setMoneyAccountId(200L); clientCodeUpdateRequest.setMoneyAccountId(131L);
existsClientCode.setDepoAccountId(201L); clientCodeUpdateRequest.setDepoAccountId(132L);
existsClientCode.setStatus("ACTV"); clientCodeUpdateRequest.setStatus("ACTV");
ClientCode predictableClientCode = new ClientCode(); ClientCode predictableClientCode = new ClientCode();
predictableClientCode.setId(ID); predictableClientCode.setId(ID);
predictableClientCode.setCompanyId(COMPANY_ID); predictableClientCode.setCompanyId(COMPANY_ID);
predictableClientCode.setCode("1111"); predictableClientCode.setCode("1111");
predictableClientCode.setTradingClearingRegistryId(TCR_ID); predictableClientCode.setTradingClearingRegistryId(TCR_ID);
predictableClientCode.setMoneyAccountId(200L); predictableClientCode.setMoneyAccountId(131L);
predictableClientCode.setDepoAccountId(201L); predictableClientCode.setDepoAccountId(132L);
predictableClientCode.setStatus("ACTV"); predictableClientCode.setStatus("ACTV");
//ACT //ACT
@ -265,7 +286,7 @@ class ClientCodeServiceTest {
ClientCode resultUpdating = clientCodeImdg.getSingleObjectByID(ID); ClientCode resultUpdating = clientCodeImdg.getSingleObjectByID(ID);
CLIENT_CODE_MATCHER.assertMatch(resultUpdating, predictableClientCode); CLIENT_CODE_MATCHER.assertMatch(resultUpdating, predictableClientCode);
//todo !!!! assertNotNull(resultUpdating.getUpdated());
} }
@ -282,65 +303,66 @@ class ClientCodeServiceTest {
existsClientCode.setCompanyId(COMPANY_ID); existsClientCode.setCompanyId(COMPANY_ID);
existsClientCode.setCode("0000"); existsClientCode.setCode("0000");
// Если следующие поля заполнить, то дополнительно отправит сообщение в trading-clearing-registry-update: // Если следующие поля заполнить, то дополнительно отправит сообщение в trading-clearing-registry-update:
existsClientCode.setTradingClearingRegistryId(null);
existsClientCode.setMoneyAccountId(null);
existsClientCode.setDepoAccountId(null);
existsClientCode.setStatus("ACTV");
clientCodeImdg.insert(existsClientCode);
CommonDeleteRequest clientCodeDeleteRequest = new CommonDeleteRequest();
clientCodeDeleteRequest.setId(ID);
Assertions.assertNotNull(clientCodeImdg.getSingleObjectByID(ID)); // verify test data
//ACT
String jsonString = getJsonStringForUpdate(clientCodeDeleteRequest, ID);
addRecordToKafka((MockConsumer) clientCodeService.getConsumer(), Consts.DESTINATION_CLIENT_CODE_DELETE, PARTITION, 0, jsonString);
//ASSERT
waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord);
ClientCode resultUpdate = clientCodeImdg.getSingleObjectByID(ID);
Assertions.assertNull(resultUpdate);
}
// /**
// * {@link ClientCodeService#clientCodeUpdate(BaseRequest)}<br>
// * Тест проверяет удаление {@link ClientCode} из IMDG при передаче из Apache Kafka.<br>
// * У ClientCode заполнены MoneyAccountId, DepoAccountId - по этому при удалении должно направиться дополнительное сообщение в очередь DESTINATION_TRADING_CLEARING_REGISTRY_UPDATE<br>
// * Входной запрос {@link ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest}:<br>
// **/
// @Test
// void clientCodeDelete2() {
// //ARRANGE
// ClientCode existsClientCode = new ClientCode();
// existsClientCode.setId(ID);
// existsClientCode.setCompanyId(COMPANY_ID);
// existsClientCode.setCode("0000");
// // Если следующие поля заполнить, то дополнительно отправит сообщение в trading-clearing-registry-update:
// existsClientCode.setTradingClearingRegistryId(TCR_ID); // existsClientCode.setTradingClearingRegistryId(TCR_ID);
// existsClientCode.setMoneyAccountId(200L); // existsClientCode.setMoneyAccountId(131L);
// existsClientCode.setDepoAccountId(201L); // existsClientCode.setDepoAccountId(132L);
existsClientCode.setStatus("ACTV"); // existsClientCode.setStatus("ACTV");
//
clientCodeImdg.insert(existsClientCode); // clientCodeImdg.insert(existsClientCode);
//
CommonDeleteRequest clientCodeDeleteRequest = new CommonDeleteRequest(); // CommonDeleteRequest clientCodeDeleteRequest = new CommonDeleteRequest();
clientCodeDeleteRequest.setId(ID); // clientCodeDeleteRequest.setId(ID);
//
Assertions.assertNotNull(clientCodeImdg.getSingleObjectByID(ID)); // verify test data // Assertions.assertNotNull(clientCodeImdg.getSingleObjectByID(ID)); // verify test data
//
//ACT // //ACT
String jsonString = getJsonStringForUpdate(clientCodeDeleteRequest, ID); // String jsonString = getJsonStringForUpdate(clientCodeDeleteRequest, ID);
//
addRecordToKafka((MockConsumer) clientCodeService.getConsumer(), Consts.DESTINATION_CLIENT_CODE_DELETE, PARTITION, 0, jsonString); // addRecordToKafka((MockConsumer) clientCodeService.getConsumer(), Consts.DESTINATION_CLIENT_CODE_DELETE, PARTITION, 0, jsonString);
//
//ASSERT // //ASSERT
//
waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord); // waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord);
ClientCode resultUpdate = clientCodeImdg.getSingleObjectByID(ID); // ClientCode resultUpdate = clientCodeImdg.getSingleObjectByID(ID);
Assertions.assertNull(resultUpdate); // Assertions.assertNull(resultUpdate);
} // }
/**
* {@link ClientCodeService#clientCodeUpdate(BaseRequest)}<br>
* Тест проверяет удаление {@link ClientCode} из IMDG при передаче из Apache Kafka.<br>
* Входной запрос {@link ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest}:<br>
**/
@Test
void clientCodeDelete2() {
//ARRANGE
ClientCode existsClientCode = new ClientCode();
existsClientCode.setId(ID);
existsClientCode.setCompanyId(COMPANY_ID);
existsClientCode.setCode("0000");
// Если следующие поля заполнить, то дополнительно отправит сообщение в trading-clearing-registry-update:
existsClientCode.setTradingClearingRegistryId(TCR_ID);
existsClientCode.setMoneyAccountId(200L);
existsClientCode.setDepoAccountId(201L);
existsClientCode.setStatus("ACTV");
clientCodeImdg.insert(existsClientCode);
CommonDeleteRequest clientCodeDeleteRequest = new CommonDeleteRequest();
clientCodeDeleteRequest.setId(ID);
Assertions.assertNotNull(clientCodeImdg.getSingleObjectByID(ID)); // verify test data
//ACT
String jsonString = getJsonStringForUpdate(clientCodeDeleteRequest, ID);
addRecordToKafka((MockConsumer) clientCodeService.getConsumer(), Consts.DESTINATION_CLIENT_CODE_DELETE, PARTITION, 0, jsonString);
//ASSERT
waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord);
ClientCode resultUpdate = clientCodeImdg.getSingleObjectByID(ID);
Assertions.assertNull(resultUpdate);
}
} }