diff --git a/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/config/validation/ClearingCalendarValidationConfig.java b/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/config/validation/ClearingCalendarValidationConfig.java index c16595d10..20728668d 100644 --- a/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/config/validation/ClearingCalendarValidationConfig.java +++ b/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/config/validation/ClearingCalendarValidationConfig.java @@ -58,6 +58,7 @@ public class ClearingCalendarValidationConfig { ImdgValidationContext context = new ImdgValidationContext<>(); context.setValidatedObject(clearingCalendarUpdateRequest); Consumer addImdg = (s) -> context.addImdg(s, imdgForValidation.get(s)); + addImdg.accept(IMDGDistributedNames.Map_ClearingCalendar); addImdg.accept(IMDGDistributedNames.Map_Company); addImdg.accept(IMDGDistributedNames.Map_DayStatusDictionary); return new ValidatorImpl<>(context, @@ -83,10 +84,12 @@ public class ClearingCalendarValidationConfig { } @Bean("clearingCalendarDeleteRequestValidator") - public Function clearingCalendarDeleteRequestValidator() { + public Function clearingCalendarDeleteRequestValidator(Map> imdgForValidation) { return clearingCalendarDeleteRequest -> { ImdgValidationContext context = new ImdgValidationContext<>(); context.setValidatedObject(clearingCalendarDeleteRequest); + Consumer addImdg = (s) -> context.addImdg(s, imdgForValidation.get(s)); + addImdg.accept(IMDGDistributedNames.Map_ClearingCalendar); return new ValidatorImpl<>(context, IdPresentRule.instance("id", CommonDeleteRequest::getId, diff --git a/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/service/ClearingCalendarService.java b/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/service/ClearingCalendarService.java index adbf15094..04a46c4b8 100644 --- a/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/service/ClearingCalendarService.java +++ b/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/service/ClearingCalendarService.java @@ -9,6 +9,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; import ru.clearing.classes.statics.data.scheduler.ClearingCalendar; +import ru.clearing.classes.statics.data.scheduler.Planner; +import ru.clearing.classes.statics.data.scheduler.PlannerAllToday; +import ru.clearing.classes.statics.data.scheduler.PlannerTemplate; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.BaseRequest; import ru.spcex.clearing.platform.messaging.domain.Consts; @@ -17,19 +20,36 @@ import ru.spcex.clearing.platform.messaging.domain.cud.schedule.ClearingCalendar import ru.spcex.clearing.platform.messaging.domain.cud.schedule.ClearingCalendarUpdateRequest; import ru.spcex.clearing.platform.messaging.service.QueueConsumer; import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; +import ru.spcex.clearing.scheduler.PlannerAllTodayBuilder; +import ru.spcex.clearing.util.security.UserRoleVerification; +import ru.spcex.platform.classes.base.SpcexObjectBase; +import ru.spcex.platform.enumeration.DayStatus; +import ru.spcex.platform.enumeration.Status; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.utils.enumeration.IMessageResolver; import ru.spcex.platform.utils.validation.IValidator; +import java.time.DayOfWeek; import java.time.Instant; +import java.time.LocalDate; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.Map; import java.util.function.Function; +import static ru.spcex.clearing.scheduler.ISchedulerChecker.isValidWorkday; + @Service public class ClearingCalendarService extends QueueConsumer implements InitializingBean { private final Logger log = LoggerFactory.getLogger(getClass()); private final Imdg clearingCalendarMap; + private final Imdg plannerTemplateMap; + private final Imdg plannerAllTodayMap; + private final Imdg plannerMap; private final IMessageResolver messageResolver; + private final UserRoleVerification userRoleVerification; private final Function clearingCalendarDeleteRequestValidation; private final Function clearingCalendarNewRequestValidation; private final Function clearingCalendarUpdateRequestValidation; @@ -38,11 +58,16 @@ public class ClearingCalendarService extends QueueConsumer implements Initializi public ClearingCalendarService(Consumer kafkaQueue, Producer kafkaProducer, ImdgProvider imdgProvider, IMessageResolver messageResolver, + @Qualifier("userRoleVerificationBean") UserRoleVerification userRoleVerification, @Qualifier("clearingCalendarDeleteRequestValidator") Function clearingCalendarDeleteRequestValidator, @Qualifier("clearingCalendarNewRequestValidator") Function clearingCalendarNewRequestValidator, @Qualifier("clearingCalendarUpdateRequestValidator") Function clearingCalendarUpdateRequestValidator) { super(kafkaQueue, kafkaProducer); this.clearingCalendarMap = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingCalendar, ClearingCalendar.class); + this.plannerTemplateMap = imdgProvider.getImdg(IMDGDistributedNames.Map_PlannerTemplate, PlannerTemplate.class); + this.plannerMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Planner, Planner.class); + this.plannerAllTodayMap = imdgProvider.getImdg(IMDGDistributedNames.Map_PlannerAllToday, PlannerAllToday.class); + this.userRoleVerification = userRoleVerification; this.clearingCalendarDeleteRequestValidation = clearingCalendarDeleteRequestValidator; this.clearingCalendarNewRequestValidation = clearingCalendarNewRequestValidator; this.clearingCalendarUpdateRequestValidation = clearingCalendarUpdateRequestValidator; @@ -66,24 +91,35 @@ public class ClearingCalendarService extends QueueConsumer implements Initializi private RequestInfoUpdate newClearingCalendar(BaseRequest userRequest) { ClearingCalendarNewRequest req = userRequest.getRequestPayload(); log.debug("ClearingCalendarNewRequest received"); - RequestInfoUpdate requestInfoUpdate = validate(userRequest, clearingCalendarNewRequestValidation, messageResolver); + + RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest); if (requestInfoUpdate != null) return requestInfoUpdate; + requestInfoUpdate = validate(userRequest, clearingCalendarNewRequestValidation, messageResolver); + if (requestInfoUpdate != null) return requestInfoUpdate; + ClearingCalendar clearingCalendar = new ClearingCalendar(); Instant created = Instant.now(); clearingCalendar.setCreated(created); + clearingCalendar.setUpdated(created); clearingCalendar.setClearingDate(req.getClearingDate()); clearingCalendar.setCompanyId(req.getCompanyId()); clearingCalendar.setDayStatus(req.getDayStatus()); clearingCalendarMap.insert(clearingCalendar); log.debug("successfully processed, new id {}", clearingCalendar.getId()); + //если clearingCalendar.getClearingDate() сегодняшний день необходимо проверить/добавить plannerTemplate + updateFromPlannerAllTodayMap(clearingCalendar); return null; } private RequestInfoUpdate updateClearingCalendar(BaseRequest userRequest) { ClearingCalendarUpdateRequest req = userRequest.getRequestPayload(); log.debug("ClearingCalendarUpdateRequest received"); - RequestInfoUpdate requestInfoUpdate = validate(userRequest, clearingCalendarUpdateRequestValidation, messageResolver); + + RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest); if (requestInfoUpdate != null) return requestInfoUpdate; + requestInfoUpdate = validate(userRequest, clearingCalendarUpdateRequestValidation, messageResolver); + if (requestInfoUpdate != null) return requestInfoUpdate; + Instant updated = Instant.now(); ClearingCalendar clearingCalendar = clearingCalendarMap.getSingleObjectByID(req.getId()); clearingCalendar.setClearingDate(req.getClearingDate()); @@ -92,16 +128,63 @@ public class ClearingCalendarService extends QueueConsumer implements Initializi clearingCalendar.setUpdated(updated); clearingCalendarMap.update(clearingCalendar); log.debug("successfully processed, new id {}", clearingCalendar.getId()); + //если clearingCalendar.getClearingDate() сегодняшний день необходимо проверить/добавить plannerTemplate + updateFromPlannerAllTodayMap(clearingCalendar); return null; } private RequestInfoUpdate deleteClearingCalendar(BaseRequest userRequest) { CommonDeleteRequest req = userRequest.getRequestPayload(); - RequestInfoUpdate requestInfoUpdate = validate(userRequest, clearingCalendarDeleteRequestValidation, messageResolver); + + RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest); if (requestInfoUpdate != null) return requestInfoUpdate; + requestInfoUpdate = validate(userRequest, clearingCalendarDeleteRequestValidation, messageResolver); + if (requestInfoUpdate != null) return requestInfoUpdate; + log.debug("CommonDeleteRequest received id = {}", req.getId()); ClearingCalendar clearingCalendar = clearingCalendarMap.getSingleObjectByID(req.getId()); + clearingCalendarMap.delete(clearingCalendar); + deleteFromPlannerAllTodayMap(); return null; } + + private void updateFromPlannerAllTodayMap(ClearingCalendar clearingCalendar) { + LocalDate currentDate = LocalDate.now(); + if (clearingCalendar.getClearingDate() == null || !clearingCalendar.getClearingDate().equals(currentDate)) + return; + boolean isWeekend = Arrays.asList(DayOfWeek.SATURDAY, DayOfWeek.SUNDAY).contains(currentDate.getDayOfWeek()); + if (isValidWorkday(clearingCalendar, isWeekend)) { + for (PlannerTemplate plannerTemplate : plannerTemplateMap.getAllValues()) { + PlannerAllToday plannerAllToday = plannerAllTodayMap.getSingleObjectBySQL(String.format("parentId = %s", plannerTemplate.getId())); + if (plannerAllToday == null) + plannerAllTodayMap.insert(PlannerAllTodayBuilder.builder().append(plannerTemplate).build()); + } + } + } + + public void deleteFromPlannerAllTodayMap() { + LocalDate currentDate = LocalDate.now(); + boolean isWeekend = Arrays.asList(DayOfWeek.SATURDAY, DayOfWeek.SUNDAY).contains(currentDate.getDayOfWeek()); + //проверим есть ли другие записи clearingCalendar с таким же clearingDate, если они актуальные ничего не удаляем + Collection clearingCalendars = clearingCalendarMap.getCollectionObjectsByFieldValues(Map.of("dayStatus", DayStatus.Workday.getKey(), + "clearingDate", currentDate)); + if (clearingCalendars != null && !clearingCalendars.isEmpty()) { + for (ClearingCalendar calendar : clearingCalendars) { + //если будет хоть один валидные ClearingCalendar на сегодня на основании которого(и plannerTemplate -ов) могли быть созданы PlannerAllToday + //ничего проверять\удалять дальше не будем + if (isValidWorkday(calendar, isWeekend)) return; + } + } + //удалим все PlannerAllToday созданные на основании plannerTemplate кроме созданных на основании planner + List plannerIds = plannerMap.getCollectionObjectsByFieldValues(Map.of("taskStatus", Status.Active.getKey(), + "clearingDate", currentDate)).stream() + .mapToLong(SpcexObjectBase::getId) + .boxed().toList(); + + Collection values = plannerAllTodayMap.getAllValues().stream() + .filter(plannerAllToday -> !plannerIds.contains(plannerAllToday.getParentId())).toList(); + + values.forEach(plannerAllTodayMap::delete); + } } diff --git a/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/service/ClearingCalendarServiceTest.java b/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/service/ClearingCalendarServiceTest.java index 258f6e1a3..df32644e6 100644 --- a/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/service/ClearingCalendarServiceTest.java +++ b/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/service/ClearingCalendarServiceTest.java @@ -1,192 +1,198 @@ package ru.specx.clearing.scheduler.service; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.hazelcast.core.IMap; -import com.hazelcast.map.listener.EntryRemovedListener; -import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.clients.consumer.MockConsumer; -import org.apache.kafka.clients.consumer.OffsetResetStrategy; -import org.apache.kafka.clients.producer.MockProducer; -import org.apache.kafka.common.TopicPartition; -import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; 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.profile.Contact; import ru.clearing.classes.statics.data.scheduler.ClearingCalendar; -import ru.clearing.platform.dictionary.DayStatusDictionary; -import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.platform.messaging.domain.ActionType; +import ru.clearing.classes.statics.data.scheduler.Planner; +import ru.clearing.classes.statics.data.scheduler.PlannerAllToday; +import ru.clearing.classes.statics.data.scheduler.PlannerTemplate; import ru.spcex.clearing.platform.messaging.domain.BaseRequest; 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.schedule.ClearingCalendarNewRequest; import ru.spcex.clearing.platform.messaging.domain.cud.schedule.ClearingCalendarUpdateRequest; -import ru.spcex.clearing.scheduler.config.validation.ClearingCalendarValidationConfig; -import ru.spcex.clearing.scheduler.config.validation.ValidationConfig; +import ru.spcex.clearing.scheduler.PlannerAllTodayBuilder; import ru.spcex.clearing.scheduler.service.ClearingCalendarService; +import ru.spcex.clearing.test.MatcherFactory; import ru.spcex.platform.enumeration.DayStatus; -import ru.spcex.platform.enumeration.WorkflowStatus; -import ru.spcex.platform.imdg.api.Imdg; -import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService; -import ru.spcex.platform.utils.enumeration.IMessageResolver; -import ru.spcex.platform.utils.validation.IValidator; -import ru.specx.clearing.scheduler.config.HazelcastServiceTestConfiguration; +import ru.spcex.platform.enumeration.Status; +import ru.specx.clearing.scheduler.AbstractServiceTest; -import java.time.Instant; +import javax.annotation.PostConstruct; import java.time.LocalDate; -import java.util.Collections; -import java.util.HashMap; -import java.util.function.Function; -@ExtendWith(SpringExtension.class) -@ContextConfiguration(classes = { - HazelcastServiceTestConfiguration.class, - ValidationConfig.class, - ClearingCalendarValidationConfig.class -}) -class ClearingCalendarServiceTest { +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; +import static ru.spcex.clearing.test.MatcherFactory.usingIgnoringFieldsComparator; +import static ru.spcex.clearing.test.TestUtils.*; +import static ru.spcex.clearing.test.config.ImdgTestConfig.currentID; +class ClearingCalendarServiceTest extends AbstractServiceTest { + protected static final MatcherFactory.Matcher CLEARING_CALENDAR_MATCHER = usingIgnoringFieldsComparator("created", "updated"); private static final int PARTITION = 0; private static final String TOPIC_CLEARING_CALENDAR_NEW = Consts.DESTINATION_CLEARING_CALENDAR_NEW; - private static final Long ID = 0L; + private static final String TOPIC_CLEARING_CALENDAR_UPDATE = Consts.DESTINATION_CLEARING_CALENDAR_UPDATE; + private static final String TOPIC_CLEARING_CALENDAR_DELETE = Consts.DESTINATION_CLEARING_CALENDAR_DELETE; + private static final Long ID = currentID.getAndIncrement(); @Autowired - @Qualifier("hazelcastServiceTest") - private HazelcastService hazelcastServiceTest; - private MockConsumer mockConsumer; - private MockProducer mockProducer; + ClearingCalendarService clearingCalendarService; - @Autowired - private IMessageResolver messageResolver; - - @Autowired - private Function clearingCalendarDeleteRequestValidation; - - @Autowired - private Function clearingCalendarNewRequestValidation; - - @Autowired - private Function clearingCalendarUpdateRequestValidation; + @PostConstruct + public void init() { + super.init(); + } @BeforeEach - void setUp() { - mockConsumer = new MockConsumer<>(OffsetResetStrategy.EARLIEST); - mockProducer = new MockProducer<>(); + public void prepare() { + clearAllInImdg(plannerTemplateImdg); + clearAllInImdg(plannerAllTodayImdg); } /** - * {@link ClearingCalendarService#newTradingCalendar(BaseRequest)}(BaseRequest)}
+ * {@link ClearingCalendarService#newClearingCalendar(BaseRequest)}(BaseRequest)}
* Тест проверяет создание сущности {@link ClearingCalendar} в Hazelcast при передаче из Apache Kafka.
* Входной запрос {@link ClearingCalendarNewRequest}:
*/ @Test - public void newClearingCalendarInQueue() throws InterruptedException { - // Prepare test objects - hazelcastServiceTest.waitAvailable(); - Company company = new Company(); - company.setId(0L); - company.setWorkflowStatus(WorkflowStatus.Active.getKey()); - Imdg companyImdg = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_Company, Company.class); - companyImdg.insert(company); - - DayStatus dayStatus = DayStatus.Workday; - DayStatusDictionary dayStatusDictionary = new DayStatusDictionary(); - dayStatusDictionary.setId(0L); - dayStatusDictionary.setCode(dayStatus.getKey()); - Imdg dayStatusDictionaryImdg = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_DayStatusDictionary, DayStatusDictionary.class); - dayStatusDictionaryImdg.insert(dayStatusDictionary); - + public void newClearingCalendar() { //ARRANGE ClearingCalendar clearingCalendar = new ClearingCalendar(); - Instant created = Instant.now(); - clearingCalendar.setCreated(created); - clearingCalendar.setClearingDate(LocalDate.now().plusDays(1)); - clearingCalendar.setCompanyId(0L); + clearingCalendar.setClearingDate(LocalDate.now()); + clearingCalendar.setCompanyId(newCompanyId); clearingCalendar.setDayStatus(DayStatus.Workday.getKey()); + PlannerTemplate plannerTemplate = getPlannerTemplate(newCompanyId); + plannerTemplateImdg.insert(plannerTemplate); ClearingCalendarNewRequest clearingCalendarNewRequest = new ClearingCalendarNewRequest(); clearingCalendarNewRequest.setClearingDate(clearingCalendar.getClearingDate()); clearingCalendarNewRequest.setCompanyId(clearingCalendar.getCompanyId()); clearingCalendarNewRequest.setDayStatus(clearingCalendar.getDayStatus()); - BaseRequest baseNewRequest = new BaseRequest<>(); - baseNewRequest.setRequestPayload(clearingCalendarNewRequest); - baseNewRequest.setId(ID); - baseNewRequest.setActionType(ActionType.NEW); - String jsonBaseForRequest; - ObjectMapper objectMapper = new ObjectMapper(); - try { - jsonBaseForRequest = objectMapper.writeValueAsString(baseNewRequest); - } catch (JsonProcessingException e) { - throw new RuntimeException(e); - } + //ACT + String jsonString = getJsonStringForNew(clearingCalendarNewRequest, ID); + addRecordToKafka((MockConsumer) clearingCalendarService.getConsumer(), TOPIC_CLEARING_CALENDAR_NEW, PARTITION, 0, jsonString); + + //ASSERT + waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord); + + ClearingCalendar clearingCalendarRes = clearingCalendarImdg.getSingleObjectBySQL(String.format("companyId = %s", clearingCalendar.getCompanyId())); + clearingCalendar.setId(clearingCalendarRes.getId()); + CLEARING_CALENDAR_MATCHER.assertMatch(clearingCalendarRes, clearingCalendar); + checkPlannerAllTodayByPlannerTemplate(plannerTemplate); + } + + /** + * {@link ClearingCalendarService#updateClearingCalendar(BaseRequest)}(BaseRequest)}
+ * Тест проверяет создание сущности {@link ClearingCalendar} в Hazelcast при передаче из Apache Kafka.
+ * Входной запрос {@link ClearingCalendarUpdateRequest}:
+ */ + @Test + public void updateClearingCalendar() { + //ARRANGE + ClearingCalendar clearingCalendar = new ClearingCalendar(); + clearingCalendar.setId(currentID.getAndIncrement()); + clearingCalendar.setClearingDate(LocalDate.now()); + clearingCalendar.setCompanyId(newCompanyId); + clearingCalendar.setDayStatus(DayStatus.Workday.getKey()); + clearingCalendarImdg.insert(clearingCalendar); + clearingCalendar.setCompanyId(updateCompanyId); + + PlannerTemplate plannerTemplate = getPlannerTemplate(newCompanyId); + plannerTemplateImdg.insert(plannerTemplate); + + ClearingCalendarUpdateRequest clearingCalendarNewRequest = new ClearingCalendarUpdateRequest(); + clearingCalendarNewRequest.setId(clearingCalendar.getId()); + clearingCalendarNewRequest.setClearingDate(clearingCalendar.getClearingDate()); + clearingCalendarNewRequest.setCompanyId(clearingCalendar.getCompanyId()); + clearingCalendarNewRequest.setDayStatus(clearingCalendar.getDayStatus()); //ACT - //service set up - ClearingCalendarService clearingCalendarService = new ClearingCalendarService(mockConsumer, - mockProducer, - hazelcastServiceTest, - messageResolver, - clearingCalendarDeleteRequestValidation, - clearingCalendarNewRequestValidation, - clearingCalendarUpdateRequestValidation); + String jsonString = getJsonStringForUpdate(clearingCalendarNewRequest, ID); + addRecordToKafka((MockConsumer) clearingCalendarService.getConsumer(), TOPIC_CLEARING_CALENDAR_UPDATE, PARTITION, 0, jsonString); - //callbacks set up - clearingCalendarService.afterPropertiesSet(); - - BaseRequest baseRequest = new BaseRequest<>(); - baseRequest.setId(1L); - baseRequest.setActionType(ActionType.NEW); - ClearingCalendarNewRequest newRequest = new ClearingCalendarNewRequest(); - baseRequest.setRequestPayload(newRequest); - - IMap iMap = hazelcastServiceTest.getHazelcast().getMap(IMDGDistributedNames.Map_ClearingCalendar); - //KAFKA - HashMap startOffsetsUpdating = new HashMap<>(); - TopicPartition topic = new TopicPartition(TOPIC_CLEARING_CALENDAR_NEW, PARTITION); - startOffsetsUpdating.put(topic, 0L); - mockConsumer.updateBeginningOffsets(startOffsetsUpdating); - - mockConsumer.schedulePollTask(() -> { - mockConsumer.rebalance(Collections.singletonList(new TopicPartition(TOPIC_CLEARING_CALENDAR_NEW, PARTITION))); - mockConsumer.addRecord(new ConsumerRecord<>(TOPIC_CLEARING_CALENDAR_NEW, PARTITION, 0, "key", jsonBaseForRequest)); - }); - - //waiting for hazelcast map item removes - Object waiter = new Object(); - String listenerID = iMap.addEntryListener((EntryRemovedListener) entryEvent -> { - System.out.println("Checking If pushed.."); - - try { - waiter.wait(100); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - synchronized (waiter) { - waiter.notify(); - } - }, false); - - synchronized (waiter) { - waiter.wait(100); - } - ClearingCalendar clearingCalendarRes = iMap.get(iMap.keySet().stream().findFirst().get()); //ASSERT - Assertions.assertEquals(1, iMap.size()); + waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord); - Assertions.assertNotNull(clearingCalendarRes.getCreated()); - Assertions.assertEquals(clearingCalendar.getClearingDate(), clearingCalendarRes.getClearingDate()); - Assertions.assertEquals(clearingCalendar.getCompanyId(), clearingCalendarRes.getCompanyId()); - Assertions.assertEquals(clearingCalendar.getDayStatus(), clearingCalendarRes.getDayStatus()); + ClearingCalendar clearingCalendarRes = clearingCalendarImdg.getSingleObjectBySQL(String.format("companyId = %s", clearingCalendar.getCompanyId())); + clearingCalendar.setId(clearingCalendarRes.getId()); + CLEARING_CALENDAR_MATCHER.assertMatch(clearingCalendarRes, clearingCalendar); + checkPlannerAllTodayByPlannerTemplate(plannerTemplate); + } - //preparing hazelcastImdgProvider for next test - iMap.removeEntryListener(listenerID); + + /** + * {@link ClearingCalendarService#deleteClearingCalendar(BaseRequest)}(BaseRequest)}
+ * Тест проверяет удаление сущности {@link ru.clearing.classes.statics.data.scheduler.ClearingCalendar} в Hazelcast при передаче из Apache Kafka.
+ * Входной запрос {@link CommonDeleteRequest}:
+ */ + @Test + public void deleteClearingCalendar() { + //ARRANGE + clearAllInImdg(clearingCalendarImdg); + ClearingCalendar clearingCalendar = getClearingCalendar(); + clearingCalendarImdg.insert(clearingCalendar); + + PlannerTemplate plannerTemplate = getPlannerTemplate(newCompanyId); + long id = clearingCalendar.getId(); + + plannerTemplate.setCompanyId(deleteCompanyId); + plannerAllTodayImdg.insert(PlannerAllTodayBuilder.builder().append(plannerTemplate).build()); + + CommonDeleteRequest commonDeleteRequest = new CommonDeleteRequest(); + commonDeleteRequest.setId(id); + + //ACT + String jsonString = getJsonStringForDelete(commonDeleteRequest, id); + addRecordToKafka((MockConsumer) clearingCalendarService.getConsumer(), TOPIC_CLEARING_CALENDAR_DELETE, PARTITION, 0, jsonString); + + //ASSERT + waitingWhenAddedRecordAndCheckIt(id, mockProducer, producerRecord); + + ClearingCalendar plannerTemplateRes = clearingCalendarImdg.getSingleObjectBySQL(String.format("companyId = %s", clearingCalendar.getCompanyId())); + assertNull(plannerTemplateRes); + PlannerAllToday plannerAllTodayRes = plannerAllTodayImdg.getSingleObjectBySQL(String.format("companyId = %s", plannerTemplate.getCompanyId())); + assertNull(plannerAllTodayRes); + + //добавим в clearingCalendarImdg валидный clearingCalendar на случай если тесты plannerTemplate еще не отработали + clearingCalendarImdg.insert(clearingCalendar); + } + + /** + * {@link ClearingCalendarService#deleteFromPlannerAllTodayMap()}}
+ * Тест проверяет удаление сущности {@link ru.clearing.classes.statics.data.scheduler.PlannerAllToday} в Hazelcast.
+ */ + @Test + public void deleteFromPlannerAllTodayMap() { + //проверка удаления PlannerAllToday + Planner planner = getPlanner(newCompanyId); + planner.setId(12L); + planner.setTaskStatus(Status.Active.getKey()); + planner.setCompanyId(newCompanyId); + planner.setClearingDate(LocalDate.now()); + plannerImdg.insert(planner); + plannerAllTodayImdg.insert(PlannerAllTodayBuilder.builder().append(planner).build()); + PlannerTemplate plannerTemplate = new PlannerTemplate(); + plannerTemplate.setId(13L); + plannerTemplate.setCompanyId(updateCompanyId); + plannerAllTodayImdg.insert(PlannerAllTodayBuilder.builder().append(plannerTemplate).build()); + + //ни чего не должно быть удалено ест валидный clearingCalendar + clearingCalendarService.deleteFromPlannerAllTodayMap(); + assertEquals(2, plannerAllTodayImdg.getAllValues().size()); + checkPlannerAllTodayByPlanner(planner); + checkPlannerAllTodayByPlannerTemplate(plannerTemplate); + + //сейчас удалятся только созданные на основании plannerTemplate + clearAllInImdg(clearingCalendarImdg); + clearingCalendarService.deleteFromPlannerAllTodayMap(); + + checkPlannerAllTodayByPlanner(planner); + assertEquals(1, plannerAllTodayImdg.getAllValues().size()); + + //добавим в clearingCalendarImdg валидный clearingCalendar на случай если тесты plannerTemplate еще не отработали + clearingCalendarImdg.insert(getClearingCalendar()); } } \ No newline at end of file