@Test public void maxResultsParameterWorks() { // given BpmnModelInstance simpleDefinition = Bpmn.createExecutableProcess("process") .startEvent("startEvent") .serviceTask() .camundaExpression("${true}") .serviceTask() .camundaExpression("${true}") .serviceTask() .camundaExpression("${true}") .serviceTask() .camundaExpression("${true}") .endEvent("endEvent") .done(); testHelper.deploy(simpleDefinition); engineRule.getRuntimeService().startProcessInstanceByKey("process"); // when List<HistoricActivityInstance> completedHistoricActivityInstances = optimizeService.getCompletedHistoricActivityInstances(pastDate(), null, 3); // then assertThat(completedHistoricActivityInstances.size(), is(3)); }
protected BpmnModelInstance createProcessWithServiceTask(String key) { return Bpmn.createExecutableProcess(key) .startEvent() .serviceTask() .camundaExpression("${true}") .endEvent() .done(); }
protected BpmnModelInstance createProcessWithServiceTask(String key) { return Bpmn.createExecutableProcess(key) .startEvent() .serviceTask() .camundaExpression("${true}") .endEvent() .done(); }
protected BpmnModelInstance createProcessWithServiceTask(String key) { return Bpmn.createExecutableProcess(key) .startEvent() .serviceTask() .camundaExpression("${true}") .endEvent() .done(); }
public void testPropagateTenantIdToFailedStartTimerIncident() { deploymentForTenant(TENANT_ID, Bpmn.createExecutableProcess(PROCESS_DEFINITION_KEY) .startEvent() .timerWithDuration("PT1M") .serviceTask() .camundaExpression("${failing}") .endEvent() .done()); executeAvailableJobs(); Incident incident = runtimeService.createIncidentQuery().singleResult(); assertThat(incident, is(notNullValue())); // inherit the tenant id from job assertThat(incident.getTenantId(), is(TENANT_ID)); }
public void testPropagateTenantIdToFailedJobIncident() { deploymentForTenant(TENANT_ID, Bpmn.createExecutableProcess(PROCESS_DEFINITION_KEY) .startEvent() .serviceTask() .camundaExpression("${failing}") .camundaAsyncBefore() .endEvent() .done()); startProcessInstance(PROCESS_DEFINITION_KEY); executeAvailableJobs(); Incident incident = runtimeService.createIncidentQuery().singleResult(); assertThat(incident, is(notNullValue())); // inherit the tenant id from execution assertThat(incident.getTenantId(), is(TENANT_ID)); }
@Test public void failedJobRetryTimeCycle() { testRule.deployForTenant(TENANT_ONE, Bpmn.createExecutableProcess("failingProcess") .startEvent() .timerWithDuration("PT1M") .camundaFailedJobRetryTimeCycle("R5/PT1M") .serviceTask() .camundaExpression("${failing}") .endEvent() .done()); testRule.deployForTenant(TENANT_TWO, Bpmn.createExecutableProcess("failingProcess") .startEvent() .timerWithDuration("PT1M") .camundaFailedJobRetryTimeCycle("R4/PT1M") .serviceTask() .camundaExpression("${failing}") .endEvent() .done()); List<Job> jobs = managementService.createJobQuery().timers().list(); executeFailingJobs(jobs); Job jobTenantOne = managementService.createJobQuery().tenantIdIn(TENANT_ONE).singleResult(); Job jobTenantTwo = managementService.createJobQuery().tenantIdIn(TENANT_TWO).singleResult(); assertThat(jobTenantOne.getRetries(), is(4)); assertThat(jobTenantTwo.getRetries(), is(3)); }
@Test public void testCancelWithoutFlag2() { // given this.instance = Bpmn.createExecutableProcess("process1") .startEvent("start") .serviceTask("ser").camundaExpression("${true}") .userTask("user") .endEvent("end") .done(); ProcessDefinition processDefinition = testRule.deployAndGetDefinition(instance); List<String> processInstanceIds = helper.startInstances("process1", 1); // when runtimeService.createModification(processDefinition.getId()) .startBeforeActivity("ser") .cancelAllForActivity("user", false) .processInstanceIds(processInstanceIds) .execute(); // then assertEquals(0, runtimeService.createExecutionQuery().list().size()); }
@Test public void testCancelWithoutFlag() { // given this.instance = Bpmn.createExecutableProcess("process1") .startEvent("start") .serviceTask("ser").camundaExpression("${true}") .userTask("user") .endEvent("end") .done(); ProcessDefinition processDefinition = testRule.deployAndGetDefinition(instance); List<String> processInstanceIds = helper.startInstances("process1", 1); // when runtimeService.createModification(processDefinition.getId()) .startBeforeActivity("ser") .cancelAllForActivity("user") .processInstanceIds(processInstanceIds) .execute(); // then assertEquals(0, runtimeService.createExecutionQuery().list().size()); }
@RequiredHistoryLevel(ProcessEngineConfiguration.HISTORY_FULL) public void testImplicitVariableUpdateAndScopeDestroyedInOneTransaction() { deployment(Bpmn.createExecutableProcess("process1") .startEvent("start") .serviceTask("task1").camundaExpression("${var.setValue(\"newValue\")}") .endEvent("end") .done()); processEngine.getRuntimeService().startProcessInstanceByKey("process1", Variables.createVariables().putValue("var", new CustomVar("initialValue"))); final HistoricVariableInstance historicVariableInstance = processEngine.getHistoryService().createHistoricVariableInstanceQuery().list().get(0); CustomVar var = (CustomVar) historicVariableInstance.getTypedValue().getValue(); assertEquals("newValue", var.getValue()); final List<HistoricDetail> historicDetails = processEngine.getHistoryService().createHistoricDetailQuery().orderPartiallyByOccurrence().desc().list(); HistoricDetail historicDetail = historicDetails.get(0); final CustomVar typedValue = (CustomVar) ((HistoricVariableUpdate) historicDetail).getTypedValue().getValue(); assertEquals("newValue", typedValue.getValue()); }
@Test public void testNonInterruptingSetVariableInExpression() { final BpmnModelInstance modelInstance = Bpmn.createExecutableProcess(CONDITIONAL_EVENT_PROCESS_KEY) .startEvent().userTask().name(TASK_BEFORE_CONDITION) .serviceTask(TASK_WITH_CONDITION_ID) .camundaExpression("${execution.setVariable(\"variable\", 1)}") .userTask().name(TASK_AFTER_SERVICE_TASK) .endEvent().done(); deployConditionalEventSubProcess(modelInstance, CONDITIONAL_EVENT_PROCESS_KEY, false); // given ProcessInstance procInst = runtimeService.startProcessInstanceByKey(CONDITIONAL_EVENT_PROCESS_KEY); TaskQuery taskQuery = taskService.createTaskQuery().processInstanceId(procInst.getId()); Task task = taskQuery.singleResult(); assertNotNull(task); assertEquals(TASK_BEFORE_CONDITION, task.getName()); //when task before service task is completed taskService.complete(task.getId()); //then service task with expression is called and variable is set //-> non interrupting conditional event is triggered tasksAfterVariableIsSet = taskQuery.list(); assertEquals(2, tasksAfterVariableIsSet.size()); assertEquals(1, conditionEventSubscriptionQuery.list().size()); }
@Test public void testCancelWithoutFlag() { // given this.instance = Bpmn.createExecutableProcess("process1") .startEvent("start") .serviceTask("ser").camundaExpression("${true}") .userTask("user") .endEvent("end") .done(); ProcessDefinition processDefinition = testRule.deployAndGetDefinition(instance); List<String> processInstanceIds = helper.startInstances("process1", 1); // when Batch batch = runtimeService.createModification(processDefinition.getId()) .startBeforeActivity("ser") .cancelAllForActivity("user") .processInstanceIds(processInstanceIds) .executeAsync(); helper.executeSeedJob(batch); helper.executeJobs(batch); // then assertEquals(0, runtimeService.createExecutionQuery().list().size()); }
@Test public void testCancelWithoutFlag2() { // given this.instance = Bpmn.createExecutableProcess("process1") .startEvent("start") .serviceTask("ser").camundaExpression("${true}") .userTask("user") .endEvent("end") .done(); ProcessDefinition processDefinition = testRule.deployAndGetDefinition(instance); List<String> processInstanceIds = helper.startInstances("process1", 1); // when Batch batch = runtimeService.createModification(processDefinition.getId()) .startBeforeActivity("ser") .cancelAllForActivity("user", false) .processInstanceIds(processInstanceIds) .executeAsync(); helper.executeSeedJob(batch); helper.executeJobs(batch); // then assertEquals(0, runtimeService.createExecutionQuery().list().size()); }
public void testCompositeExpressionForOutputValue() { // given BpmnModelInstance instance = Bpmn.createExecutableProcess("Process") .startEvent() .serviceTask() .camundaExpression("${true}") .camundaInputParameter("var1", "World!") .camundaOutputParameter("var2", "Hello ${var1}") .userTask() .endEvent("end") .done(); deployment(instance); runtimeService.startProcessInstanceByKey("Process"); // when VariableInstance variableInstance = runtimeService .createVariableInstanceQuery() .variableName("var2") .singleResult(); // then assertEquals("Hello World!", variableInstance.getValue()); }
@Test public void testSetVariableInExpression() { final BpmnModelInstance modelInstance = Bpmn.createExecutableProcess(CONDITIONAL_EVENT_PROCESS_KEY) .startEvent().userTask().name(TASK_BEFORE_CONDITION) .serviceTask(TASK_WITH_CONDITION_ID) .camundaExpression(EXPR_SET_VARIABLE) .endEvent().done(); deployConditionalBoundaryEventProcess(modelInstance, TASK_WITH_CONDITION_ID, true); // given ProcessInstance procInst = runtimeService.startProcessInstanceByKey(CONDITIONAL_EVENT_PROCESS_KEY); TaskQuery taskQuery = taskService.createTaskQuery().processInstanceId(procInst.getId()); Task task = taskQuery.singleResult(); assertNotNull(task); assertEquals(TASK_BEFORE_CONDITION, task.getName()); //when task is completed taskService.complete(task.getId()); //then service task with expression is called and variable is set //-> interrupting conditional event is triggered tasksAfterVariableIsSet = taskQuery.list(); assertEquals(TASK_AFTER_CONDITION, tasksAfterVariableIsSet.get(0).getName()); }
@Test public void testSetVariableInInputMapping() { final BpmnModelInstance modelInstance = Bpmn.createExecutableProcess(CONDITIONAL_EVENT_PROCESS_KEY) .startEvent().userTask().name(TASK_BEFORE_CONDITION) .serviceTask(TASK_WITH_CONDITION_ID) .camundaInputParameter(VARIABLE_NAME, "1") .camundaExpression(TRUE_CONDITION) .endEvent().done(); deployConditionalBoundaryEventProcess(modelInstance, TASK_WITH_CONDITION_ID, true); // given ProcessInstance procInst = runtimeService.startProcessInstanceByKey(CONDITIONAL_EVENT_PROCESS_KEY); TaskQuery taskQuery = taskService.createTaskQuery().processInstanceId(procInst.getId()); Task task = taskQuery.singleResult(); assertNotNull(task); assertEquals(TASK_BEFORE_CONDITION, task.getName()); //when task is completed taskService.complete(task.getId()); // input mapping does trigger boundary event with help of default evaluation behavior and process ends regularly tasksAfterVariableIsSet = taskQuery.list(); assertEquals(TASK_AFTER_CONDITION, tasksAfterVariableIsSet.get(0).getName()); }
@Test public void testSetVariableInExpression() { final BpmnModelInstance modelInstance = Bpmn.createExecutableProcess(CONDITIONAL_EVENT_PROCESS_KEY) .startEvent().userTask().name(TASK_BEFORE_CONDITION) .serviceTask(TASK_WITH_CONDITION_ID) .camundaExpression("${execution.setVariable(\"variable\", 1)}") .userTask().name(TASK_AFTER_SERVICE_TASK) .endEvent().done(); deployConditionalEventSubProcess(modelInstance, CONDITIONAL_EVENT_PROCESS_KEY, true); // given ProcessInstance procInst = runtimeService.startProcessInstanceByKey(CONDITIONAL_EVENT_PROCESS_KEY); TaskQuery taskQuery = taskService.createTaskQuery().processInstanceId(procInst.getId()); Task task = taskQuery.singleResult(); assertNotNull(task); assertEquals(TASK_BEFORE_CONDITION, task.getName()); //when task is completed taskService.complete(task.getId()); //then service task with expression is called and variable is set //-> interrupting conditional event is triggered tasksAfterVariableIsSet = taskQuery.list(); assertEquals(TASK_AFTER_CONDITION, tasksAfterVariableIsSet.get(0).getName()); }
@Test public void testSetVariableInInputMapping() { final BpmnModelInstance modelInstance = Bpmn.createExecutableProcess(CONDITIONAL_EVENT_PROCESS_KEY) .startEvent().userTask().name(TASK_BEFORE_CONDITION) .serviceTask(TASK_WITH_CONDITION_ID) .camundaInputParameter(VARIABLE_NAME, "1") .camundaExpression(TRUE_CONDITION) .userTask().name(TASK_AFTER_SERVICE_TASK) .endEvent().done(); deployConditionalEventSubProcess(modelInstance, CONDITIONAL_EVENT_PROCESS_KEY, true); // given ProcessInstance procInst = runtimeService.startProcessInstanceByKey(CONDITIONAL_EVENT_PROCESS_KEY); TaskQuery taskQuery = taskService.createTaskQuery().processInstanceId(procInst.getId()); Task task = taskQuery.singleResult(); assertNotNull(task); assertEquals(TASK_BEFORE_CONDITION, task.getName()); //when task is completed taskService.complete(task.getId()); //then service task with input mapping is called and variable is set //-> interrupting conditional event is not triggered //since variable is only locally tasksAfterVariableIsSet = taskQuery.list(); assertEquals(TASK_AFTER_SERVICE_TASK, tasksAfterVariableIsSet.get(0).getName()); }
@Test public void testSetTaskVariablesInServiceTask() { // given BpmnModelInstance bpmnModelInstance = Bpmn.createExecutableProcess(PROCESS_KEY) .startEvent() .userTask() .serviceTask() .camundaExpression("${execution.setVariable('foo', 'bar')}") .endEvent() .done(); testRule.deploy(bpmnModelInstance); identityService.setAuthenticatedUserId("demo"); runtimeService.startProcessInstanceByKey(PROCESS_KEY); Task task = taskService.createTaskQuery().singleResult(); // when taskService.complete(task.getId()); //then HistoricDetail historicDetail = historyService.createHistoricDetailQuery().singleResult(); // no user operation log id is set for this update, as it is not written as part of the user operation assertNull(historicDetail.getUserOperationId()); }
@Test public void testCancelWithFlag() { // given this.instance = Bpmn.createExecutableProcess("process1") .startEvent("start") .serviceTask("ser").camundaExpression("${true}") .userTask("user") .endEvent("end") .done(); ProcessDefinition processDefinition = testRule.deployAndGetDefinition(instance); List<String> processInstanceIds = helper.startInstances("process1", 1); // when runtimeService.createModification(processDefinition.getId()) .startBeforeActivity("ser") .cancelAllForActivity("user", true) .processInstanceIds(processInstanceIds) .execute(); // then ExecutionEntity execution = (ExecutionEntity) runtimeService.createExecutionQuery().singleResult(); assertNotNull(execution); assertEquals("user", execution.getActivityId()); }