package org.activiti.engine.test.bpmn.event.timer; import static org.hamcrest.CoreMatchers.containsString; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; import java.util.Date; import java.util.List; import org.activiti.engine.ActivitiException; import org.activiti.engine.impl.calendar.BusinessCalendar; import org.activiti.engine.impl.test.ResourceActivitiTestCase; import org.activiti.engine.runtime.Job; import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.test.Deployment; /** * testing custom calendar for timer definitions * Created by martin.grofcik */ public class TimerCustomCalendarTest extends ResourceActivitiTestCase { public TimerCustomCalendarTest() { super("org/activiti/engine/test/bpmn/event/timer/TimerCustomCalendarTest.activiti.cfg.xml"); } @Deployment public void testCycleTimer() { List<Job> jobs = this.managementService.createJobQuery().list(); assertThat("One job is scheduled", jobs.size(), is(1)); assertThat("Job must be scheduled by custom business calendar to Date(0)", jobs.get(0).getDuedate(), is(new Date(0))); this.managementService.executeJob(jobs.get(0).getId()); jobs = this.managementService.createJobQuery().list(); assertThat("One job is scheduled (repetition is 2x)", jobs.size(), is(1)); assertThat("Job must be scheduled by custom business calendar to Date(0)", jobs.get(0).getDuedate(), is(new Date(0))); this.managementService.executeJob(jobs.get(0).getId()); jobs = this.managementService.createJobQuery().list(); assertThat("There must be no job.", jobs.isEmpty()); } @Deployment public void testCustomDurationTimerCalendar() { ProcessInstance processInstance = this.runtimeService.startProcessInstanceByKey("testCustomDurationCalendar"); List<Job> jobs = this.managementService.createJobQuery().list(); assertThat("One job is scheduled", jobs.size(), is(1)); assertThat("Job must be scheduled by custom business calendar to Date(0)", jobs.get(0).getDuedate(), is(new Date(0))); this.managementService.executeJob(jobs.get(0).getId()); waitForJobExecutorToProcessAllJobs(10000, 100); this.runtimeService.signal(processInstance.getId()); } @Deployment public void testInvalidDurationTimerCalendar() { try { this.runtimeService.startProcessInstanceByKey("testCustomDurationCalendar"); fail("Activiti exception expected - calendar not found"); } catch (ActivitiException e) { assertThat(e.getMessage(), containsString("INVALID does not exist")); } } @Deployment public void testBoundaryTimer() { this.runtimeService.startProcessInstanceByKey("testBoundaryTimer"); List<Job> jobs = this.managementService.createJobQuery().list(); assertThat("One job is scheduled", jobs.size(), is(1)); assertThat("Job must be scheduled by custom business calendar to Date(0)", jobs.get(0).getDuedate(), is(new Date(0))); this.managementService.executeJob(jobs.get(0).getId()); waitForJobExecutorToProcessAllJobs(10000, 100); } public static class CustomBusinessCalendar implements BusinessCalendar { @Override public Date resolveDuedate(String duedateDescription) { return new Date(0); } @Override public Date resolveDuedate(String duedateDescription, int maxIterations) { return new Date(0); } @Override public Boolean validateDuedate(String duedateDescription, int maxIterations, Date endDate, Date newTimer) { return true; } @Override public Date resolveEndDate(String endDateString) { return new Date(0); } } }