@Test public void testSetVariableOnInputMappingInSubProcessWithBoundary() { BpmnModelInstance modelInstance = Bpmn.createExecutableProcess(CONDITIONAL_EVENT_PROCESS_KEY) .startEvent() .subProcess(SUB_PROCESS_ID) .camundaInputParameter(VARIABLE_NAME, "1") .embeddedSubProcess() .startEvent() .userTask(TASK_WITH_CONDITION_ID) .name(TASK_WITH_CONDITION) .endEvent() .subProcessDone() .endEvent() .done(); modelInstance = addEventSubProcess(modelInstance, SUB_PROCESS_ID, TASK_AFTER_COND_START_EVENT_IN_SUB_PROCESS, true); deployMixedProcess(modelInstance, CONDITIONAL_EVENT_PROCESS_KEY, SUB_PROCESS_ID, true); // given ProcessInstance procInst = runtimeService.startProcessInstanceByKey(CONDITIONAL_EVENT_PROCESS_KEY); TaskQuery taskQuery = taskService.createTaskQuery().processInstanceId(procInst.getId()); //when input mapping sets variable //then conditional boundary event should triggered from the default evaluation behavior // The event sub process inside the sub process should not since the scope is lower than from the boundary. // The global event sub process should not since the variable is only locally. tasksAfterVariableIsSet = taskQuery.list(); assertEquals(1, tasksAfterVariableIsSet.size()); assertEquals(TASK_AFTER_CONDITIONAL_BOUNDARY_EVENT, tasksAfterVariableIsSet.get(0).getName()); }
@Test public void testNonInterruptingSetVariableOnInputMappingInSubProcessWithBoundary() { BpmnModelInstance modelInstance = Bpmn.createExecutableProcess(CONDITIONAL_EVENT_PROCESS_KEY) .startEvent() .subProcess(SUB_PROCESS_ID) .camundaInputParameter(VARIABLE_NAME, "1") .embeddedSubProcess() .startEvent() .userTask(TASK_WITH_CONDITION_ID) .name(TASK_WITH_CONDITION) .endEvent() .subProcessDone() .endEvent() .done(); modelInstance = addEventSubProcess(modelInstance, SUB_PROCESS_ID, TASK_AFTER_COND_START_EVENT_IN_SUB_PROCESS, false); deployMixedProcess(modelInstance, CONDITIONAL_EVENT_PROCESS_KEY, SUB_PROCESS_ID, false); // given ProcessInstance procInst = runtimeService.startProcessInstanceByKey(CONDITIONAL_EVENT_PROCESS_KEY); TaskQuery taskQuery = taskService.createTaskQuery().processInstanceId(procInst.getId()); //when input mapping sets variable //then conditional boundary event should triggered and also conditional start event in sub process //via the default evaluation behavior but not the global event sub process //since variable is only local tasksAfterVariableIsSet = taskQuery.list(); assertEquals(3, tasksAfterVariableIsSet.size()); assertTaskNames(tasksAfterVariableIsSet, TASK_AFTER_COND_START_EVENT_IN_SUB_PROCESS, TASK_AFTER_CONDITIONAL_BOUNDARY_EVENT, TASK_WITH_CONDITION); }
@Test public void testNonInterruptingSetVariableInInputMappingOfSubProcess() { final BpmnModelInstance modelInstance = Bpmn.createExecutableProcess(CONDITIONAL_EVENT_PROCESS_KEY) .startEvent().userTask().name(TASK_BEFORE_CONDITION) .subProcess(SUB_PROCESS_ID) .camundaInputParameter(VARIABLE_NAME, "1") .embeddedSubProcess() .startEvent() .userTask().name(TASK_IN_SUB_PROCESS_ID) .endEvent() .subProcessDone() .endEvent() .done(); deployConditionalEventSubProcess(modelInstance, SUB_PROCESS_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 input mapping from sub process sets variable //-> non interrupting conditional event is triggered via default evaluation behavior tasksAfterVariableIsSet = taskQuery.list(); assertEquals(2, tasksAfterVariableIsSet.size()); assertEquals(1, conditionEventSubscriptionQuery.list().size()); }
@Test public void testSetVariableInInputMappingOfSubProcess() { final BpmnModelInstance modelInstance = Bpmn.createExecutableProcess(CONDITIONAL_EVENT_PROCESS_KEY) .startEvent() .userTask().name(TASK_BEFORE_CONDITION) .subProcess(SUB_PROCESS_ID) .camundaInputParameter(VARIABLE_NAME, "1") .embeddedSubProcess() .startEvent() .userTask().name(TASK_IN_SUB_PROCESS_ID) .endEvent() .subProcessDone() .endEvent() .done(); deployConditionalBoundaryEventProcess(modelInstance, SUB_PROCESS_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 input mapping from sub process sets variable, // interrupting conditional event is triggered by default evaluation behavior tasksAfterVariableIsSet = taskQuery.list(); assertEquals(TASK_AFTER_CONDITION, tasksAfterVariableIsSet.get(0).getName()); assertEquals(0, conditionEventSubscriptionQuery.list().size()); }
@Test public void testNonInterruptingSetVariableInInputMappingOfSubProcess() { final BpmnModelInstance modelInstance = Bpmn.createExecutableProcess(CONDITIONAL_EVENT_PROCESS_KEY) .startEvent() .userTask().name(TASK_BEFORE_CONDITION) .subProcess(SUB_PROCESS_ID) .camundaInputParameter(VARIABLE_NAME, "1") .embeddedSubProcess() .startEvent() .userTask().name(TASK_IN_SUB_PROCESS_ID) .endEvent() .subProcessDone() .endEvent() .done(); deployConditionalBoundaryEventProcess(modelInstance, SUB_PROCESS_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 is completed taskService.complete(task.getId()); // Then input mapping from sub process sets variable, but // non interrupting conditional event is not triggered tasksAfterVariableIsSet = taskQuery.list(); assertEquals(TASK_IN_SUB_PROCESS_ID, tasksAfterVariableIsSet.get(0).getName()); assertEquals(1, conditionEventSubscriptionQuery.list().size()); }
@Test public void testSetVariableInInputMappingOfSubProcess() { final BpmnModelInstance modelInstance = Bpmn.createExecutableProcess(CONDITIONAL_EVENT_PROCESS_KEY) .startEvent().userTask().name(TASK_BEFORE_CONDITION) .subProcess(SUB_PROCESS_ID) .camundaInputParameter(VARIABLE_NAME, "1") .embeddedSubProcess() .startEvent("startSubProcess") .userTask().name(TASK_IN_SUB_PROCESS_ID) .endEvent() .subProcessDone() .endEvent() .done(); deployConditionalEventSubProcess(modelInstance, SUB_PROCESS_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 input mapping from sub process sets variable //-> interrupting conditional event is triggered by default evaluation behavior tasksAfterVariableIsSet = taskQuery.list(); assertEquals(TASK_AFTER_CONDITION, tasksAfterVariableIsSet.get(0).getName()); }
@Test public void testSetVariableOnInputMappingInSubProcessWithBoundary() { BpmnModelInstance modelInstance = Bpmn.createExecutableProcess(CONDITIONAL_EVENT_PROCESS_KEY) .startEvent() .subProcess(SUB_PROCESS_ID) .camundaInputParameter(VARIABLE_NAME, "1") .embeddedSubProcess() .startEvent() .userTask(TASK_WITH_CONDITION_ID) .name(TASK_WITH_CONDITION) .endEvent() .subProcessDone() .endEvent() .done(); modelInstance = addEventSubProcess(modelInstance, SUB_PROCESS_ID, TASK_AFTER_COND_START_EVENT_IN_SUB_PROCESS, true); deployMixedProcess(modelInstance, CONDITIONAL_EVENT_PROCESS_KEY, SUB_PROCESS_ID, true); // given ProcessInstance procInst = runtimeService.startProcessInstanceByKey(CONDITIONAL_EVENT_PROCESS_KEY); TaskQuery taskQuery = taskService.createTaskQuery().processInstanceId(procInst.getId()); //when input mapping sets variable //then conditional boundary event should triggered from the default evaluation behavior // The event sub process inside the sub process should not since the scope is lower than from the boundary. // The global event sub process should not since the variable is only locally. tasksAfterVariableIsSet = taskQuery.list(); assertEquals(1, tasksAfterVariableIsSet.size()); assertEquals(TASK_AFTER_CONDITIONAL_BOUNDARY_EVENT, tasksAfterVariableIsSet.get(0).getName()); }
@Test public void testNonInterruptingSetVariableInInputMappingOfSubProcess() { final BpmnModelInstance modelInstance = Bpmn.createExecutableProcess(CONDITIONAL_EVENT_PROCESS_KEY) .startEvent().userTask().name(TASK_BEFORE_CONDITION) .subProcess(SUB_PROCESS_ID) .camundaInputParameter(VARIABLE_NAME, "1") .embeddedSubProcess() .startEvent() .userTask().name(TASK_IN_SUB_PROCESS_ID) .endEvent() .subProcessDone() .endEvent() .done(); deployConditionalEventSubProcess(modelInstance, SUB_PROCESS_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 input mapping from sub process sets variable //-> non interrupting conditional event is triggered via default evaluation behavior tasksAfterVariableIsSet = taskQuery.list(); assertEquals(2, tasksAfterVariableIsSet.size()); assertEquals(1, conditionEventSubscriptionQuery.list().size()); }
@Test public void testNonInterruptingSetVariableOnInputMappingInSubProcessWithBoundary() { BpmnModelInstance modelInstance = Bpmn.createExecutableProcess(CONDITIONAL_EVENT_PROCESS_KEY) .startEvent() .subProcess(SUB_PROCESS_ID) .camundaInputParameter(VARIABLE_NAME, "1") .embeddedSubProcess() .startEvent() .userTask(TASK_WITH_CONDITION_ID) .name(TASK_WITH_CONDITION) .endEvent() .subProcessDone() .endEvent() .done(); modelInstance = addEventSubProcess(modelInstance, SUB_PROCESS_ID, TASK_AFTER_COND_START_EVENT_IN_SUB_PROCESS, false); deployMixedProcess(modelInstance, CONDITIONAL_EVENT_PROCESS_KEY, SUB_PROCESS_ID, false); // given ProcessInstance procInst = runtimeService.startProcessInstanceByKey(CONDITIONAL_EVENT_PROCESS_KEY); TaskQuery taskQuery = taskService.createTaskQuery().processInstanceId(procInst.getId()); //when input mapping sets variable //then conditional boundary event should triggered and also conditional start event in sub process //via the default evaluation behavior but not the global event sub process //since variable is only local tasksAfterVariableIsSet = taskQuery.list(); assertEquals(3, tasksAfterVariableIsSet.size()); assertTaskNames(tasksAfterVariableIsSet, TASK_AFTER_COND_START_EVENT_IN_SUB_PROCESS, TASK_AFTER_CONDITIONAL_BOUNDARY_EVENT, TASK_WITH_CONDITION); }
@Test public void testNonInterruptingSetVariableInInputMappingOfSubProcess() { final BpmnModelInstance modelInstance = Bpmn.createExecutableProcess(CONDITIONAL_EVENT_PROCESS_KEY) .startEvent() .userTask().name(TASK_BEFORE_CONDITION) .subProcess(SUB_PROCESS_ID) .camundaInputParameter(VARIABLE_NAME, "1") .embeddedSubProcess() .startEvent() .userTask().name(TASK_IN_SUB_PROCESS_ID) .endEvent() .subProcessDone() .endEvent() .done(); deployConditionalBoundaryEventProcess(modelInstance, SUB_PROCESS_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 is completed taskService.complete(task.getId()); // Then input mapping from sub process sets variable, but // non interrupting conditional event is not triggered tasksAfterVariableIsSet = taskQuery.list(); assertEquals(TASK_IN_SUB_PROCESS_ID, tasksAfterVariableIsSet.get(0).getName()); assertEquals(1, conditionEventSubscriptionQuery.list().size()); }
@Test public void testSetVariableInInputMappingOfSubProcess() { final BpmnModelInstance modelInstance = Bpmn.createExecutableProcess(CONDITIONAL_EVENT_PROCESS_KEY) .startEvent() .userTask().name(TASK_BEFORE_CONDITION) .subProcess(SUB_PROCESS_ID) .camundaInputParameter(VARIABLE_NAME, "1") .embeddedSubProcess() .startEvent() .userTask().name(TASK_IN_SUB_PROCESS_ID) .endEvent() .subProcessDone() .endEvent() .done(); deployConditionalBoundaryEventProcess(modelInstance, SUB_PROCESS_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 input mapping from sub process sets variable, // interrupting conditional event is triggered by default evaluation behavior tasksAfterVariableIsSet = taskQuery.list(); assertEquals(TASK_AFTER_CONDITION, tasksAfterVariableIsSet.get(0).getName()); assertEquals(0, conditionEventSubscriptionQuery.list().size()); }
@Test public void testSetVariableInInputMappingOfSubProcess() { final BpmnModelInstance modelInstance = Bpmn.createExecutableProcess(CONDITIONAL_EVENT_PROCESS_KEY) .startEvent().userTask().name(TASK_BEFORE_CONDITION) .subProcess(SUB_PROCESS_ID) .camundaInputParameter(VARIABLE_NAME, "1") .embeddedSubProcess() .startEvent("startSubProcess") .userTask().name(TASK_IN_SUB_PROCESS_ID) .endEvent() .subProcessDone() .endEvent() .done(); deployConditionalEventSubProcess(modelInstance, SUB_PROCESS_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 input mapping from sub process sets variable //-> interrupting conditional event is triggered by default evaluation behavior tasksAfterVariableIsSet = taskQuery.list(); assertEquals(TASK_AFTER_CONDITION, tasksAfterVariableIsSet.get(0).getName()); }