@Test public void testSwitchNonToTransientVariable() throws URISyntaxException { // given BpmnModelInstance instance = Bpmn.createExecutableProcess("Process") .startEvent() .serviceTask() .camundaClass(SwitchTransientVariableDelegate.class.getName()) .userTask("user") .endEvent() .done(); testRule.deploy(instance); Map<String, Object> variables = new HashMap<String, Object>(); variables.put("transient1", false); variables.put("transient2", true); // expect thrown.expect(ProcessEngineException.class); thrown.expectMessage("Cannot set transient variable with name variable to non-transient variable and vice versa."); // when runtimeService.startProcessInstanceByKey("Process", variables); }
@Test public void testSwitchTransientToNonVariable() throws URISyntaxException { // given BpmnModelInstance instance = Bpmn.createExecutableProcess("Process") .startEvent() .serviceTask() .camundaClass(SwitchTransientVariableDelegate.class.getName()) .userTask("user") .endEvent() .done(); testRule.deploy(instance); Map<String, Object> variables = new HashMap<String, Object>(); variables.put("transient1", true); variables.put("transient2", false); // expect thrown.expect(ProcessEngineException.class); thrown.expectMessage("Cannot set transient variable with name variable to non-transient variable and vice versa."); // when runtimeService.startProcessInstanceByKey("Process", variables); }
@Test public void setAuthenticatedTenantForTimerStartEvent() { testRule.deployForTenant(TENANT_ID, Bpmn.createExecutableProcess("process") .startEvent() .timerWithDuration("PT1M") .serviceTask() .camundaClass(AssertingJavaDelegate.class.getName()) .userTask() .endEvent() .done()); AssertingJavaDelegate.addAsserts(hasAuthenticatedTenantId(TENANT_ID)); ClockUtil.setCurrentTime(tomorrow()); testRule.waitForJobExecutorToProcessAllJobs(); assertThat(engineRule.getTaskService().createTaskQuery().count(), is(1L)); }
@Test public void testProcessWithoutConditionalEvent() { //given BpmnModelInstance modelInstance = Bpmn.createExecutableProcess(CONDITIONAL_EVENT_PROCESS_KEY) .startEvent() .serviceTask() .camundaClass(CheckNoDelayedVariablesDelegate.class.getName()) .userTask() .endEvent() .done(); //when process is deployed and instance created rule.manageDeployment(rule.getRepositoryService().createDeployment().addModelInstance(CONDITIONAL_MODEL, modelInstance).deploy()); ProcessInstanceWithVariablesImpl processInstance = (ProcessInstanceWithVariablesImpl) rule.getRuntimeService().startProcessInstanceByKey(CONDITIONAL_EVENT_PROCESS_KEY); //then process definition contains no property which indicates that conditional events exists Object property = processInstance.getExecutionEntity().getProcessDefinition().getProperty(BpmnParse.PROPERTYNAME_HAS_CONDITIONAL_EVENTS); assertNull(property); } }
@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 testNonInterruptingSetVariableInDelegate() { final BpmnModelInstance modelInstance = Bpmn.createExecutableProcess(CONDITIONAL_EVENT_PROCESS_KEY) .startEvent().userTask().name(TASK_BEFORE_CONDITION) .serviceTask(TASK_WITH_CONDITION_ID) .camundaClass(SetVariableDelegate.class.getName()) .userTask() .endEvent().done(); deployConditionalBoundaryEventProcess(modelInstance, TASK_WITH_CONDITION_ID, 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 delegated code is called and variable is set //-> non interrupting conditional event is triggered //execution stays at user task after condition and after service task tasksAfterVariableIsSet = taskQuery.list(); assertEquals(2, tasksAfterVariableIsSet.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()); }
@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 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()); }
@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()); }
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 testNonInterruptingSetVariableInExpression() { final BpmnModelInstance modelInstance = Bpmn.createExecutableProcess(CONDITIONAL_EVENT_PROCESS_KEY) .startEvent() .userTask().name(TASK_BEFORE_CONDITION) .serviceTask(TASK_WITH_CONDITION_ID) .camundaExpression(EXPR_SET_VARIABLE) .userTask().name(TASK_AFTER_SERVICE_TASK) .endEvent().done(); deployConditionalBoundaryEventProcess(modelInstance, TASK_WITH_CONDITION_ID, 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()); }
@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()); }
public void testCompleteWithNonLocalVariables() { // given BpmnModelInstance instance = Bpmn.createExecutableProcess("Process").startEvent().serviceTask("externalTask") .camundaType("external").camundaTopic("foo").camundaTaskPriority("100") .camundaExecutionListenerClass(ExecutionListener.EVENTNAME_END, ReadLocalVariableListenerImpl.class) .userTask("user").endEvent().done(); deployment(instance); ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("Process"); List<LockedExternalTask> lockedTasks = externalTaskService.fetchAndLock(1, WORKER_ID).topic("foo", 1L).execute(); // when externalTaskService.complete(lockedTasks.get(0).getId(), WORKER_ID, Variables.createVariables().putValue("abc", "bar"), null); // then VariableInstance variableInstance = runtimeService.createVariableInstanceQuery() .processInstanceIdIn(processInstance.getId()).singleResult(); assertNotNull(variableInstance); assertEquals("bar", variableInstance.getValue()); assertEquals("abc", variableInstance.getName()); }
@Test public void testNonInterruptingSetVariableInInputMapping() { 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, 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 input mapping is called and variable is set //-> non 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 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 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()); }
@Test public void testCancelWithFlagForManyInstances() { // 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", 10); // when runtimeService.createModification(processDefinition.getId()) .startBeforeActivity("ser") .cancelAllForActivity("user", true) .processInstanceIds(processInstanceIds) .execute(); // then for (String processInstanceId : processInstanceIds) { Execution execution = runtimeService.createExecutionQuery().processInstanceId(processInstanceId).singleResult(); assertNotNull(execution); assertEquals("user", ((ExecutionEntity) execution).getActivityId()); } }
@Test @RequiredHistoryLevel(ProcessEngineConfiguration.HISTORY_AUDIT) public void testDeleteAndInsertTheSameVariableByteArray() { BpmnModelInstance bpmnModel = Bpmn.createExecutableProcess("serviceTaskProcess") .startEvent() .userTask("userTask") .serviceTask("service") .camundaClass(DeleteAndInsertVariableDelegate.class) .userTask("userTask1") .endEvent() .done(); ProcessDefinition processDefinition = testHelper.deployAndGetDefinition(bpmnModel); VariableMap variables = Variables.createVariables().putValue("listVar", Arrays.asList(new int[] { 1, 2, 3 })); ProcessInstance instance = engineRule.getRuntimeService().startProcessInstanceById(processDefinition.getId(), variables); Task task = engineRule.getTaskService().createTaskQuery().singleResult(); engineRule.getTaskService().complete(task.getId()); VariableInstance variable = engineRule.getRuntimeService().createVariableInstanceQuery().processInstanceIdIn(instance.getId()).variableName("listVar").singleResult(); assertNotNull(variable); assertEquals("stringValue", variable.getValue()); HistoricVariableInstance historicVariable = engineRule.getHistoryService().createHistoricVariableInstanceQuery().singleResult(); assertEquals(variable.getName(), historicVariable.getName()); assertEquals(HistoricVariableInstance.STATE_CREATED, historicVariable.getState()); }
@Test @RequiredHistoryLevel(ProcessEngineConfiguration.HISTORY_AUDIT) public void testDeleteAndInsertTheSameVariable() { BpmnModelInstance bpmnModel = Bpmn.createExecutableProcess("serviceTaskProcess") .startEvent() .userTask("userTask") .serviceTask("service") .camundaClass(DeleteAndInsertVariableDelegate.class) .userTask("userTask1") .endEvent() .done(); ProcessDefinition processDefinition = testHelper.deployAndGetDefinition(bpmnModel); VariableMap variables = Variables.createVariables().putValue("foo", "firstValue"); ProcessInstance instance = engineRule.getRuntimeService().startProcessInstanceById(processDefinition.getId(), variables); Task task = engineRule.getTaskService().createTaskQuery().singleResult(); engineRule.getTaskService().complete(task.getId()); VariableInstance variable = engineRule.getRuntimeService().createVariableInstanceQuery().processInstanceIdIn(instance.getId()).variableName("foo").singleResult(); assertNotNull(variable); assertEquals("secondValue", variable.getValue()); HistoricVariableInstance historicVariable = engineRule.getHistoryService().createHistoricVariableInstanceQuery().singleResult(); assertEquals(variable.getName(), historicVariable.getName()); assertEquals(HistoricVariableInstance.STATE_CREATED, historicVariable.getState()); }