From 0cbbe2a05b37b9ef0bbaf51c9b47afae09d1200d Mon Sep 17 00:00:00 2001 From: akulikov Date: Thu, 6 Apr 2023 19:30:01 +0300 Subject: [PATCH] CompanyServiceTest, add test for newCompany fail --- .../config/validation/ValidationConfig.java | 2 + .../validation/CompanySymbolNotExistRule.java | 6 +++ .../company/service/CompanyServiceTest.java | 46 ++++++++++++++++++- .../clearing/company/utils/TestUtils.java | 26 +++++++++++ 4 files changed, 79 insertions(+), 1 deletion(-) diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/validation/ValidationConfig.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/validation/ValidationConfig.java index 1a922efe6..a076fa999 100644 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/validation/ValidationConfig.java +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/validation/ValidationConfig.java @@ -3,6 +3,7 @@ package ru.spcex.clearing.company.config.validation; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.classes.statics.data.company.CompanySymbols; import ru.clearing.classes.statics.data.generated.ClearingMemberCategory; import ru.clearing.classes.statics.data.profile.Contact; import ru.clearing.classes.statics.data.profile.ProfileDocument; @@ -35,6 +36,7 @@ public class ValidationConfig { addImdg.accept(IMDGDistributedNames.Map_Contact, Contact.class); addImdg.accept(IMDGDistributedNames.Map_WorkflowStatusDictionary, WorkflowStatusDictionary.class); + addImdg.accept(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class); addImdg.accept(IMDGDistributedNames.Map_CompanySymbolDictionary, CompanySymbolDictionary.class); addImdg.accept(IMDGDistributedNames.Map_CorporationSoleTypeDictionary, CorporationSoleTypeDictionary.class); addImdg.accept(IMDGDistributedNames.Map_CountryCodeDictionary, CountryCodeDictionary.class); diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/validation/CompanySymbolNotExistRule.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/validation/CompanySymbolNotExistRule.java index 8ecb5706c..b2d477732 100644 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/validation/CompanySymbolNotExistRule.java +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/validation/CompanySymbolNotExistRule.java @@ -4,6 +4,7 @@ import ru.clearing.classes.statics.data.company.CompanySymbols; import ru.spcex.clearing.company.error.CompanyErrors; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanyNewRequest; +import ru.spcex.platform.enumeration.CompanySymbol; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.predicate.ImdgPredicate; import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; @@ -11,6 +12,7 @@ import ru.spcex.platform.imdg.validation.ImdgValidationContext; import ru.spcex.platform.utils.enumeration.EnumMessage; import ru.spcex.platform.utils.validation.IValidationRule; +import java.util.Arrays; import java.util.Collection; import java.util.Optional; @@ -22,6 +24,10 @@ public class CompanySymbolNotExistRule implements IValidationRule validate(ImdgValidationContext context) { CompanyNewRequest request = context.getValidatedObject(); String companySymbolCode = request.getCompanySymbol(); + if (!Arrays.asList(CompanySymbol.INN.getKey(), + CompanySymbol.CIO.getKey(), + CompanySymbol.UUID.getKey()).contains(companySymbolCode)) return Optional.empty(); + String companySymbolValue = request.getCompanySymbolValue(); Imdg companySymbolsImdg = context.obtainMap(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class); ImdgPredicateBuilder pb = companySymbolsImdg.predicateBuilder(); diff --git a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/CompanyServiceTest.java b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/CompanyServiceTest.java index 2112c5b8d..9e6f01dae 100644 --- a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/CompanyServiceTest.java +++ b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/CompanyServiceTest.java @@ -14,6 +14,7 @@ import org.springframework.boot.test.mock.mockito.SpyBean; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.classes.statics.data.company.CompanySymbols; import ru.clearing.classes.statics.data.generated.ClearingMemberCategory; import ru.clearing.platform.dictionary.CompanySymbolDictionary; import ru.clearing.platform.dictionary.WorkflowStatusDictionary; @@ -22,6 +23,7 @@ import ru.spcex.clearing.company.config.HazelcastServiceTestConfiguration; import ru.spcex.clearing.company.config.KafkaConfigTest; import ru.spcex.clearing.company.config.validation.CompanyValidationConfig; import ru.spcex.clearing.company.config.validation.ValidationConfig; +import ru.spcex.clearing.company.error.CompanyErrors; import ru.spcex.clearing.company.utils.MatcherFactory; import ru.spcex.clearing.company.utils.TestUtils; import ru.spcex.clearing.imdg.IMDGDistributedNames; @@ -35,7 +37,7 @@ import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService; import javax.annotation.PostConstruct; - +import java.util.Arrays; import java.util.Map; import static org.mockito.Mockito.doReturn; @@ -67,6 +69,7 @@ class CompanyServiceTest { @Qualifier("hazelcastServiceTest") private HazelcastService hazelcastServiceTest; private Imdg companyImdg; + private Imdg companySymbolsImdg; private Imdg workflowStatusDictionaryImdg; @Captor @@ -78,6 +81,7 @@ class CompanyServiceTest { private void init() { hazelcastServiceTest.waitAvailable(); companyImdg = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_Company, Company.class); + companySymbolsImdg = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class); workflowStatusDictionaryImdg = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_WorkflowStatusDictionary, WorkflowStatusDictionary.class); WorkflowStatusDictionary ws1 = new WorkflowStatusDictionary(); @@ -99,6 +103,11 @@ class CompanyServiceTest { cSymbol.setName(CompanySymbol.CLRC.getKey()); cSymbol.setShortname(" CLRC key"); companySymbolDictionaryImdg.insert(cSymbol); + CompanySymbolDictionary cioSymbol = new CompanySymbolDictionary(); + cioSymbol.setId(22L); + cioSymbol.setCode(CompanySymbol.CIO.getKey()); + cioSymbol.setName(CompanySymbol.CIO.getKey()); + companySymbolDictionaryImdg.insert(cioSymbol); } TestUtils.FutureRecordMetadata future = spy(TestUtils.FutureRecordMetadata.class); @@ -178,4 +187,39 @@ class CompanyServiceTest { Assertions.assertEquals("ClrIPO", resultNew.getShortName()); Assertions.assertEquals(WorkflowStatus.Active.getKey(), resultNew.getWorkflowStatus()); } + + @Test + void newExistCompanySymbolCompanyRequest() { + final Long ID = 102L; + final String DESTINATION_COMPANY_NEW = Consts.DESTINATION_COMPANY_NEW; + companyImdg.size(); + + CompanySymbols existCompanySymbols = new CompanySymbols(); + existCompanySymbols.setCompanyId(ID); + existCompanySymbols.setCompanySymbol(CompanySymbol.CIO.getKey()); + existCompanySymbols.setCompanySymbolValue("test_value"); + companySymbolsImdg.insert(existCompanySymbols); + + CompanyNewRequest companyNewRequest = new CompanyNewRequest(); +// companyNewRequest.setId(ID); + companyNewRequest.setCompanySymbol(CompanySymbol.CIO.getKey()); + companyNewRequest.setCompanySymbolValue("test_value"); + companyNewRequest.setShortName("ClrIPO"); + companyNewRequest.setFullName("Clearing IPO"); + companyNewRequest.setWorkflowStatus(WorkflowStatus.Active.getKey()); + + //ACT + String jsonString = getJsonStringForNew(companyNewRequest, ID); + addRecordToKafka((MockConsumer) companyService.getConsumer(), DESTINATION_COMPANY_NEW, PARTITION, 0, jsonString); + + //ASSERT + waitingWhenTryAddRecordAndCheckError(ID, + mockProducer, + producerRecord, + String.valueOf(CompanyErrors.CompanyWithCompanySymbolAlreadyExist.getId()), + Arrays.asList("CIO", "test_value")); + + Company resultNew = companyImdg.getSingleObjectByFieldValues(Map.of("ShortName", "ClrIPO")); + Assertions.assertNull(resultNew); + } } \ No newline at end of file diff --git a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/utils/TestUtils.java b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/utils/TestUtils.java index 17cfeb9ca..1e6270839 100644 --- a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/utils/TestUtils.java +++ b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/utils/TestUtils.java @@ -13,12 +13,14 @@ 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.service.RequestInfoUpdate; +import ru.spcex.clearing.platform.messaging.service.Status; import ru.spcex.platform.classes.base.SpcexObjectBase; import ru.spcex.platform.imdg.api.Imdg; import java.util.Collection; import java.util.Collections; import java.util.HashMap; +import java.util.List; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; @@ -52,6 +54,30 @@ public class TestUtils { BASE_REQUEST_MATCHER.assertMatch(baseRequestResult, predictableBaseRequest); } + public static void waitingWhenTryAddRecordAndCheckError(Long id, + MockProducer mockProducer, + ArgumentCaptor producerRecord, + String errorCode, + List errorMessageArgs) { + BaseRequest predictableBaseRequest = new BaseRequest<>(); + predictableBaseRequest.setId(id); + predictableBaseRequest.setActionType(ActionType.SYSTEM); + RequestInfoUpdate requestInfoUpdate = new RequestInfoUpdate(); + requestInfoUpdate.setId(id); + requestInfoUpdate.setStatus(Status.Error); + String errorsMessage = "(%s) args [%s]".formatted(errorCode, String.join(", ", errorMessageArgs)); + requestInfoUpdate.setMessage(errorsMessage); + predictableBaseRequest.setRequestPayload(requestInfoUpdate); + + //waiting for kafka producer send message (finale event) + verify(mockProducer, timeout(30_000L).times(1)) + .send(producerRecord.capture()); + + BaseRequest baseRequestResult = (BaseRequest) producerRecord.getValue().value(); + assertEquals(Consts.REQUEST_INFO_UPDATE, producerRecord.getValue().topic()); + BASE_REQUEST_MATCHER.assertMatch(baseRequestResult, predictableBaseRequest); + } + public static void addRecordToKafka(MockConsumer mockConsumer, String topic, int partition, long offset, String jsonValue) { TopicPartition tp = new TopicPartition(topic, partition); HashMap startOffsets = new HashMap<>();