CompanyServiceTest, add test for newCompany fail

This commit is contained in:
akulikov 2023-04-06 19:30:01 +03:00
parent ade79ed6c6
commit 0cbbe2a05b
4 changed files with 79 additions and 1 deletions

View file

@ -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);

View file

@ -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<ImdgValidation
public Optional<EnumMessage> validate(ImdgValidationContext<CompanyNewRequest> 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<CompanySymbols> companySymbolsImdg = context.obtainMap(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class);
ImdgPredicateBuilder pb = companySymbolsImdg.predicateBuilder();

View file

@ -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<Company> companyImdg;
private Imdg<CompanySymbols> companySymbolsImdg;
private Imdg<WorkflowStatusDictionary> 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);
}
}

View file

@ -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> producerRecord,
String errorCode,
List<String> errorMessageArgs) {
BaseRequest<Object> 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<Object> baseRequestResult = (BaseRequest<Object>) 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<TopicPartition, Long> startOffsets = new HashMap<>();