diff --git a/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/AbstractServiceTest.java b/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/AbstractServiceTest.java new file mode 100644 index 000000000..d4196c5c4 --- /dev/null +++ b/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/AbstractServiceTest.java @@ -0,0 +1,181 @@ +package ru.specx.clearing.scheduler; + +import org.apache.kafka.clients.producer.MockProducer; +import org.apache.kafka.clients.producer.ProducerRecord; +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.Qualifier; +import org.springframework.boot.test.mock.mockito.MockBean; +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.scheduler.*; +import ru.clearing.classes.statics.data.security.Security; +import ru.clearing.platform.dictionary.DayStatusDictionary; +import ru.clearing.platform.dictionary.TaskDictionary; +import ru.clearing.platform.dictionary.TaskStatusDictionary; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.scheduler.PlannerAllTodayBuilder; +import ru.spcex.clearing.scheduler.config.ErrorResolverConfig; +import ru.spcex.clearing.scheduler.config.validation.ClearingCalendarValidationConfig; +import ru.spcex.clearing.scheduler.config.validation.PlannerTemplateValidationConfig; +import ru.spcex.clearing.scheduler.config.validation.PlannerValidationConfig; +import ru.spcex.clearing.scheduler.config.validation.ValidationConfig; +import ru.spcex.clearing.scheduler.service.ClearingCalendarService; +import ru.spcex.clearing.scheduler.service.LauncherService; +import ru.spcex.clearing.scheduler.service.PlannerService; +import ru.spcex.clearing.scheduler.service.PlannerTemplateService; +import ru.spcex.clearing.test.MatcherFactory; +import ru.spcex.clearing.test.TestUtils; +import ru.spcex.clearing.test.config.ImdgTestConfig; +import ru.spcex.clearing.test.config.KafkaTestConfig; +import ru.spcex.platform.enumeration.DayStatus; +import ru.spcex.platform.enumeration.Status; +import ru.spcex.platform.enumeration.Task; +import ru.spcex.platform.enumeration.WorkflowStatus; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; + +import java.time.LocalDate; +import java.time.LocalTime; + +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.spy; +import static ru.spcex.clearing.test.MatcherFactory.usingIgnoringFieldsComparator; +import static ru.spcex.clearing.test.config.ImdgTestConfig.currentID; +import static ru.spcex.clearing.test.config.ImdgTestConfig.waitAvailableImdgProviderAndAddAdminWithDefaultId; +import static ru.spcex.platform.enumeration.Market.mkrs; + +@ExtendWith(SpringExtension.class) +@ContextConfiguration(classes = { + PlannerService.class, + PlannerTemplateValidationConfig.class, + ClearingCalendarService.class, + PlannerTemplateService.class, + PlannerValidationConfig.class, + ClearingCalendarValidationConfig.class, + ValidationConfig.class, + LauncherService.class, + ErrorResolverConfig.class, + ImdgTestConfig.class, + KafkaTestConfig.class}) +public abstract class AbstractServiceTest { + protected static final MatcherFactory.Matcher PLANNER_ALL_TODAY_MATCHER = usingIgnoringFieldsComparator("created", "updated"); + protected static final long id = currentID.getAndIncrement(); + protected Imdg plannerAllTodayImdg; + protected Imdg plannerTemplateImdg; + protected Imdg clearingCalendarImdg; + protected Imdg plannerImdg; + protected Imdg launcherMap; + protected long newCompanyId = currentID.getAndIncrement(); + protected long updateCompanyId = currentID.getAndIncrement(); + protected long deleteCompanyId = currentID.getAndIncrement(); + protected long testSecurityId = currentID.getAndIncrement(); + + @Captor + protected ArgumentCaptor producerRecord; + @MockBean + protected MockProducer mockProducer; + @Autowired + @Qualifier("hazelcastServiceTest") + protected ImdgProvider imdgProvider; + + protected void init() { + waitAvailableImdgProviderAndAddAdminWithDefaultId(); + this.plannerAllTodayImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_PlannerAllToday, PlannerAllToday.class); + this.plannerTemplateImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_PlannerTemplate, PlannerTemplate.class); + this.clearingCalendarImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingCalendar, ClearingCalendar.class); + this.plannerImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Planner, Planner.class); + this.launcherMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Launcher, Launcher.class); + + TaskDictionary taskDictionary = new TaskDictionary(); + Imdg taskDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_TaskDictionary, TaskDictionary.class); + taskDictionary.setCode(Task.accountBlock.getKey()); + taskDictionary.setId(id); + taskDictionaryImdg.insert(taskDictionary); + + DayStatusDictionary dayStatusDictionary = new DayStatusDictionary(); + dayStatusDictionary.setId(0L); + dayStatusDictionary.setCode(DayStatus.Workday.getKey()); + Imdg dayStatusDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_DayStatusDictionary, DayStatusDictionary.class); + dayStatusDictionaryImdg.insert(dayStatusDictionary); + + TaskStatusDictionary taskStatusDictionary = new TaskStatusDictionary(); + taskStatusDictionary.setCode(Status.Active.getKey()); + taskStatusDictionary.setId(id); + Imdg taskStatusDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_TaskStatusDictionary, TaskStatusDictionary.class); + taskStatusDictionaryImdg.insert(taskStatusDictionary); + + Company company = new Company(); + company.setId(newCompanyId); + company.setWorkflowStatus(WorkflowStatus.Active.getKey()); + Imdg companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); + companyImdg.insert(company); + company.setId(updateCompanyId); + company.setWorkflowStatus(WorkflowStatus.Active.getKey()); + companyImdg.insert(company); + company.setId(deleteCompanyId); + company.setWorkflowStatus(WorkflowStatus.Active.getKey()); + companyImdg.insert(company); + + Security security = new Security(); + security.setId(testSecurityId); + security.setWorkflowStatus(WorkflowStatus.Active.getKey()); + Imdg securityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Security, Security.class); + securityImdg.insert(security); + + clearingCalendarImdg.insert(getClearingCalendar()); + + TestUtils.FutureRecordMetadata future = spy(new TestUtils.FutureRecordMetadata()); + doReturn(future).when(mockProducer).send(producerRecord.capture()); + } + + protected PlannerTemplate getPlannerTemplate(long companyId) { + PlannerTemplate plannerTemplate = new PlannerTemplate(); + plannerTemplate.setId(currentID.getAndIncrement()); + plannerTemplate.setTask(Task.accountBlock.getKey()); + plannerTemplate.setTaskTime(LocalTime.now().plusHours(1).withNano(0)); + plannerTemplate.setTaskStatus(Status.Active.getKey()); + plannerTemplate.setCompanyId(companyId); + plannerTemplate.setSecurityId(testSecurityId); + return plannerTemplate; + } + + protected Planner getPlanner(long companyId) { + Planner planner = new Planner(); + planner.setId(currentID.getAndIncrement()); + planner.setTask(Task.accountBlock.getKey()); + planner.setTaskTime(LocalTime.now().plusHours(1).withNano(0)); + planner.setClearingDate(LocalDate.now()); + planner.setMarket(mkrs.getKey()); + planner.setTaskStatus(Status.Active.getKey()); + planner.setCompanyId(companyId); + planner.setSecurityId(testSecurityId); + return planner; + } + + protected void checkPlannerAllTodayByPlannerTemplate(PlannerTemplate plannerTemplate) { + PlannerAllToday plannerAllToday = PlannerAllTodayBuilder.builder().append(plannerTemplate).build(); + PlannerAllToday plannerAllTodayRes = plannerAllTodayImdg.getSingleObjectBySQL(String.format("companyId = %s", plannerTemplate.getCompanyId())); + plannerAllToday.setId(plannerAllTodayRes.getId()); + PLANNER_ALL_TODAY_MATCHER.assertMatch(plannerAllTodayRes, plannerAllToday); + } + + protected void checkPlannerAllTodayByPlanner(Planner planner) { + PlannerAllToday plannerAllToday = PlannerAllTodayBuilder.builder().append(planner).build(); + PlannerAllToday plannerAllTodayRes = plannerAllTodayImdg.getSingleObjectBySQL(String.format("companyId = %s", planner.getCompanyId())); + plannerAllToday.setId(plannerAllTodayRes.getId()); + PLANNER_ALL_TODAY_MATCHER.assertMatch(plannerAllTodayRes, plannerAllToday); + } + + protected ClearingCalendar getClearingCalendar() { + ClearingCalendar clearingCalendar = new ClearingCalendar(); + clearingCalendar.setId(currentID.getAndIncrement()); + clearingCalendar.setClearingDate(LocalDate.now()); + clearingCalendar.setCompanyId(deleteCompanyId); + clearingCalendar.setDayStatus(DayStatus.Workday.getKey()); + return clearingCalendar; + } +} diff --git a/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/validation/DateNotBeforeRuleTest.java b/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/validation/DateNotBeforeRuleTest.java index 311bf050c..753c5f9c9 100644 --- a/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/validation/DateNotBeforeRuleTest.java +++ b/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/validation/DateNotBeforeRuleTest.java @@ -1,14 +1,13 @@ package ru.specx.clearing.scheduler.validation; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.test.context.junit.jupiter.SpringExtension; import ru.spcex.clearing.platform.messaging.domain.cud.schedule.PlannerNewRequest; import ru.spcex.clearing.scheduler.validation.rules.common.DateNotBeforeRule; import ru.spcex.platform.imdg.validation.ImdgValidationContext; import ru.spcex.platform.utils.enumeration.EnumMessage; import ru.spcex.platform.utils.validation.IValidator; import ru.spcex.platform.utils.validation.ValidatorImpl; +import ru.specx.clearing.scheduler.AbstractServiceTest; import java.time.LocalDate; import java.util.Collection; @@ -17,8 +16,7 @@ import java.util.function.Function; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; -@ExtendWith(SpringExtension.class) -class DateNotBeforeRuleTest { +class DateNotBeforeRuleTest extends AbstractServiceTest { @Test public void dateNotBeforeRuleTest() { diff --git a/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/validation/DictionaryPresentRuleTest.java b/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/validation/DictionaryPresentRuleTest.java index 3cbcf6698..a3efdcfa2 100644 --- a/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/validation/DictionaryPresentRuleTest.java +++ b/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/validation/DictionaryPresentRuleTest.java @@ -1,11 +1,8 @@ package ru.specx.clearing.scheduler.validation; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit.jupiter.SpringExtension; import ru.clearing.platform.dictionary.AbstractDictionary; import ru.clearing.platform.dictionary.DayStatusDictionary; import ru.clearing.platform.dictionary.TaskDictionary; @@ -25,7 +22,7 @@ import ru.spcex.platform.utils.enumeration.EnumMessage; import ru.spcex.platform.utils.enumeration.IEnumKey; import ru.spcex.platform.utils.validation.IValidator; import ru.spcex.platform.utils.validation.ValidatorImpl; -import ru.specx.clearing.scheduler.config.HazelcastServiceTestConfiguration; +import ru.specx.clearing.scheduler.AbstractServiceTest; import java.lang.reflect.InvocationTargetException; import java.util.Collection; @@ -35,10 +32,7 @@ import java.util.function.Function; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; -@ExtendWith(SpringExtension.class) -@ContextConfiguration(classes = { - HazelcastServiceTestConfiguration.class}) -class DictionaryPresentRuleTest { +class DictionaryPresentRuleTest extends AbstractServiceTest { @Autowired @Qualifier("hazelcastServiceTest") private HazelcastService hazelcastServiceTest; @@ -70,12 +64,12 @@ class DictionaryPresentRuleTest { } private void testDictionary(String dictionaryKey, - Class dictionaryClass, - Class recordClass, - String fieldName, - E[] enumValues, - Function getter, - BiConsumer setter) throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException { + Class dictionaryClass, + Class recordClass, + String fieldName, + E[] enumValues, + Function getter, + BiConsumer setter) throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException { Imdg dictionaryImdg = hazelcastServiceTest.getImdg(dictionaryKey, dictionaryClass); long idIdx = 0; for (E enumValue : enumValues) { diff --git a/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/validation/EnumPresentRuleTest.java b/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/validation/EnumPresentRuleTest.java index 8303e0872..1f7b5c658 100644 --- a/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/validation/EnumPresentRuleTest.java +++ b/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/validation/EnumPresentRuleTest.java @@ -1,11 +1,8 @@ package ru.specx.clearing.scheduler.validation; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit.jupiter.SpringExtension; import ru.clearing.platform.dictionary.AbstractDictionary; import ru.spcex.clearing.platform.messaging.domain.cud.schedule.ClearingCalendarNewRequest; import ru.spcex.clearing.platform.messaging.domain.cud.schedule.PlannerNewRequest; @@ -20,7 +17,7 @@ import ru.spcex.platform.utils.enumeration.EnumMessage; import ru.spcex.platform.utils.enumeration.IEnumKey; import ru.spcex.platform.utils.validation.IValidator; import ru.spcex.platform.utils.validation.ValidatorImpl; -import ru.specx.clearing.scheduler.config.HazelcastServiceTestConfiguration; +import ru.specx.clearing.scheduler.AbstractServiceTest; import java.lang.reflect.InvocationTargetException; import java.util.Collection; @@ -31,10 +28,7 @@ import java.util.function.Function; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; -@ExtendWith(SpringExtension.class) -@ContextConfiguration(classes = { - HazelcastServiceTestConfiguration.class}) -class EnumPresentRuleTest { +class EnumPresentRuleTest extends AbstractServiceTest { @Autowired @Qualifier("hazelcastServiceTest") private HazelcastService hazelcastServiceTest; diff --git a/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/validation/FieldRequiredRuleTest.java b/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/validation/FieldRequiredRuleTest.java index 78cbec5d0..351442878 100644 --- a/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/validation/FieldRequiredRuleTest.java +++ b/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/validation/FieldRequiredRuleTest.java @@ -1,14 +1,13 @@ package ru.specx.clearing.scheduler.validation; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.test.context.junit.jupiter.SpringExtension; import ru.spcex.clearing.platform.messaging.domain.cud.schedule.PlannerNewRequest; import ru.spcex.clearing.scheduler.validation.rules.common.FieldRequiredRule; import ru.spcex.platform.imdg.validation.ImdgValidationContext; import ru.spcex.platform.utils.enumeration.EnumMessage; import ru.spcex.platform.utils.validation.IValidator; import ru.spcex.platform.utils.validation.ValidatorImpl; +import ru.specx.clearing.scheduler.AbstractServiceTest; import java.util.Collection; import java.util.function.Function; @@ -16,8 +15,7 @@ import java.util.function.Function; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; -@ExtendWith(SpringExtension.class) -class FieldRequiredRuleTest { +class FieldRequiredRuleTest extends AbstractServiceTest { @Test public void fieldRequiredRuleTest() { diff --git a/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/validation/IdPresentRuleTest.java b/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/validation/IdPresentRuleTest.java index 9bc738c22..97259580c 100644 --- a/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/validation/IdPresentRuleTest.java +++ b/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/validation/IdPresentRuleTest.java @@ -1,11 +1,8 @@ package ru.specx.clearing.scheduler.validation; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; -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.security.Security; import ru.spcex.clearing.imdg.IMDGDistributedNames; @@ -19,7 +16,7 @@ import ru.spcex.platform.imdg.validation.ImdgValidationContext; import ru.spcex.platform.utils.enumeration.EnumMessage; import ru.spcex.platform.utils.validation.IValidator; import ru.spcex.platform.utils.validation.ValidatorImpl; -import ru.specx.clearing.scheduler.config.HazelcastServiceTestConfiguration; +import ru.specx.clearing.scheduler.AbstractServiceTest; import java.lang.reflect.InvocationTargetException; import java.util.Collection; @@ -29,10 +26,7 @@ import java.util.function.Function; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; -@ExtendWith(SpringExtension.class) -@ContextConfiguration(classes = { - HazelcastServiceTestConfiguration.class}) -class IdPresentRuleTest { +class IdPresentRuleTest extends AbstractServiceTest { private final static Long TEST_ID = 777L; @Autowired diff --git a/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/validation/TimeNotBeforeRuleTest.java b/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/validation/TimeNotBeforeRuleTest.java index 32206cda7..aca552382 100644 --- a/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/validation/TimeNotBeforeRuleTest.java +++ b/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/validation/TimeNotBeforeRuleTest.java @@ -1,14 +1,13 @@ package ru.specx.clearing.scheduler.validation; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.test.context.junit.jupiter.SpringExtension; import ru.spcex.clearing.platform.messaging.domain.cud.schedule.PlannerNewRequest; import ru.spcex.clearing.scheduler.validation.rules.common.TimeNotBeforeRule; import ru.spcex.platform.imdg.validation.ImdgValidationContext; import ru.spcex.platform.utils.enumeration.EnumMessage; import ru.spcex.platform.utils.validation.IValidator; import ru.spcex.platform.utils.validation.ValidatorImpl; +import ru.specx.clearing.scheduler.AbstractServiceTest; import java.time.LocalTime; import java.util.Collection; @@ -17,8 +16,7 @@ import java.util.function.Function; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; -@ExtendWith(SpringExtension.class) -class TimeNotBeforeRuleTest { +class TimeNotBeforeRuleTest extends AbstractServiceTest { @Test public void timeNotBeforeRuleTest() {