#57 #62 added an integration test to check the mandatory fields in scheduling a simple trigger

This commit is contained in:
Fabio Formosa
2022-10-27 23:29:28 +02:00
parent 0c33eda68c
commit f411659ad6
7 changed files with 112 additions and 24 deletions

View File

@@ -14,15 +14,18 @@ public class SimpleTriggerCommandDTOToSimpleTrigger implements Converter<SimpleT
@Override
public SimpleTrigger convert(SimpleTriggerCommandDTO triggerCommandDTO) {
TriggerBuilder<Trigger> 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<SimpleT
}
private static void setTheMisfireInstruction(SimpleTriggerCommandDTO triggerCommandDTO, SimpleScheduleBuilder scheduleBuilder) {
switch (triggerCommandDTO.getSimpleTriggerInputDTO().getMisfireInstruction()){
switch (triggerCommandDTO.getSimpleTriggerInputDTO().getMisfireInstruction()) {
case MISFIRE_INSTRUCTION_FIRE_NOW:
scheduleBuilder.withMisfireHandlingInstructionFireNow();
break;

View File

@@ -17,5 +17,5 @@ public class SimpleTriggerInputDTO extends TriggerCommandDTO {
private Integer repeatCount;
@NotNull
Long repeatInterval;
private Long repeatInterval;
}

View File

@@ -24,6 +24,7 @@ public class TriggerCommandDTO {
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
private Date endDate;
@Builder.Default
private MisfireInstruction misfireInstruction = MisfireInstruction.MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_REMAINING_COUNT;
}

View File

@@ -21,14 +21,14 @@ public class SimpleTriggerService extends AbstractSchedulerService {
return conversionService.convert(trigger, SimpleTriggerDTO.class);
}
public SimpleTriggerDTO scheduleSimpleTrigger(SimpleTriggerCommandDTO triggerCommandDTO) throws SchedulerException, ClassNotFoundException {
Class<? extends Job> jobClass = (Class<? extends Job>) Class.forName(triggerCommandDTO.getSimpleTriggerInputDTO().getJobClass());
public SimpleTriggerDTO scheduleSimpleTrigger(SimpleTriggerCommandDTO simpleTriggerCommandDTO) throws SchedulerException, ClassNotFoundException {
Class<? extends Job> jobClass = (Class<? extends Job>) 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);

View File

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

View File

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

View File

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