From f411659ad6e24d285f4c4c26b04ee2b87972845b Mon Sep 17 00:00:00 2001 From: Fabio Formosa Date: Thu, 27 Oct 2022 23:29:28 +0200 Subject: [PATCH] #57 #62 added an integration test to check the mandatory fields in scheduling a simple trigger --- ...impleTriggerCommandDTOToSimpleTrigger.java | 17 ++-- .../api/dto/SimpleTriggerInputDTO.java | 2 +- .../api/dto/TriggerCommandDTO.java | 1 + .../api/services/SimpleTriggerService.java | 6 +- .../api/controllers/utils/TriggerUtils.java | 24 +++--- .../SimpleTriggerServiceIntegrationTest.java | 84 +++++++++++++++++++ .../services/SimpleTriggerServiceTest.java | 2 +- 7 files changed, 112 insertions(+), 24 deletions(-) create mode 100644 quartz-manager-parent/quartz-manager-starter-api/src/test/java/it/fabioformosa/quartzmanager/api/services/SimpleTriggerServiceIntegrationTest.java diff --git a/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/api/converters/SimpleTriggerCommandDTOToSimpleTrigger.java b/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/api/converters/SimpleTriggerCommandDTOToSimpleTrigger.java index a82b632..fe34392 100644 --- a/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/api/converters/SimpleTriggerCommandDTOToSimpleTrigger.java +++ b/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/api/converters/SimpleTriggerCommandDTOToSimpleTrigger.java @@ -14,15 +14,18 @@ public class SimpleTriggerCommandDTOToSimpleTrigger implements Converter triggerTriggerBuilder = TriggerBuilder.newTrigger(); - if(triggerCommandDTO.getSimpleTriggerInputDTO().getStartDate() != null) + if (triggerCommandDTO.getSimpleTriggerInputDTO().getStartDate() != null) triggerTriggerBuilder.startAt(triggerCommandDTO.getSimpleTriggerInputDTO().getStartDate()); - if(triggerCommandDTO.getSimpleTriggerInputDTO().getEndDate() != null) + if (triggerCommandDTO.getSimpleTriggerInputDTO().getEndDate() != null) triggerTriggerBuilder.endAt(triggerCommandDTO.getSimpleTriggerInputDTO().getEndDate()); - SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule() - .withIntervalInMilliseconds(triggerCommandDTO.getSimpleTriggerInputDTO().getRepeatInterval()) - .withRepeatCount(triggerCommandDTO.getSimpleTriggerInputDTO().getRepeatCount()) - .withMisfireHandlingInstructionNextWithRemainingCount(); + + SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule(); + if (triggerCommandDTO.getSimpleTriggerInputDTO().getRepeatInterval() != null) + scheduleBuilder.withIntervalInMilliseconds(triggerCommandDTO.getSimpleTriggerInputDTO().getRepeatInterval()); + + if (triggerCommandDTO.getSimpleTriggerInputDTO().getRepeatCount() != null) + scheduleBuilder.withRepeatCount(triggerCommandDTO.getSimpleTriggerInputDTO().getRepeatCount()); setTheMisfireInstruction(triggerCommandDTO, scheduleBuilder); @@ -35,7 +38,7 @@ public class SimpleTriggerCommandDTOToSimpleTrigger implements Converter jobClass = (Class) Class.forName(triggerCommandDTO.getSimpleTriggerInputDTO().getJobClass()); + public SimpleTriggerDTO scheduleSimpleTrigger(SimpleTriggerCommandDTO simpleTriggerCommandDTO) throws SchedulerException, ClassNotFoundException { + Class jobClass = (Class) Class.forName(simpleTriggerCommandDTO.getSimpleTriggerInputDTO().getJobClass()); JobDetail jobDetail = JobBuilder.newJob() .ofType(jobClass) .storeDurably(false) .build(); - SimpleTrigger newSimpleTrigger = conversionService.convert(triggerCommandDTO, SimpleTrigger.class); + SimpleTrigger newSimpleTrigger = conversionService.convert(simpleTriggerCommandDTO, SimpleTrigger.class); scheduler.scheduleJob(jobDetail, newSimpleTrigger); return conversionService.convert(newSimpleTrigger, SimpleTriggerDTO.class); diff --git a/quartz-manager-parent/quartz-manager-starter-api/src/test/java/it/fabioformosa/quartzmanager/api/controllers/utils/TriggerUtils.java b/quartz-manager-parent/quartz-manager-starter-api/src/test/java/it/fabioformosa/quartzmanager/api/controllers/utils/TriggerUtils.java index 253c405..caea6f0 100644 --- a/quartz-manager-parent/quartz-manager-starter-api/src/test/java/it/fabioformosa/quartzmanager/api/controllers/utils/TriggerUtils.java +++ b/quartz-manager-parent/quartz-manager-starter-api/src/test/java/it/fabioformosa/quartzmanager/api/controllers/utils/TriggerUtils.java @@ -10,8 +10,8 @@ public class TriggerUtils { static public TriggerDTO getTriggerInstance(String triggerName){ return TriggerDTO.builder() .description("sample trigger") - .endTime(DateUtils.getHoursFromNow(2L)) - .finalFireTime(DateUtils.getHoursFromNow(2L)) + .endTime(DateUtils.addHoursToNow(2L)) + .finalFireTime(DateUtils.addHoursToNow(2L)) .jobKeyDTO(JobKeyDTO.builder() .group("defaultJobGroup") .name("sampleJob") @@ -22,9 +22,9 @@ public class TriggerUtils { .name(triggerName) .build()) .misfireInstruction(1) - .nextFireTime(DateUtils.getHoursFromNow(1L)) + .nextFireTime(DateUtils.addHoursToNow(1L)) .priority(1) - .startTime(DateUtils.fromLocaleDateTimeToDate(LocalDateTime.now())) + .startTime(DateUtils.fromLocalDateTimeToDate(LocalDateTime.now())) .build(); } @@ -33,8 +33,8 @@ public class TriggerUtils { .description("simple trigger") .repeatCount(simpleTriggerInputDTO.getRepeatCount()) .repeatInterval(simpleTriggerInputDTO.getRepeatInterval()) - .endTime(DateUtils.getHoursFromNow(2L)) - .finalFireTime(DateUtils.getHoursFromNow(2L)) + .endTime(DateUtils.addHoursToNow(2L)) + .finalFireTime(DateUtils.addHoursToNow(2L)) .jobKeyDTO(JobKeyDTO.builder() .group("defaultJobGroup") .name("sampleJob") @@ -45,9 +45,9 @@ public class TriggerUtils { .name(triggerName) .build()) .misfireInstruction(1) - .nextFireTime(DateUtils.getHoursFromNow(1L)) + .nextFireTime(DateUtils.addHoursToNow(1L)) .priority(1) - .startTime(DateUtils.fromLocaleDateTimeToDate(LocalDateTime.now())) + .startTime(DateUtils.fromLocalDateTimeToDate(LocalDateTime.now())) .build(); } @@ -56,8 +56,8 @@ public class TriggerUtils { .description("simple trigger") .repeatCount(2) .repeatInterval(1000L) - .endTime(DateUtils.getHoursFromNow(2L)) - .finalFireTime(DateUtils.getHoursFromNow(2L)) + .endTime(DateUtils.addHoursToNow(2L)) + .finalFireTime(DateUtils.addHoursToNow(2L)) .jobKeyDTO(JobKeyDTO.builder() .group("defaultJobGroup") .name("sampleJob") @@ -68,9 +68,9 @@ public class TriggerUtils { .name(triggerName) .build()) .misfireInstruction(1) - .nextFireTime(DateUtils.getHoursFromNow(1L)) + .nextFireTime(DateUtils.addHoursToNow(1L)) .priority(1) - .startTime(DateUtils.fromLocaleDateTimeToDate(LocalDateTime.now())) + .startTime(DateUtils.fromLocalDateTimeToDate(LocalDateTime.now())) .build(); } diff --git a/quartz-manager-parent/quartz-manager-starter-api/src/test/java/it/fabioformosa/quartzmanager/api/services/SimpleTriggerServiceIntegrationTest.java b/quartz-manager-parent/quartz-manager-starter-api/src/test/java/it/fabioformosa/quartzmanager/api/services/SimpleTriggerServiceIntegrationTest.java new file mode 100644 index 0000000..d395952 --- /dev/null +++ b/quartz-manager-parent/quartz-manager-starter-api/src/test/java/it/fabioformosa/quartzmanager/api/services/SimpleTriggerServiceIntegrationTest.java @@ -0,0 +1,84 @@ +package it.fabioformosa.quartzmanager.api.services; + +import it.fabioformosa.quartzmanager.api.common.utils.DateUtils; +import it.fabioformosa.quartzmanager.api.dto.MisfireInstruction; +import it.fabioformosa.quartzmanager.api.dto.SimpleTriggerCommandDTO; +import it.fabioformosa.quartzmanager.api.dto.SimpleTriggerDTO; +import it.fabioformosa.quartzmanager.api.dto.SimpleTriggerInputDTO; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; +import org.quartz.SchedulerException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import java.time.Duration; +import java.time.LocalDateTime; +import java.util.Date; + +@SpringBootTest +class SimpleTriggerServiceIntegrationTest { + + @Autowired + private SimpleTriggerService simpleTriggerService; + + @Test + public void givenASimpleTriggerCommandDTOWithAllData_whenANewSimpleTriggerIsScheduled_thenShouldGetATriggertDTO() throws SchedulerException, ClassNotFoundException { + String simpleTriggerTestName = "simpleTriggerTest"; + String jobClass = "it.fabioformosa.quartzmanager.api.jobs.SampleJob"; + Date startDate = new Date(); + Date endDate = DateUtils.addHoursToNow(5); + int repeatCount = 3; + long repeatInterval = 1000L * 60 * 60; + LocalDateTime expectedFinalDateTime = DateUtils.fromDateToLocalDateTime(startDate).plus(Duration.ofHours(3)); + LocalDateTime expectedNextDateTime = DateUtils.fromDateToLocalDateTime(startDate).plus(Duration.ofMinutes(1)); + MisfireInstruction misfireInstructionFireNow = MisfireInstruction.MISFIRE_INSTRUCTION_FIRE_NOW; + + SimpleTriggerCommandDTO simpleTriggerCommand = SimpleTriggerCommandDTO.builder() + .triggerName(simpleTriggerTestName) + .simpleTriggerInputDTO(SimpleTriggerInputDTO.builder() + .startDate(startDate) + .endDate(endDate) + .repeatCount(repeatCount) + .repeatInterval(repeatInterval) + .misfireInstruction(misfireInstructionFireNow) + .jobClass(jobClass) + .build()) + .build(); + SimpleTriggerDTO simpleTriggerDTO = simpleTriggerService.scheduleSimpleTrigger(simpleTriggerCommand); + + Assertions.assertThat(simpleTriggerDTO.getTriggerKeyDTO().getName()).isEqualTo(simpleTriggerTestName); + Assertions.assertThat(simpleTriggerDTO.getStartTime()).isEqualTo(startDate); + Assertions.assertThat(simpleTriggerDTO.getEndTime()).isEqualTo(endDate); + Assertions.assertThat(simpleTriggerDTO.getRepeatCount()).isEqualTo(repeatCount); + Assertions.assertThat(simpleTriggerDTO.getRepeatInterval()).isEqualTo(repeatInterval); + Assertions.assertThat(simpleTriggerDTO.getMisfireInstruction()).isEqualTo(misfireInstructionFireNow.getNum()); + Assertions.assertThat(simpleTriggerDTO.getTimesTriggered()).isEqualTo(0); + Assertions.assertThat(simpleTriggerDTO.getFinalFireTime()).isEqualTo(DateUtils.fromLocalDateTimeToDate(expectedFinalDateTime)); + Assertions.assertThat(simpleTriggerDTO.getNextFireTime()).isEqualTo(DateUtils.fromLocalDateTimeToDate(expectedNextDateTime)); + Assertions.assertThat(simpleTriggerDTO.getJobKeyDTO().getName()).isNotNull(); + } + + @Test + public void givenASimpleTriggerCommandDTOWithMissingOptionalField_whenANewSimpleTriggerIsScheduled_thenShouldGetATriggertDTO() throws SchedulerException, ClassNotFoundException { + String simpleTriggerTestName = "simpleTriggerTest"; + String jobClass = "it.fabioformosa.quartzmanager.api.jobs.SampleJob"; + + SimpleTriggerCommandDTO simpleTriggerCommand = SimpleTriggerCommandDTO.builder() + .triggerName(simpleTriggerTestName) + .simpleTriggerInputDTO(SimpleTriggerInputDTO.builder() + .jobClass(jobClass) + .build()) + .build(); + SimpleTriggerDTO simpleTriggerDTO = simpleTriggerService.scheduleSimpleTrigger(simpleTriggerCommand); + + Assertions.assertThat(simpleTriggerDTO.getTriggerKeyDTO().getName()).isEqualTo(simpleTriggerTestName); + Assertions.assertThat(simpleTriggerDTO.getTimesTriggered()).isEqualTo(0); + Assertions.assertThat(simpleTriggerDTO.getJobKeyDTO().getName()).isNotNull(); + Assertions.assertThat(simpleTriggerDTO.getStartTime()).isNotNull(); + Assertions.assertThat(simpleTriggerDTO.getEndTime()).isNull(); + Assertions.assertThat(simpleTriggerDTO.getFinalFireTime()).isNotNull(); + Assertions.assertThat(simpleTriggerDTO.getRepeatCount()).isEqualTo(0); + Assertions.assertThat(simpleTriggerDTO.getRepeatInterval()).isEqualTo(0); + } + +} diff --git a/quartz-manager-parent/quartz-manager-starter-api/src/test/java/it/fabioformosa/quartzmanager/api/services/SimpleTriggerServiceTest.java b/quartz-manager-parent/quartz-manager-starter-api/src/test/java/it/fabioformosa/quartzmanager/api/services/SimpleTriggerServiceTest.java index 74461a1..dea7667 100644 --- a/quartz-manager-parent/quartz-manager-starter-api/src/test/java/it/fabioformosa/quartzmanager/api/services/SimpleTriggerServiceTest.java +++ b/quartz-manager-parent/quartz-manager-starter-api/src/test/java/it/fabioformosa/quartzmanager/api/services/SimpleTriggerServiceTest.java @@ -51,7 +51,7 @@ class SimpleTriggerServiceTest { .jobClass("it.fabioformosa.quartzmanager.api.jobs.SampleJob") .startDate(new Date()) .repeatInterval(5000L).repeatCount(5) - .endDate(DateUtils.getHoursFromNow(1)) + .endDate(DateUtils.addHoursToNow(1)) .build(); String simpleTriggerName = "simpleTrigger";