Skip to content

Commit

Permalink
[incubator-kie-issues-1131] test migration from V7 to code generation…
Browse files Browse the repository at this point in the history
…-36 (apache#3682)

* [incubator-kie-issues-1131] v7 migration to code generation

* incubator-kie-issues-1131

* incubator-kie-issues-1131
Abhitocode authored and rgdoliveira committed Jan 6, 2025
1 parent 449bff0 commit da07496
Showing 6 changed files with 135 additions and 149 deletions.
Original file line number Diff line number Diff line change
@@ -33,6 +33,7 @@
<itemDefinition id="_xItem" structureRef="String" />
<itemDefinition id="_yItem" structureRef="String" />
<itemDefinition id="_nameItem" structureRef="String" />
<itemDefinition id="_surnameItem" structureRef="String" />
<itemDefinition id="_personItem" structureRef="org.jbpm.bpmn2.objects.Person" />

<process processType="Private" isExecutable="true" id="ScriptTaskFEEL" name="ScriptTask Process" tns:packageName="org.jbpm.bpmn2.activity" >
@@ -41,6 +42,7 @@
<property id="x" itemSubjectRef="_xItem"/>
<property id="y" itemSubjectRef="_yItem"/>
<property id="name" itemSubjectRef="_nameItem"/>
<property id="surname" itemSubjectRef="_surnameItem"/>
<property id="person" itemSubjectRef="_personItem"/>

<!-- nodes -->
Original file line number Diff line number Diff line change
@@ -20,7 +20,7 @@

<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.omg.org/bpmn20" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:bpsim="http://www.bpsim.org/schemas/1.0" xmlns:color="http://www.omg.org/spec/BPMN/non-normative/color" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:drools="http://www.jboss.org/drools" id="_RSWy4J-HEei4M9OEIzmf1w" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd http://www.jboss.org/drools drools.xsd http://www.bpsim.org/schemas/1.0 bpsim.xsd" exporter="jBPM Designer" exporterVersion="1.0" expressionLanguage="http://www.mvel.org/2.0" targetNamespace="http://www.omg.org/bpmn20" typeLanguage="http://www.java.com/javaTypes">
<bpmn2:itemDefinition id="_childsItem" structureRef="java.util.List"/>
<bpmn2:itemDefinition id="_fatherIdItem" structureRef="java.lang.Long"/>
<bpmn2:itemDefinition id="_fatherIdItem" structureRef="java.lang.String"/>
<bpmn2:signal id="_ab06284f-eb30-3d3b-80aa-c35195ce2096" name="stopChild:#{fatherId}"/>
<bpmn2:itemDefinition id="_5A8FEA7B-2888-4ECE-B6FD-119A3EB5C708_multiInstanceItemType"/>
<bpmn2:itemDefinition id="__47B12FBC-C42B-4ADB-A359-5FC0C36BF7E8_SkippableInputXItem" structureRef="Object"/>
41 changes: 21 additions & 20 deletions jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/ActivityTest.java
Original file line number Diff line number Diff line change
@@ -31,6 +31,8 @@
import java.util.stream.Collectors;

import org.drools.compiler.rule.builder.PackageBuildContext;
import org.jbpm.bpmn2.activity.ScriptTaskFEELModel;
import org.jbpm.bpmn2.activity.ScriptTaskFEELProcess;
import org.jbpm.bpmn2.activity.ScriptTaskModel;
import org.jbpm.bpmn2.activity.ScriptTaskProcess;
import org.jbpm.bpmn2.activity.ScriptTaskWithIOModel;
@@ -1815,28 +1817,27 @@ public void testBusinessRuleTaskFireLimitAsParameter() throws Exception {
}

@Test
@Disabled("On Exit not supported, see https://issues.redhat.com/browse/KOGITO-2067")
public void testScriptTaskFEEL() throws Exception {
kruntime = createKogitoProcessRuntime("BPMN2-ScriptTaskFEEL.bpmn2");

TestWorkItemHandler handler = new TestWorkItemHandler();
kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Human Task", handler);

Map<String, Object> params = new HashMap<>();
params.put("name", "krisv");
public void testScriptTaskFEEL() {
Application app = ProcessTestHelper.newApplication();
TestWorkItemHandler workItemHandler = new TestWorkItemHandler();
EventTrackerProcessListener tracker = new EventTrackerProcessListener();
ProcessTestHelper.registerHandler(app, "Human Task", workItemHandler);
ProcessTestHelper.registerProcessEventListener(app, tracker);
org.kie.kogito.process.Process<ScriptTaskFEELModel> processDefinition = ScriptTaskFEELProcess.newProcess(app);
ScriptTaskFEELModel model = processDefinition.createModel();
model.setName("krisv");
Person person = new Person();
person.setName("krisv");
params.put("person", person);

KogitoProcessInstance processInstance = kruntime.startProcess("ScriptTask", params);
assertThat(((org.jbpm.workflow.instance.WorkflowProcessInstance) processInstance).getVariable("x")).isEqualTo("Entry");
assertThat(((org.jbpm.workflow.instance.WorkflowProcessInstance) processInstance).getVariable("y")).isNull();

kruntime.getKogitoWorkItemManager().completeWorkItem(handler.getWorkItem().getStringId(), null);
assertThat(getProcessVarValue(processInstance, "y")).isEqualTo("Exit");
assertThat(((org.jbpm.workflow.instance.WorkflowProcessInstance) processInstance).getVariable("surname")).isEqualTo("tester");

assertNodeTriggered(processInstance.getStringId(), "Script1");
model.setPerson(person);
ProcessInstance<ScriptTaskFEELModel> processInstance = processDefinition.createInstance(model);
processInstance.start();
assertThat(processInstance.variables().getX()).isEqualTo("Entry");
assertThat(processInstance.variables().getY()).isNull();
ProcessTestHelper.completeWorkItem(processInstance, Collections.emptyMap());
assertThat(processInstance.variables().getY()).isEqualTo("Exit");
assertThat(processInstance.variables().getSurname()).isEqualTo("tester");
Set<String> nodes = tracker.tracked().stream().map(event -> event.getNodeInstance().getNodeName()).collect(Collectors.toSet());
assertThat(nodes.contains("Script1")).isTrue();
}

@Test
49 changes: 26 additions & 23 deletions jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/ErrorEventTest.java
Original file line number Diff line number Diff line change
@@ -25,6 +25,10 @@
import java.util.Map;
import java.util.Optional;

import org.jbpm.bpmn2.error.BoundaryErrorEventCatchingOnEntryExceptionModel;
import org.jbpm.bpmn2.error.BoundaryErrorEventCatchingOnEntryExceptionProcess;
import org.jbpm.bpmn2.error.BoundaryErrorEventCatchingOnExitExceptionModel;
import org.jbpm.bpmn2.error.BoundaryErrorEventCatchingOnExitExceptionProcess;
import org.jbpm.bpmn2.error.BoundaryErrorEventDefaultHandlerByErrorCodeModel;
import org.jbpm.bpmn2.error.BoundaryErrorEventDefaultHandlerByErrorCodeProcess;
import org.jbpm.bpmn2.error.BoundaryErrorEventDefaultHandlerWithErrorCodeWithStructureRefModel;
@@ -71,7 +75,6 @@
import org.jbpm.process.workitem.builtin.SystemOutWorkItemHandler;
import org.jbpm.test.utils.EventTrackerProcessListener;
import org.jbpm.test.utils.ProcessTestHelper;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.kie.api.event.process.DefaultProcessEventListener;
import org.kie.api.event.process.ProcessNodeLeftEvent;
@@ -445,31 +448,31 @@ public void testEventSubProcessErrorWithScript() throws Exception {
}

@Test
@Disabled("On Exit not supported, see https://issues.redhat.com/browse/KOGITO-2067")
public void testErrorBoundaryEventOnEntry() throws Exception {
kruntime = createKogitoProcessRuntime("BPMN2-BoundaryErrorEventCatchingOnEntryException.bpmn2");
TestWorkItemHandler handler = new TestWorkItemHandler();
kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Human Task", handler);

KogitoProcessInstance processInstance = kruntime.startProcess("BoundaryErrorEventOnEntry");

assertProcessInstanceActive(processInstance.getStringId(), kruntime);
assertThat(handler.getWorkItems()).hasSize(1);
public void testErrorBoundaryEventOnEntry() {
Application app = ProcessTestHelper.newApplication();
TestWorkItemHandler workItemHandler = new TestWorkItemHandler();
ProcessTestHelper.registerHandler(app, "Human Task", workItemHandler);
org.kie.kogito.process.Process<BoundaryErrorEventCatchingOnEntryExceptionModel> processDefinition = BoundaryErrorEventCatchingOnEntryExceptionProcess.newProcess(app);
BoundaryErrorEventCatchingOnEntryExceptionModel model = processDefinition.createModel();
ProcessInstance<BoundaryErrorEventCatchingOnEntryExceptionModel> processInstance = processDefinition.createInstance(model);
processInstance.start();
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_ACTIVE);
assertThat(workItemHandler.getWorkItems()).hasSize(1);
}

@Test
@Disabled("On Exit not supported, see https://issues.redhat.com/browse/KOGITO-2067")
public void testErrorBoundaryEventOnExit() throws Exception {
kruntime = createKogitoProcessRuntime("BPMN2-BoundaryErrorEventCatchingOnExitException.bpmn2");
TestWorkItemHandler handler = new TestWorkItemHandler();
kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Human Task", handler);

KogitoProcessInstance processInstance = kruntime.startProcess("BoundaryErrorEventOnExit");

assertProcessInstanceActive(processInstance.getStringId(), kruntime);
KogitoWorkItem workItem = handler.getWorkItem();
kruntime.getKogitoWorkItemManager().completeWorkItem(workItem.getStringId(), null);
assertThat(handler.getWorkItems()).hasSize(1);
public void testErrorBoundaryEventOnExit() {
Application app = ProcessTestHelper.newApplication();
TestWorkItemHandler workItemHandler = new TestWorkItemHandler();
ProcessTestHelper.registerHandler(app, "Human Task", workItemHandler);
org.kie.kogito.process.Process<BoundaryErrorEventCatchingOnExitExceptionModel> processDefinition = BoundaryErrorEventCatchingOnExitExceptionProcess.newProcess(app);
BoundaryErrorEventCatchingOnExitExceptionModel model = processDefinition.createModel();
ProcessInstance<BoundaryErrorEventCatchingOnExitExceptionModel> processInstance = processDefinition.createInstance(model);
processInstance.start();
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_ACTIVE);
KogitoWorkItem workItem = workItemHandler.getWorkItem();
processInstance.completeWorkItem(workItem.getStringId(), Collections.emptyMap());
assertThat(workItemHandler.getWorkItems()).hasSize(1);
}

@Test
132 changes: 65 additions & 67 deletions jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/FlowTest.java
Original file line number Diff line number Diff line change
@@ -55,6 +55,8 @@
import org.jbpm.bpmn2.flow.InclusiveGatewayWithDefaultProcess;
import org.jbpm.bpmn2.flow.InclusiveGatewayWithHumanTasksProcessModel;
import org.jbpm.bpmn2.flow.InclusiveGatewayWithHumanTasksProcessProcess;
import org.jbpm.bpmn2.flow.InclusiveGatewayWithLoopInsideModel;
import org.jbpm.bpmn2.flow.InclusiveGatewayWithLoopInsideProcess;
import org.jbpm.bpmn2.flow.InclusiveNestedInParallelNestedInExclusiveModel;
import org.jbpm.bpmn2.flow.InclusiveNestedInParallelNestedInExclusiveProcess;
import org.jbpm.bpmn2.flow.InclusiveSplitAndJoinEmbeddedModel;
@@ -93,6 +95,8 @@
import org.jbpm.bpmn2.flow.MultiInstanceLoopNumberingProcess;
import org.jbpm.bpmn2.flow.MultipleGatewaysProcessModel;
import org.jbpm.bpmn2.flow.MultipleGatewaysProcessProcess;
import org.jbpm.bpmn2.loop.MultiInstanceLoopCharacteristicsProcessWithOutputAndScriptsModel;
import org.jbpm.bpmn2.loop.MultiInstanceLoopCharacteristicsProcessWithOutputAndScriptsProcess;
import org.jbpm.bpmn2.loop.MultiInstanceLoopCharacteristicsTaskModel;
import org.jbpm.bpmn2.loop.MultiInstanceLoopCharacteristicsTaskProcess;
import org.jbpm.bpmn2.objects.TestUserTaskWorkItemHandler;
@@ -779,50 +783,55 @@ public void testInclusiveSplitNested() {
}

@Test
@Disabled("On Exit not supported, see https://issues.redhat.com/browse/KOGITO-2067")
public void testInclusiveSplitWithLoopInside() throws Exception {
kruntime = createKogitoProcessRuntime("BPMN2-InclusiveGatewayWithLoopInside.bpmn2");

public void testInclusiveSplitWithLoopInside() {
Application app = ProcessTestHelper.newApplication();
final Map<String, Integer> nodeInstanceExecutionCounter = new HashMap<>();
kruntime.getProcessEventManager().addEventListener(new DefaultKogitoProcessEventListener() {

ProcessTestHelper.registerProcessEventListener(app, new DefaultKogitoProcessEventListener() {
@Override
public void beforeNodeTriggered(ProcessNodeTriggeredEvent event) {
logger.info("{} {}", event.getNodeInstance().getNodeName(), ((NodeInstanceImpl) event.getNodeInstance()).getLevel());
Integer value = nodeInstanceExecutionCounter.get(event.getNodeInstance().getNodeName());
if (value == null) {
value = new Integer(0);
value = 0;
}

value++;
nodeInstanceExecutionCounter.put(event.getNodeInstance().getNodeName(), value);
}

});

TestWorkItemHandler handler = new TestWorkItemHandler();
TestWorkItemHandler handler2 = new TestWorkItemHandler();
kruntime.getKogitoWorkItemManager().registerWorkItemHandler("testWI", handler);
kruntime.getKogitoWorkItemManager().registerWorkItemHandler("testWI2", handler2);
Map<String, Object> params = new HashMap<>();
params.put("x", -1);
KogitoProcessInstance processInstance = kruntime.startProcess("Process_1", params);
ProcessTestHelper.registerHandler(app, "testWI", handler);
ProcessTestHelper.registerHandler(app, "testWI2", handler2);

org.kie.kogito.process.Process<InclusiveGatewayWithLoopInsideModel> processDefinition = InclusiveGatewayWithLoopInsideProcess.newProcess(app);
InclusiveGatewayWithLoopInsideModel model = processDefinition.createModel();
model.setX(-1);
ProcessInstance<InclusiveGatewayWithLoopInsideModel> processInstance = processDefinition.createInstance(model);
processInstance.start();

assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_ACTIVE);

assertProcessInstanceActive(processInstance);
List<KogitoWorkItem> workItems = handler.getWorkItems();
assertThat(workItems).isNotNull().hasSize(2);

for (KogitoWorkItem wi : workItems) {
assertProcessInstanceActive(processInstance);
kruntime.getKogitoWorkItemManager().completeWorkItem(wi.getStringId(), null);
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_ACTIVE);
processInstance.completeWorkItem(wi.getStringId(), null);
}

assertProcessInstanceActive(processInstance);
kruntime.getKogitoWorkItemManager().completeWorkItem(handler2.getWorkItem().getStringId(), null);
assertProcessInstanceActive(processInstance);
kruntime.getKogitoWorkItemManager().completeWorkItem(handler2.getWorkItem().getStringId(), null);
assertProcessInstanceActive(processInstance);
kruntime.getKogitoWorkItemManager().completeWorkItem(handler.getWorkItem().getStringId(), null);
assertProcessInstanceCompleted(processInstance);
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_ACTIVE);
processInstance.completeWorkItem(handler2.getWorkItem().getStringId(), null);

assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_ACTIVE);
processInstance.completeWorkItem(handler2.getWorkItem().getStringId(), null);

assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_ACTIVE);
processInstance.completeWorkItem(handler.getWorkItem().getStringId(), null);

assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);

assertThat(nodeInstanceExecutionCounter).hasSize(10);
assertThat((int) nodeInstanceExecutionCounter.get("Start")).isEqualTo(1);
assertThat((int) nodeInstanceExecutionCounter.get("OR diverging")).isEqualTo(1);
@@ -839,7 +848,7 @@ public void beforeNodeTriggered(ProcessNodeTriggeredEvent event) {
@Test
@Disabled("On Exit not supported, see https://issues.redhat.com/browse/KOGITO-2067")
public void testInclusiveSplitWithLoopInsideSubprocess() throws Exception {
kruntime = createKogitoProcessRuntime("BPMN2-InclusiveGatewayWithLoopInsideSubprocess.bpmn2");
kruntime = createKogitoProcessRuntime("org/jbpm/bpmn2/flow/BPMN2-InclusiveGatewayWithLoopInsideSubprocess.bpmn2");

final Map<String, Integer> nodeInstanceExecutionCounter = new HashMap<>();
kruntime.getProcessEventManager().addEventListener(new DefaultKogitoProcessEventListener() {
@@ -863,7 +872,7 @@ public void beforeNodeTriggered(ProcessNodeTriggeredEvent event) {
kruntime.getKogitoWorkItemManager().registerWorkItemHandler("testWI2", handler2);
Map<String, Object> params = new HashMap<>();
params.put("x", -1);
KogitoProcessInstance processInstance = kruntime.startProcess("Process_1", params);
KogitoProcessInstance processInstance = kruntime.startProcess("InclusiveGatewayWithLoopInsideSubprocess", params);

assertProcessInstanceActive(processInstance);
List<KogitoWorkItem> workItems = handler.getWorkItems();
@@ -1124,69 +1133,59 @@ public void testMultiInstanceLoopCharacteristicsProcessWithOutputCompletionCondi
}

@Test
@Disabled("On Exit not supported, see https://issues.redhat.com/browse/KOGITO-2067")
public void testMultiInstanceLoopCharacteristicsProcessWithOutputAndScripts()
throws Exception {
kruntime = createKogitoProcessRuntime("BPMN2-MultiInstanceLoopCharacteristicsProcessWithOutputAndScripts.bpmn2");
Map<String, Object> params = new HashMap<>();
public void testMultiInstanceLoopCharacteristicsProcessWithOutputAndScripts() {
Application app = ProcessTestHelper.newApplication();
List<String> myList = new ArrayList<>();
List<String> myListOut = new ArrayList<>();
List<String> scriptList = new ArrayList<>();
myList.add("First Item");
myList.add("Second Item");
params.put("list", myList);
params.put("listOut", myListOut);
params.put("scriptList", scriptList);
assertThat(myListOut).isEmpty();
KogitoProcessInstance processInstance = kruntime.startProcess("MultiInstanceLoopCharacteristicsProcessWithOutput", params);
assertProcessInstanceCompleted(processInstance);
org.kie.kogito.process.Process<MultiInstanceLoopCharacteristicsProcessWithOutputAndScriptsModel> processDefinition =
MultiInstanceLoopCharacteristicsProcessWithOutputAndScriptsProcess.newProcess(app);
MultiInstanceLoopCharacteristicsProcessWithOutputAndScriptsModel model = processDefinition.createModel();
model.setList(myList);
model.setListOut(myListOut);
model.setScriptList(scriptList);
ProcessInstance<MultiInstanceLoopCharacteristicsProcessWithOutputAndScriptsModel> processInstance = processDefinition.createInstance(model);
processInstance.start();
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
assertThat(myListOut).hasSize(2);
assertThat(scriptList).hasSize(2);

}

@Test
@Disabled("On Exit not supported, see https://issues.redhat.com/browse/KOGITO-2067")
public void testMultiInstanceLoopCharacteristicsTaskWithOutput()
throws Exception {
kruntime = createKogitoProcessRuntime("BPMN2-MultiInstanceLoopCharacteristicsTaskWithOutput.bpmn2");
kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Human Task",
public void testMultiInstanceLoopCharacteristicsTaskWithOutput() {
Application app = ProcessTestHelper.newApplication();
ProcessTestHelper.registerHandler(app, "Human Task",
new SystemOutWorkItemHandler());
Map<String, Object> params = new HashMap<>();
List<String> myList = new ArrayList<>();
List<String> myListOut = new ArrayList<>();
myList.add("First Item");
myList.add("Second Item");
params.put("list", myList);
params.put("listOut", myListOut);
assertThat(myListOut).isEmpty();
KogitoProcessInstance processInstance = kruntime.startProcess(
"MultiInstanceLoopCharacteristicsTask", params);
assertProcessInstanceCompleted(processInstance);
assertThat(myListOut).hasSize(2);

Process<MultiInstanceLoopCharacteristicsProcessWithOutputModel> process = MultiInstanceLoopCharacteristicsProcessWithOutputProcess.newProcess(app);
MultiInstanceLoopCharacteristicsProcessWithOutputModel model = process.createModel();
model.setList(myList);
ProcessInstance<MultiInstanceLoopCharacteristicsProcessWithOutputModel> instance = process.createInstance(model);
instance.start();
assertThat(instance.status()).isEqualTo(org.kie.api.runtime.process.ProcessInstance.STATE_COMPLETED);
assertThat(instance.variables().getListOut()).hasSize(2);
}

@Test
@Disabled("On Exit not supported, see https://issues.redhat.com/browse/KOGITO-2067")
public void testMultiInstanceLoopCharacteristicsTaskWithOutputCompletionCondition()
throws Exception {
kruntime = createKogitoProcessRuntime("BPMN2-MultiInstanceLoopCharacteristicsTaskWithOutputCmpCond.bpmn2");
kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Human Task",
public void testMultiInstanceLoopCharacteristicsTaskWithOutputCompletionCondition() {
Application app = ProcessTestHelper.newApplication();
ProcessTestHelper.registerHandler(app, "Human Task",
new SystemOutWorkItemHandler());
Map<String, Object> params = new HashMap<>();
List<String> myList = new ArrayList<>();
List<String> myListOut = new ArrayList<>();
myList.add("First Item");
myList.add("Second Item");
params.put("list", myList);
params.put("listOut", myListOut);
assertThat(myListOut).isEmpty();
KogitoProcessInstance processInstance = kruntime.startProcess(
"MultiInstanceLoopCharacteristicsTask", params);
assertProcessInstanceCompleted(processInstance);
assertThat(myListOut).hasSize(1);

Process<MultiInstanceLoopCharacteristicsProcessWithOutputCmpCondModel> process = MultiInstanceLoopCharacteristicsProcessWithOutputCmpCondProcess.newProcess(app);
MultiInstanceLoopCharacteristicsProcessWithOutputCmpCondModel model = process.createModel();
model.setList(myList);
ProcessInstance<MultiInstanceLoopCharacteristicsProcessWithOutputCmpCondModel> instance = process.createInstance(model);
instance.start();
assertThat(instance.status()).isEqualTo(org.kie.api.runtime.process.ProcessInstance.STATE_COMPLETED);
assertThat(instance.variables().getListOut()).hasSize(1);
}

@Test
@@ -1213,7 +1212,6 @@ public void testMultiInstanceLoopCharacteristicsTaskWithOutputCompletionConditio
// only two approved outcomes are required to complete multiinstance and since there was reject in between we should have
// three elements in the list
assertThat(myListOut).hasSize(3);

}

@Test
Original file line number Diff line number Diff line change
@@ -59,6 +59,10 @@
import org.jbpm.bpmn2.objects.Person;
import org.jbpm.bpmn2.objects.TestUserTaskWorkItemHandler;
import org.jbpm.bpmn2.objects.TestWorkItemHandler;
import org.jbpm.bpmn2.subprocess.DynamicSignalChildModel;
import org.jbpm.bpmn2.subprocess.DynamicSignalChildProcess;
import org.jbpm.bpmn2.subprocess.DynamicSignalParentModel;
import org.jbpm.bpmn2.subprocess.DynamicSignalParentProcess;
import org.jbpm.bpmn2.subprocess.EventSubprocessConditionalModel;
import org.jbpm.bpmn2.subprocess.EventSubprocessConditionalProcess;
import org.jbpm.bpmn2.subprocess.EventSubprocessMessageModel;
@@ -2686,45 +2690,23 @@ public void testSignalEndWithData() {
}

@Test
@Disabled("On Exit not supported, see https://issues.redhat.com/browse/KOGITO-2067")
public void testDynamicCatchEventSignal() throws Exception {
kruntime = createKogitoProcessRuntime("subprocess/dynamic-signal-parent.bpmn2",
"subprocess/dynamic-signal-child.bpmn2");
TestWorkItemHandler handler = new TestWorkItemHandler();
kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Human Task", handler);
final List<String> instances = new ArrayList<>();

kruntime.getProcessEventManager().addEventListener(new DefaultKogitoProcessEventListener() {

@Override
public void beforeProcessStarted(ProcessStartedEvent event) {
instances.add(((KogitoProcessInstance) event.getProcessInstance()).getStringId());
}

});

KogitoProcessInstance processInstance = kruntime.startProcess("src.father");
assertProcessInstanceActive(processInstance);
assertThat(instances).hasSize(4);

// remove the parent process instance
instances.remove(processInstance.getStringId());

for (String id : instances) {
KogitoProcessInstance child = kruntime.getProcessInstance(id);
assertProcessInstanceActive(child);
}

// now complete user task to signal all child instances to stop
KogitoWorkItem workItem = handler.getWorkItem();
void testDynamicCatchEventSignal() {
Application app = ProcessTestHelper.newApplication();
TestWorkItemHandler workItemHandler = new TestWorkItemHandler();
ProcessTestHelper.registerHandler(app, "Human Task", workItemHandler);
org.kie.kogito.process.Process<DynamicSignalParentModel> processDefinition = DynamicSignalParentProcess.newProcess(app);
DynamicSignalParentModel model = processDefinition.createModel();
ProcessInstance<DynamicSignalParentModel> processInstance = processDefinition.createInstance(model);
org.kie.kogito.process.Process<DynamicSignalChildModel> childProcessDefinition = DynamicSignalChildProcess.newProcess(app);
processInstance.start();
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_ACTIVE);
List<ProcessInstance<DynamicSignalChildModel>> childInstances = childProcessDefinition.instances().stream().toList();
assertThat(childInstances).hasSize(3);
childInstances.forEach(instance -> assertThat(instance.status()).isEqualTo(ProcessInstance.STATE_ACTIVE));
KogitoWorkItem workItem = workItemHandler.getWorkItem();
assertThat(workItem).isNotNull();

kruntime.getKogitoWorkItemManager().completeWorkItem(workItem.getStringId(), null);
assertProcessInstanceFinished(processInstance, kruntime);

for (String id : instances) {
assertThat(kruntime.getProcessInstance(id)).as("Child process instance has not been finished.").isNull();
}
processInstance.completeWorkItem(workItem.getStringId(), Collections.emptyMap());
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
}

@Test

0 comments on commit da07496

Please sign in to comment.