This is an automated email from the ASF dual-hosted git repository.

pefernan pushed a commit to branch main
in repository 
https://gitbox.apache.org/repos/asf/incubator-kie-kogito-runtimes.git


The following commit(s) were added to refs/heads/main by this push:
     new 626c85e6a5 [incubator-kie-issues-1131] test migration from V7 to code 
generation-22 (#3639)
626c85e6a5 is described below

commit 626c85e6a5ae41c507f438d283e4f6ef10dc751c
Author: Abhiram Gundala <[email protected]>
AuthorDate: Tue Dec 17 03:34:46 2024 -0500

    [incubator-kie-issues-1131] test migration from V7 to code generation-22 
(#3639)
    
    * [incubator-kie-issues-1131] v7 migration to code generation
    
    * incubator-kie-issues-1612
    
    * incubator-kie-issues-1131
---
 .../java/org/jbpm/bpmn2/IntermediateEventTest.java | 1492 ++++++++++----------
 1 file changed, 767 insertions(+), 725 deletions(-)

diff --git 
a/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/IntermediateEventTest.java 
b/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/IntermediateEventTest.java
index bace416905..7029ebd983 100755
--- a/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/IntermediateEventTest.java
+++ b/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/IntermediateEventTest.java
@@ -20,6 +20,7 @@ package org.jbpm.bpmn2;
 
 import java.time.OffsetDateTime;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -40,65 +41,7 @@ import org.jbpm.bpmn2.event.BoundaryTimerCycleISOModel;
 import org.jbpm.bpmn2.event.BoundaryTimerCycleISOProcess;
 import org.jbpm.bpmn2.event.BoundaryTimerCycleISOVariableModel;
 import org.jbpm.bpmn2.event.BoundaryTimerCycleISOVariableProcess;
-import org.jbpm.bpmn2.intermediate.BoundarySignalEventOnTaskModel;
-import org.jbpm.bpmn2.intermediate.BoundarySignalEventOnTaskProcess;
-import org.jbpm.bpmn2.intermediate.EventBasedSplit2Model;
-import org.jbpm.bpmn2.intermediate.EventBasedSplit2Process;
-import org.jbpm.bpmn2.intermediate.EventBasedSplit4Model;
-import org.jbpm.bpmn2.intermediate.EventBasedSplit4Process;
-import org.jbpm.bpmn2.intermediate.EventBasedSplitModel;
-import org.jbpm.bpmn2.intermediate.EventBasedSplitProcess;
-import org.jbpm.bpmn2.intermediate.EventSubprocessErrorSignalEmbeddedModel;
-import org.jbpm.bpmn2.intermediate.EventSubprocessErrorSignalEmbeddedProcess;
-import org.jbpm.bpmn2.intermediate.IntermediateCatchEventMessageModel;
-import org.jbpm.bpmn2.intermediate.IntermediateCatchEventMessageProcess;
-import org.jbpm.bpmn2.intermediate.IntermediateCatchEventMessageWithRefModel;
-import org.jbpm.bpmn2.intermediate.IntermediateCatchEventMessageWithRefProcess;
-import 
org.jbpm.bpmn2.intermediate.IntermediateCatchEventMessageWithTransformationModel;
-import 
org.jbpm.bpmn2.intermediate.IntermediateCatchEventMessageWithTransformationProcess;
-import org.jbpm.bpmn2.intermediate.IntermediateCatchEventSignal2Model;
-import org.jbpm.bpmn2.intermediate.IntermediateCatchEventSignal2Process;
-import org.jbpm.bpmn2.intermediate.IntermediateCatchEventSignalModel;
-import org.jbpm.bpmn2.intermediate.IntermediateCatchEventSignalProcess;
-import 
org.jbpm.bpmn2.intermediate.IntermediateCatchEventSignalWithTransformationModel;
-import 
org.jbpm.bpmn2.intermediate.IntermediateCatchEventSignalWithTransformationProcess;
-import org.jbpm.bpmn2.intermediate.IntermediateCatchEventTimerCycle1Model;
-import org.jbpm.bpmn2.intermediate.IntermediateCatchEventTimerCycle1Process;
-import org.jbpm.bpmn2.intermediate.IntermediateCatchEventTimerCycle2Model;
-import org.jbpm.bpmn2.intermediate.IntermediateCatchEventTimerCycle2Process;
-import org.jbpm.bpmn2.intermediate.IntermediateCatchEventTimerCycle3Model;
-import org.jbpm.bpmn2.intermediate.IntermediateCatchEventTimerCycle3Process;
-import org.jbpm.bpmn2.intermediate.IntermediateCatchEventTimerCycleCronModel;
-import org.jbpm.bpmn2.intermediate.IntermediateCatchEventTimerCycleCronProcess;
-import org.jbpm.bpmn2.intermediate.IntermediateCatchEventTimerCycleISOModel;
-import org.jbpm.bpmn2.intermediate.IntermediateCatchEventTimerCycleISOProcess;
-import org.jbpm.bpmn2.intermediate.IntermediateCatchEventTimerDateISOModel;
-import org.jbpm.bpmn2.intermediate.IntermediateCatchEventTimerDateISOProcess;
-import org.jbpm.bpmn2.intermediate.IntermediateCatchEventTimerDurationISOModel;
-import 
org.jbpm.bpmn2.intermediate.IntermediateCatchEventTimerDurationISOProcess;
-import org.jbpm.bpmn2.intermediate.IntermediateCatchEventTimerDurationModel;
-import org.jbpm.bpmn2.intermediate.IntermediateCatchEventTimerDurationProcess;
-import 
org.jbpm.bpmn2.intermediate.IntermediateCatchEventTimerDurationWithErrorModel;
-import 
org.jbpm.bpmn2.intermediate.IntermediateCatchEventTimerDurationWithErrorProcess;
-import 
org.jbpm.bpmn2.intermediate.IntermediateCatchEventTimerDurationWithErrorProcessInstance;
-import 
org.jbpm.bpmn2.intermediate.IntermediateCatchSignalBetweenUserTasksModel;
-import 
org.jbpm.bpmn2.intermediate.IntermediateCatchSignalBetweenUserTasksProcess;
-import org.jbpm.bpmn2.intermediate.IntermediateCatchSignalSingleModel;
-import org.jbpm.bpmn2.intermediate.IntermediateCatchSignalSingleProcess;
-import org.jbpm.bpmn2.intermediate.IntermediateLinkEventModel;
-import org.jbpm.bpmn2.intermediate.IntermediateLinkEventProcess;
-import org.jbpm.bpmn2.intermediate.IntermediateThrowEventMessageModel;
-import org.jbpm.bpmn2.intermediate.IntermediateThrowEventMessageProcess;
-import 
org.jbpm.bpmn2.intermediate.IntermediateThrowEventMessageWithTransformationModel;
-import 
org.jbpm.bpmn2.intermediate.IntermediateThrowEventMessageWithTransformationProcess;
-import org.jbpm.bpmn2.intermediate.IntermediateThrowEventNoneModel;
-import org.jbpm.bpmn2.intermediate.IntermediateThrowEventNoneProcess;
-import org.jbpm.bpmn2.intermediate.IntermediateThrowEventSignalModel;
-import org.jbpm.bpmn2.intermediate.IntermediateThrowEventSignalProcess;
-import org.jbpm.bpmn2.intermediate.LinkEventCompositeProcessModel;
-import org.jbpm.bpmn2.intermediate.LinkEventCompositeProcessProcess;
-import org.jbpm.bpmn2.intermediate.SignalBoundaryEventInterruptingModel;
-import org.jbpm.bpmn2.intermediate.SignalBoundaryEventInterruptingProcess;
+import org.jbpm.bpmn2.intermediate.*;
 import org.jbpm.bpmn2.loop.MultiInstanceLoopBoundaryTimerModel;
 import org.jbpm.bpmn2.loop.MultiInstanceLoopBoundaryTimerProcess;
 import 
org.jbpm.bpmn2.loop.MultiInstanceLoopCharacteristicsProcessSequentialModel;
@@ -123,10 +66,22 @@ import 
org.jbpm.bpmn2.subprocess.EventSubprocessMessageProcess;
 import org.jbpm.bpmn2.subprocess.EventSubprocessSignalWithTransformationModel;
 import 
org.jbpm.bpmn2.subprocess.EventSubprocessSignalWithTransformationProcess;
 import org.jbpm.bpmn2.test.RequirePersistence;
+import org.jbpm.bpmn2.timer.IntermediateTimerEventMIModel;
+import org.jbpm.bpmn2.timer.IntermediateTimerEventMIProcess;
+import org.jbpm.bpmn2.timer.IntermediateTimerParallelGatewayModel;
+import org.jbpm.bpmn2.timer.IntermediateTimerParallelGatewayProcess;
 import org.jbpm.bpmn2.timer.TimerBoundaryEventCycle1Model;
 import org.jbpm.bpmn2.timer.TimerBoundaryEventCycle1Process;
 import org.jbpm.bpmn2.timer.TimerBoundaryEventCycle2Model;
 import org.jbpm.bpmn2.timer.TimerBoundaryEventCycle2Process;
+import org.jbpm.bpmn2.timer.TimerBoundaryEventCycleISOModel;
+import org.jbpm.bpmn2.timer.TimerBoundaryEventCycleISOProcess;
+import org.jbpm.bpmn2.timer.TimerBoundaryEventDateISOModel;
+import org.jbpm.bpmn2.timer.TimerBoundaryEventDateISOProcess;
+import org.jbpm.bpmn2.timer.TimerBoundaryEventDurationISOModel;
+import org.jbpm.bpmn2.timer.TimerBoundaryEventDurationISOProcess;
+import org.jbpm.bpmn2.timer.TimerBoundaryEventDurationModel;
+import org.jbpm.bpmn2.timer.TimerBoundaryEventDurationProcess;
 import org.jbpm.bpmn2.timer.TimerBoundaryEventInterruptingModel;
 import 
org.jbpm.bpmn2.timer.TimerBoundaryEventInterruptingOnTaskCancelTimerModel;
 import 
org.jbpm.bpmn2.timer.TimerBoundaryEventInterruptingOnTaskCancelTimerProcess;
@@ -144,10 +99,10 @@ import 
org.jbpm.test.util.ProcessCompletedCountDownProcessEventListener;
 import org.jbpm.test.utils.EventTrackerProcessListener;
 import org.jbpm.test.utils.ProcessTestHelper;
 import org.jbpm.test.utils.ProcessTestHelper.CompletionKogitoEventListener;
+import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.Timeout;
-import org.kie.api.command.ExecutableCommand;
 import org.kie.api.event.process.ProcessCompletedEvent;
 import org.kie.api.event.process.ProcessNodeLeftEvent;
 import org.kie.api.event.process.ProcessNodeTriggeredEvent;
@@ -159,7 +114,6 @@ import 
org.kie.kogito.internal.process.event.DefaultKogitoProcessEventListener;
 import org.kie.kogito.internal.process.event.KogitoProcessEventListener;
 import org.kie.kogito.internal.process.runtime.KogitoNodeInstance;
 import org.kie.kogito.internal.process.runtime.KogitoProcessInstance;
-import org.kie.kogito.internal.process.runtime.KogitoWorkflowProcessInstance;
 import org.kie.kogito.internal.process.workitem.KogitoWorkItem;
 import org.kie.kogito.internal.process.workitem.KogitoWorkItemHandler;
 import org.kie.kogito.internal.process.workitem.KogitoWorkItemManager;
@@ -170,9 +124,9 @@ import org.kie.kogito.process.ProcessInstance;
 import org.kie.kogito.process.impl.Sig;
 import org.kie.kogito.process.workitems.impl.DefaultKogitoWorkItemHandler;
 
-import static java.util.Collections.emptyMap;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.fail;
+import static org.assertj.core.api.IterableAssert.assertThatIterable;
 import static 
org.jbpm.workflow.instance.node.TimerNodeInstance.TIMER_TRIGGERED_EVENT;
 
 public class IntermediateEventTest extends JbpmBpmn2TestCase {
@@ -266,33 +220,31 @@ public class IntermediateEventTest extends 
JbpmBpmn2TestCase {
     }
 
     @Test
-    public void testSignalBoundaryNonEffectiveEvent() throws Exception {
+    public void testSignalBoundaryNonEffectiveEvent() {
         final String signal = "signalTest";
         final AtomicBoolean eventAfterNodeLeftTriggered = new 
AtomicBoolean(false);
-        kruntime = createKogitoProcessRuntime(
-                
"org/jbpm/bpmn2/intermediate/BPMN2-BoundaryEventWithNonEffectiveSignal.bpmn2");
-
+        Application app = ProcessTestHelper.newApplication();
         TestWorkItemHandler handler = new TestWorkItemHandler();
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Human 
Task", handler);
-
-        kruntime.getProcessEventManager().addEventListener(new 
DefaultKogitoProcessEventListener() {
-
+        ProcessTestHelper.registerHandler(app, "Human Task", handler);
+        ProcessTestHelper.registerProcessEventListener(app, new 
DefaultKogitoProcessEventListener() {
             @Override
             public void afterNodeLeft(ProcessNodeLeftEvent event) {
-                // BoundaryEventNodeInstance
                 if (signal.equals(event.getNodeInstance().getNodeName())) {
                     eventAfterNodeLeftTriggered.set(true);
                 }
             }
         });
-        KogitoProcessInstance processInstance = 
kruntime.startProcess("BoundaryEventWithNonEffectiveSignal");
-
-        // outer human work
-        
kruntime.getKogitoWorkItemManager().completeWorkItem(handler.getWorkItem().getStringId(),
 emptyMap());
 
-        kruntime.signalEvent(signal, signal);
-
-        assertProcessInstanceFinished(processInstance, kruntime);
+        
org.kie.kogito.process.Process<BoundaryEventWithNonEffectiveSignalModel> 
processDefinition =
+                BoundaryEventWithNonEffectiveSignalProcess.newProcess(app);
+        ProcessInstance<BoundaryEventWithNonEffectiveSignalModel> 
processInstance =
+                
processDefinition.createInstance(processDefinition.createModel());
+        processInstance.start();
+        KogitoWorkItem workItem = handler.getWorkItem();
+        assertThat(workItem).isNotNull();
+        processInstance.completeWorkItem(workItem.getStringId(), null);
+        processInstance.send(Sig.of(signal, signal));
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
         assertThat(eventAfterNodeLeftTriggered).isTrue();
     }
 
@@ -589,217 +541,259 @@ public class IntermediateEventTest extends 
JbpmBpmn2TestCase {
     }
 
     @Test
-    public void testEventBasedSplit5() throws Exception {
-        kruntime = 
createKogitoProcessRuntime("org/jbpm/bpmn2/intermediate/BPMN2-EventBasedSplit5.bpmn2");
-
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Email1", 
new SystemOutWorkItemHandler());
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Email2", 
new SystemOutWorkItemHandler());
+    public void testEventBasedSplit5() {
+        Application app = ProcessTestHelper.newApplication();
+        ProcessTestHelper.registerHandler(app, "Email1", new 
SystemOutWorkItemHandler());
+        ProcessTestHelper.registerHandler(app, "Email2", new 
SystemOutWorkItemHandler());
         ReceiveTaskHandler receiveTaskHandler = new ReceiveTaskHandler();
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Receive 
Task", receiveTaskHandler);
-        // Yes
-        KogitoProcessInstance processInstance = 
kruntime.startProcess("EventBasedSplit5");
-        
assertThat(processInstance.getState()).isEqualTo(KogitoProcessInstance.STATE_ACTIVE);
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Email1", 
new SystemOutWorkItemHandler());
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Email2", 
new SystemOutWorkItemHandler());
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Receive 
Task", receiveTaskHandler);
+        ProcessTestHelper.registerHandler(app, "Receive Task", 
receiveTaskHandler);
 
-        receiveTaskHandler.getWorkItemId().stream().findFirst().ifPresent(id 
-> kruntime.getKogitoWorkItemManager().completeWorkItem(id, Map.of("Message", 
"YesValue")));
-
-        assertProcessInstanceCompleted(processInstance.getStringId(), 
kruntime);
+        org.kie.kogito.process.Process<EventBasedSplit5Model> 
processDefinition = EventBasedSplit5Process.newProcess(app);
+        EventBasedSplit5Model model = processDefinition.createModel();
+        org.kie.kogito.process.ProcessInstance<EventBasedSplit5Model> instance 
= processDefinition.createInstance(model);
+        instance.start();
+        
assertThat(instance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_ACTIVE);
+        Assertions.assertNull(instance.variables().getX());
 
-        receiveTaskHandler.getWorkItemId().forEach(id -> 
kruntime.getKogitoWorkItemManager().completeWorkItem(id, Map.of("Message", 
"NoValue")));
+        receiveTaskHandler.getWorkItemId().stream().findFirst().ifPresent(id 
-> instance.completeWorkItem(id, Map.of("Message", "YesValue")));
+        
assertThat(instance.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
+        assertThat(instance.variables().getX()).isEqualTo("YesValue");
 
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Email1", 
new SystemOutWorkItemHandler());
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Email2", 
new SystemOutWorkItemHandler());
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Receive 
Task", receiveTaskHandler);
-        // No
-        processInstance = kruntime.startProcess("EventBasedSplit5");
-        receiveTaskHandler.getWorkItemId().stream().findFirst().ifPresent(id 
-> kruntime.getKogitoWorkItemManager().completeWorkItem(id, Map.of("Message", 
"NoValue")));
+        processDefinition = EventBasedSplit5Process.newProcess(app);
+        model = processDefinition.createModel();
+        org.kie.kogito.process.ProcessInstance<EventBasedSplit5Model> 
instance2 = processDefinition.createInstance(model);
+        instance2.start();
+        
assertThat(instance2.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_ACTIVE);
+        Assertions.assertNull(instance2.variables().getX());
 
-        assertProcessInstanceCompleted(processInstance.getStringId(), 
kruntime);
+        receiveTaskHandler.getWorkItemId().stream().findFirst().ifPresent(id 
-> instance2.completeWorkItem(id, Map.of("Message", "NoValue")));
+        
assertThat(instance2.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
+        assertThat(instance2.variables().getX()).isEqualTo("NoValue");
 
-        receiveTaskHandler.getWorkItemId().forEach(id -> 
kruntime.getKogitoWorkItemManager().completeWorkItem(id, Map.of("Message", 
"YesValue")));
+    }
 
+    @Test
+    public void testEventBasedSplitWithSubprocess() {
+        Application app = ProcessTestHelper.newApplication();
+        
org.kie.kogito.process.Process<ExclusiveEventBasedGatewayInSubprocessModel> 
processDefinition =
+                ExclusiveEventBasedGatewayInSubprocessProcess.newProcess(app);
+        ExclusiveEventBasedGatewayInSubprocessModel model = 
processDefinition.createModel();
+        
org.kie.kogito.process.ProcessInstance<ExclusiveEventBasedGatewayInSubprocessModel>
 instance =
+                processDefinition.createInstance(model);
+        // Stop
+        instance.start();
+        
assertThat(instance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_ACTIVE);
+        instance.send(Sig.of("StopSignal", ""));
+        
assertThat(instance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_COMPLETED);
+        // Continue and Stop
+        instance = processDefinition.createInstance(model);
+        instance.start();
+        
assertThat(instance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_ACTIVE);
+        instance.send(Sig.of("ContinueSignal", ""));
+        
assertThat(instance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_ACTIVE);
+        instance.send(Sig.of("StopSignal", ""));
+        
assertThat(instance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_COMPLETED);
     }
 
     @Test
-    public void testEventBasedSplitWithSubprocess() throws Exception {
-        kruntime = createKogitoProcessRuntime(
-                
"org/jbpm/bpmn2/intermediate/BPMN2-ExclusiveEventBasedGatewayInSubprocess.bpmn2");
+    public void testEventSubprocessSignal() {
+        String[] nodes = { "start", "User Task 1", "end", "Sub Process 1", 
"start-sub", "sub-script", "end-sub" };
+        Application app = ProcessTestHelper.newApplication();
 
-        // Stop
-        KogitoProcessInstance processInstance = 
kruntime.startProcess("ExclusiveEventBasedGatewayInSubprocess");
-        assertProcessInstanceActive(processInstance);
+        TestWorkItemHandler workItemHandler = new TestWorkItemHandler();
+        ProcessTestHelper.registerHandler(app, "Human Task", workItemHandler);
+        List<String> executedNodes = new ArrayList<>();
 
-        kruntime.signalEvent("StopSignal", "", processInstance.getStringId());
-        assertProcessInstanceFinished(processInstance, kruntime);
+        KogitoProcessEventListener listener = new 
DefaultKogitoProcessEventListener() {
 
-        // Continue and Stop
-        processInstance = 
kruntime.startProcess("ExclusiveEventBasedGatewayInSubprocess");
-        assertProcessInstanceActive(processInstance);
+            @Override
+            public void afterNodeLeft(ProcessNodeLeftEvent event) {
+                if 
(event.getNodeInstance().getNodeName().equals("sub-script")) {
+                    executedNodes.add(((KogitoNodeInstance) 
event.getNodeInstance()).getStringId());
+                }
+            }
+        };
 
-        kruntime.signalEvent("ContinueSignal", "", 
processInstance.getStringId());
+        EventTrackerProcessListener eventTrackerProcessListener = new 
EventTrackerProcessListener();
 
-        assertProcessInstanceActive(processInstance);
+        ProcessTestHelper.registerProcessEventListener(app, listener);
+        ProcessTestHelper.registerProcessEventListener(app, 
eventTrackerProcessListener);
 
-        kruntime.signalEvent("StopSignal", "", processInstance.getStringId());
-        assertProcessInstanceFinished(processInstance, kruntime);
-    }
+        org.kie.kogito.process.Process<EventSubprocessSignalModel> 
processDefinition = EventSubprocessSignalProcess.newProcess(app);
+        EventSubprocessSignalModel model = processDefinition.createModel();
+        org.kie.kogito.process.ProcessInstance<EventSubprocessSignalModel> 
instance = processDefinition.createInstance(model);
 
-    @Test
-    public void testEventSubprocessSignal() throws Exception {
-        String[] nodes = { "start", "User Task 1", "end", "Sub Process 1", 
"start-sub", "sub-script", "end-sub" };
-        
runTestEventSubprocessSignal("org/jbpm/bpmn2/intermediate/BPMN2-EventSubprocessSignal.bpmn2",
-                "EventSubprocessSignal", nodes);
+        instance.start();
+        
assertThat(instance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_ACTIVE);
+
+        Set<EventDescription<?>> eventDescriptions = instance.events();
+        assertThat(eventDescriptions).hasSize(2) // Adjusted to expect two 
events
+                .extracting(EventDescription::getEvent)
+                .contains("MySignal", "workItemCompleted");
+        
assertThat(eventDescriptions).extracting(EventDescription::getEventType)
+                .contains("signal", "workItem");
+        
assertThat(eventDescriptions).extracting(EventDescription::getProcessInstanceId)
+                .contains(instance.id());
+
+        for (int i = 0; i < 4; i++) {
+            instance.send(Sig.of("MySignal"));
+            
assertThat(instance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_ACTIVE);
+        }
+
+        KogitoWorkItem workItem = workItemHandler.getWorkItem();
+        assertThat(workItem).isNotNull();
+        instance.completeWorkItem(workItem.getStringId(), null);
+
+        
assertThat(instance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_COMPLETED);
+        assertThatIterable(eventTrackerProcessListener.tracked()).extracting(a 
-> a.getNodeInstance().getNodeName()).contains(nodes);
+        assertThat(executedNodes).hasSize(4);
     }
 
     @Test
-    public void testEventSubprocessSignalNested() throws Exception {
-        String[] nodes = { "Start", "Sub Process", "Sub Start", "Sub Sub 
Process", "Sub Sub Start", "Sub Sub User Task",
-                "Sub Sub Sub Process", "start-sub", "sub-script", "end-sub", 
"Sub Sub End", "Sub End", "End" };
-        
runTestEventSubprocessSignal("org/jbpm/bpmn2/intermediate/BPMN2-EventSubprocessSignalNested.bpmn2",
-                "EventSubprocessSignalNested", nodes);
-    }
+    public void testEventSubprocessSignalNested() {
+        String[] nodes = { "Start", "Sub Process", "Sub Start", "Sub Sub 
Process", "Sub Sub Start", "Sub Sub User Task", "Sub Sub Sub Process", 
"start-sub", "sub-script", "end-sub", "Sub Sub End",
+                "Sub End", "End" };
+        Application app = ProcessTestHelper.newApplication();
 
-    public void runTestEventSubprocessSignal(String processFile, String[] 
completedNodes) throws Exception {
-        runTestEventSubprocessSignal(processFile, processFile, completedNodes);
-    }
+        TestWorkItemHandler workItemHandler = new TestWorkItemHandler();
+        ProcessTestHelper.registerHandler(app, "Human Task", workItemHandler);
+        List<String> executedNodes = new ArrayList<>();
 
-    public void runTestEventSubprocessSignal(String processFile, String 
processId, String[] completedNodes)
-            throws Exception {
-        kruntime = createKogitoProcessRuntime(processFile);
-        final List<String> executednodes = new ArrayList<>();
         KogitoProcessEventListener listener = new 
DefaultKogitoProcessEventListener() {
 
             @Override
             public void afterNodeLeft(ProcessNodeLeftEvent event) {
                 if 
(event.getNodeInstance().getNodeName().equals("sub-script")) {
-                    executednodes.add(((KogitoNodeInstance) 
event.getNodeInstance()).getStringId());
+                    executedNodes.add(((KogitoNodeInstance) 
event.getNodeInstance()).getStringId());
                 }
             }
-
         };
 
-        kruntime.getProcessEventManager().addEventListener(listener);
-        TestWorkItemHandler workItemHandler = new TestWorkItemHandler();
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Human 
Task", workItemHandler);
-        KogitoProcessInstance processInstance = 
kruntime.startProcess(processId);
-        assertProcessInstanceActive(processInstance);
-        kruntime.getProcessEventManager().addEventListener(listener);
+        EventTrackerProcessListener eventTrackerProcessListener = new 
EventTrackerProcessListener();
 
-        Set<EventDescription<?>> eventDescriptions = 
processInstance.getEventDescriptions();
-        
assertThat(eventDescriptions).hasSize(2).extracting("event").contains("MySignal",
 "workItemCompleted");
-        
assertThat(eventDescriptions).extracting("eventType").contains("signal", 
"workItem");
-        
assertThat(eventDescriptions).extracting("processInstanceId").contains(processInstance.getStringId());
-        kruntime.signalEvent("MySignal", null, processInstance.getStringId());
-        assertProcessInstanceActive(processInstance);
+        ProcessTestHelper.registerProcessEventListener(app, listener);
+        ProcessTestHelper.registerProcessEventListener(app, 
eventTrackerProcessListener);
 
-        kruntime.signalEvent("MySignal", null);
-        assertProcessInstanceActive(processInstance);
+        org.kie.kogito.process.Process<EventSubprocessSignalNestedModel> 
processDefinition = EventSubprocessSignalNestedProcess.newProcess(app);
+        EventSubprocessSignalNestedModel model = 
processDefinition.createModel();
+        
org.kie.kogito.process.ProcessInstance<EventSubprocessSignalNestedModel> 
instance = processDefinition.createInstance(model);
+
+        instance.start();
+        
assertThat(instance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_ACTIVE);
+
+        Set<EventDescription<?>> eventDescriptions = instance.events();
+        assertThat(eventDescriptions).hasSize(2) // Adjusted to expect two 
events
+                .extracting(EventDescription::getEvent)
+                .contains("MySignal", "workItemCompleted");
+        
assertThat(eventDescriptions).extracting(EventDescription::getEventType)
+                .contains("signal", "workItem");
+        
assertThat(eventDescriptions).extracting(EventDescription::getProcessInstanceId)
+                .contains(instance.id());
+
+        for (int i = 0; i < 4; i++) {
+            instance.send(Sig.of("MySignal"));
+            
assertThat(instance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_ACTIVE);
+        }
 
-        kruntime.signalEvent("MySignal", null);
-        assertProcessInstanceActive(processInstance);
-        kruntime.signalEvent("MySignal", null);
-        assertProcessInstanceActive(processInstance);
         KogitoWorkItem workItem = workItemHandler.getWorkItem();
         assertThat(workItem).isNotNull();
+        instance.completeWorkItem(workItem.getStringId(), null);
 
-        
kruntime.getKogitoWorkItemManager().completeWorkItem(workItem.getStringId(), 
null);
-        assertProcessInstanceFinished(processInstance, kruntime);
-        assertNodeTriggered(processInstance.getStringId(), completedNodes);
-        assertThat(executednodes).hasSize(4);
-
+        
assertThat(instance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_COMPLETED);
+        assertThatIterable(eventTrackerProcessListener.tracked()).extracting(a 
-> a.getNodeInstance().getNodeName()).contains(nodes);
+        assertThat(executedNodes).hasSize(4);
     }
 
     @Test
-    public void testEventSubprocessSignalWithStateNode() throws Exception {
-        kruntime = createKogitoProcessRuntime(
-                
"org/jbpm/bpmn2/intermediate/BPMN2-EventSubprocessSignalWithStateNode.bpmn2");
-        final List<String> executednodes = new ArrayList<>();
+    public void testEventSubprocessSignalWithStateNode() {
+        String[] nodes = { "start", "User Task 1", "end", "Sub Process 1", 
"start-sub", "User Task 2", "end-sub" };
+        Application app = ProcessTestHelper.newApplication();
+        TestWorkItemHandler workItemHandler = new TestWorkItemHandler();
+        ProcessTestHelper.registerHandler(app, "Human Task", workItemHandler);
+        List<String> executedNodes = new ArrayList<>();
         KogitoProcessEventListener listener = new 
DefaultKogitoProcessEventListener() {
-
             @Override
             public void afterNodeLeft(ProcessNodeLeftEvent event) {
                 if (event.getNodeInstance().getNodeName().equals("User Task 
2")) {
-                    executednodes.add(((KogitoNodeInstance) 
event.getNodeInstance()).getStringId());
+                    executedNodes.add(((KogitoNodeInstance) 
event.getNodeInstance()).getStringId());
                 }
             }
-
         };
+        EventTrackerProcessListener eventTrackerProcessListener = new 
EventTrackerProcessListener();
+        ProcessTestHelper.registerProcessEventListener(app, listener);
+        ProcessTestHelper.registerProcessEventListener(app, 
eventTrackerProcessListener);
 
-        kruntime.getProcessEventManager().addEventListener(listener);
-        TestWorkItemHandler workItemHandler = new TestWorkItemHandler();
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Human 
Task", workItemHandler);
-        KogitoProcessInstance processInstance = 
kruntime.startProcess("EventSubprocessSignalWithStateNode");
-        assertProcessInstanceActive(processInstance);
-        kruntime.getProcessEventManager().addEventListener(listener);
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Human 
Task", workItemHandler);
+        
org.kie.kogito.process.Process<EventSubprocessSignalWithStateNodeModel> 
processDefinition = EventSubprocessSignalWithStateNodeProcess.newProcess(app);
+        EventSubprocessSignalWithStateNodeModel model = 
processDefinition.createModel();
+        
org.kie.kogito.process.ProcessInstance<EventSubprocessSignalWithStateNodeModel> 
instance = processDefinition.createInstance(model);
+        instance.start();
 
+        
assertThat(instance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_ACTIVE);
         KogitoWorkItem workItemTopProcess = workItemHandler.getWorkItem();
+        instance.send(Sig.of("MySignal"));
+        
assertThat(instance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_ACTIVE);
 
-        kruntime.signalEvent("MySignal", null, processInstance.getStringId());
-        assertProcessInstanceActive(processInstance);
         KogitoWorkItem workItem = workItemHandler.getWorkItem();
         assertThat(workItem).isNotNull();
-        
kruntime.getKogitoWorkItemManager().completeWorkItem(workItem.getStringId(), 
null);
+        instance.completeWorkItem(workItem.getStringId(), null);
+        instance.send(Sig.of("MySignal"));
+        
assertThat(instance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_ACTIVE);
 
-        kruntime.signalEvent("MySignal", null);
-        assertProcessInstanceActive(processInstance);
         workItem = workItemHandler.getWorkItem();
         assertThat(workItem).isNotNull();
-        
kruntime.getKogitoWorkItemManager().completeWorkItem(workItem.getStringId(), 
null);
+        instance.completeWorkItem(workItem.getStringId(), null);
+        instance.send(Sig.of("MySignal"));
+        
assertThat(instance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_ACTIVE);
 
-        kruntime.signalEvent("MySignal", null);
-        assertProcessInstanceActive(processInstance);
         workItem = workItemHandler.getWorkItem();
         assertThat(workItem).isNotNull();
-        
kruntime.getKogitoWorkItemManager().completeWorkItem(workItem.getStringId(), 
null);
+        instance.completeWorkItem(workItem.getStringId(), null);
+        instance.send(Sig.of("MySignal"));
+        
assertThat(instance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_ACTIVE);
 
-        kruntime.signalEvent("MySignal", null);
-        assertProcessInstanceActive(processInstance);
         workItem = workItemHandler.getWorkItem();
         assertThat(workItem).isNotNull();
-        
kruntime.getKogitoWorkItemManager().completeWorkItem(workItem.getStringId(), 
null);
+        instance.completeWorkItem(workItem.getStringId(), null);
 
         assertThat(workItemTopProcess).isNotNull();
-        
kruntime.getKogitoWorkItemManager().completeWorkItem(workItemTopProcess.getStringId(),
 null);
-        assertProcessInstanceFinished(processInstance, kruntime);
-        assertNodeTriggered(processInstance.getStringId(), "start", "User Task 
1", "end", "Sub Process 1", "start-sub",
-                "User Task 2", "end-sub");
-        assertThat(executednodes).hasSize(4);
+        instance.completeWorkItem(workItemTopProcess.getStringId(), null);
 
+        
assertThat(instance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_COMPLETED);
+        assertThatIterable(eventTrackerProcessListener.tracked()).extracting(a 
-> a.getNodeInstance().getNodeName()).contains(nodes);
+        assertThat(executedNodes).hasSize(4);
     }
 
     @Test
-    public void testEventSubprocessSignalInterrupting() throws Exception {
-        kruntime = createKogitoProcessRuntime(
-                
"org/jbpm/bpmn2/intermediate/BPMN2-EventSubprocessSignalInterrupting.bpmn2");
-        final List<String> executednodes = new ArrayList<>();
+    public void testEventSubprocessSignalInterrupting() {
+        String[] nodes = { "start", "User Task 1", "Sub Process 1", 
"start-sub", "Script Task 1", "end-sub" };
+        Application app = ProcessTestHelper.newApplication();
+        TestWorkItemHandler workItemHandler = new TestWorkItemHandler();
+        ProcessTestHelper.registerHandler(app, "Human Task", workItemHandler);
+        List<String> executedNodes = new ArrayList<>();
         KogitoProcessEventListener listener = new 
DefaultKogitoProcessEventListener() {
-
             @Override
             public void afterNodeLeft(ProcessNodeLeftEvent event) {
                 if (event.getNodeInstance().getNodeName().equals("Script Task 
1")) {
-                    executednodes.add(((KogitoNodeInstance) 
event.getNodeInstance()).getStringId());
+                    executedNodes.add(((KogitoNodeInstance) 
event.getNodeInstance()).getStringId());
                 }
             }
-
         };
-        kruntime.getProcessEventManager().addEventListener(listener);
+        EventTrackerProcessListener tracker = new 
EventTrackerProcessListener();
+        ProcessTestHelper.registerProcessEventListener(app, listener);
+        ProcessTestHelper.registerProcessEventListener(app, tracker);
 
-        TestWorkItemHandler workItemHandler = new TestWorkItemHandler();
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Human 
Task", workItemHandler);
-        KogitoProcessInstance processInstance = 
kruntime.startProcess("EventSubprocessSignalInterrupting");
-        assertProcessInstanceActive(processInstance);
-        kruntime.getProcessEventManager().addEventListener(listener);
+        org.kie.kogito.process.Process<EventSubprocessSignalInterruptingModel> 
processDefinition = EventSubprocessSignalInterruptingProcess.newProcess(app);
+        EventSubprocessSignalInterruptingModel model = 
processDefinition.createModel();
+        
org.kie.kogito.process.ProcessInstance<EventSubprocessSignalInterruptingModel> 
instance = processDefinition.createInstance(model);
+        instance.start();
 
-        kruntime.signalEvent("MySignal", null, processInstance.getStringId());
+        
assertThat(instance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_ACTIVE);
 
-        assertProcessInstanceFinished(processInstance, kruntime);
-        assertNodeTriggered(processInstance.getStringId(), "start", "User Task 
1", "Sub Process 1", "start-sub",
-                "Script Task 1", "end-sub");
-        assertThat(executednodes).hasSize(1);
+        instance.send(Sig.of("MySignal"));
 
+        assertThat(instance.status()).isEqualTo(ProcessInstance.STATE_ABORTED);
+        assertThat(executedNodes).hasSize(1);
+        assertThatIterable(tracker.tracked()).extracting(a -> 
a.getNodeInstance().getNodeName()).contains(nodes);
     }
 
     @Test
@@ -982,37 +976,32 @@ public class IntermediateEventTest extends 
JbpmBpmn2TestCase {
     }
 
     @Test
-    public void testEventSubprocessMessageWithLocalVars() throws Exception {
+    public void testEventSubprocessMessageWithLocalVars() {
+        Application app = ProcessTestHelper.newApplication();
         NodeLeftCountDownProcessEventListener countDownListener = new 
NodeLeftCountDownProcessEventListener("timer", 1);
-
-        kruntime = createKogitoProcessRuntime(
-                
"org/jbpm/bpmn2/intermediate/BPMN2-EventSubProcessWithLocalVariables.bpmn2");
-        final Set<String> variablevalues = new HashSet<String>();
+        ProcessTestHelper.registerProcessEventListener(app, countDownListener);
+        final Set<String> variableValues = new HashSet<>();
         KogitoProcessEventListener listener = new 
DefaultKogitoProcessEventListener() {
-
             @Override
             public void afterNodeLeft(ProcessNodeLeftEvent event) {
 
                 @SuppressWarnings("unchecked")
                 Map<String, String> variable = (Map<String, String>) 
event.getNodeInstance().getVariable("richiesta");
                 if (variable != null) {
-                    variablevalues.addAll(variable.keySet());
+                    variableValues.addAll(variable.keySet());
                 }
             }
-
         };
-        kruntime.getProcessEventManager().addEventListener(listener);
-        kruntime.getProcessEventManager().addEventListener(countDownListener);
-        KogitoProcessInstance processInstance = 
kruntime.startProcess("EventSubProcessWithLocalVariables");
-        assertProcessInstanceActive(processInstance);
-
+        ProcessTestHelper.registerProcessEventListener(app, listener);
+        org.kie.kogito.process.Process<EventSubProcessWithLocalVariablesModel> 
process = EventSubProcessWithLocalVariablesProcess.newProcess(app);
+        ProcessInstance<EventSubProcessWithLocalVariablesModel> 
processInstance = process.createInstance(process.createModel());
+        processInstance.start();
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_ACTIVE);
         Map<String, String> data = new HashMap<>();
-        kruntime.signalEvent("Message-MAIL", data, 
processInstance.getStringId());
+        processInstance.send(Sig.of("Message-MAIL", data));
         countDownListener.waitTillCompleted();
-
-        processInstance = 
kruntime.getProcessInstance(processInstance.getStringId());
-        assertThat(processInstance).isNull();
-        assertThat(variablevalues).hasSize(2).contains("SCRIPT1", "SCRIPT2");
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_ABORTED);
+        assertThat(variableValues).hasSize(2).contains("SCRIPT1", "SCRIPT2");
     }
 
     @Test
@@ -1043,102 +1032,131 @@ public class IntermediateEventTest extends 
JbpmBpmn2TestCase {
     }
 
     @Test
-    public void testMessageBoundaryEventOnTask() throws Exception {
-        kruntime = 
createKogitoProcessRuntime("org/jbpm/bpmn2/intermediate/BPMN2-BoundaryMessageEventOnTask.bpmn2");
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Human 
Task", new TestWorkItemHandler());
+    public void testMessageBoundaryEventOnTask() {
+        Application app = ProcessTestHelper.newApplication();
+        List<String> triggeredNodes = new ArrayList<>();
 
-        KogitoProcessInstance processInstance = 
kruntime.startProcess("BoundaryMessageEventOnTask");
-        kruntime.signalEvent("Message-HelloMessage", "message data");
-        assertProcessInstanceFinished(processInstance, kruntime);
-        assertNodeTriggered(processInstance.getStringId(), "StartProcess", 
"User Task", "Boundary event",
-                "Condition met", "End2");
+        KogitoProcessEventListener listener = new 
DefaultKogitoProcessEventListener() {
+            @Override
+            public void afterNodeLeft(ProcessNodeLeftEvent event) {
+                triggeredNodes.add(event.getNodeInstance().getNodeName());
+            }
+        };
+        ProcessTestHelper.registerProcessEventListener(app, listener);
 
-    }
+        TestWorkItemHandler workItemHandler = new TestWorkItemHandler();
+        ProcessTestHelper.registerHandler(app, "Human Task", workItemHandler);
 
-    @Test
-    public void testMessageBoundaryEventOnTaskComplete() throws Exception {
-        kruntime = 
createKogitoProcessRuntime("org/jbpm/bpmn2/intermediate/BPMN2-BoundaryMessageEventOnTask.bpmn2");
-        TestWorkItemHandler handler = new TestWorkItemHandler();
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Human 
Task", handler);
+        org.kie.kogito.process.Process<BoundaryMessageEventOnTaskModel> 
process = BoundaryMessageEventOnTaskProcess.newProcess(app);
+        ProcessInstance<BoundaryMessageEventOnTaskModel> processInstance = 
process.createInstance(process.createModel());
+        processInstance.start();
 
-        KogitoProcessInstance processInstance = 
kruntime.startProcess("BoundaryMessageEventOnTask");
-        
kruntime.getKogitoWorkItemManager().completeWorkItem(handler.getWorkItem().getStringId(),
 null);
-        kruntime.signalEvent("Message-HelloMessage", "message data");
-        
kruntime.getKogitoWorkItemManager().completeWorkItem(handler.getWorkItem().getStringId(),
 null);
-        assertProcessInstanceFinished(processInstance, kruntime);
-        assertNodeTriggered(processInstance.getStringId(), "StartProcess", 
"User Task", "User Task2", "End1");
+        processInstance.send(Sig.of("Message-HelloMessage", "message data"));
 
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
+        assertThat(triggeredNodes).containsExactlyInAnyOrder("StartProcess", 
"User Task", "Boundary event", "Condition met", "End2");
     }
 
     @Test
-    public void testTimerBoundaryEventDuration() throws Exception {
-        ProcessCompletedCountDownProcessEventListener countDownListener = new 
ProcessCompletedCountDownProcessEventListener();
-        kruntime = 
createKogitoProcessRuntime("org/jbpm/bpmn2/timer/BPMN2-TimerBoundaryEventDuration.bpmn2");
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("MyTask", 
new DoNothingWorkItemHandler());
-        kruntime.getProcessEventManager().addEventListener(countDownListener);
-        KogitoProcessInstance processInstance = 
kruntime.startProcess("TimerBoundaryEventDuration");
-        assertProcessInstanceActive(processInstance);
+    public void testMessageBoundaryEventOnTaskComplete() {
+        String[] nodes = { "StartProcess", "User Task", "User Task2", "End1" };
+        Application app = ProcessTestHelper.newApplication();
+        EventTrackerProcessListener listener = new 
EventTrackerProcessListener();
+        ProcessTestHelper.registerProcessEventListener(app, listener);
+        TestWorkItemHandler workItemHandler = new TestWorkItemHandler();
+        ProcessTestHelper.registerHandler(app, "Human Task", workItemHandler);
 
-        Set<EventDescription<?>> eventDescriptions = 
processInstance.getEventDescriptions();
-        
assertThat(eventDescriptions).hasSize(2).extracting("event").contains("workItemCompleted",
-                TIMER_TRIGGERED_EVENT);
-        
assertThat(eventDescriptions).extracting("eventType").contains("workItem", 
"timer");
-        
assertThat(eventDescriptions).extracting("processInstanceId").contains(processInstance.getStringId());
-        assertThat(eventDescriptions).filteredOn("eventType", 
"timer").hasSize(1).extracting("properties", Map.class)
-                .anyMatch(m -> m.containsKey("TimerID") && 
m.containsKey("Period"));
+        org.kie.kogito.process.Process<BoundaryMessageEventOnTaskModel> 
process = BoundaryMessageEventOnTaskProcess.newProcess(app);
+        ProcessInstance<BoundaryMessageEventOnTaskModel> processInstance = 
process.createInstance(process.createModel());
+        processInstance.start();
 
-        countDownListener.waitTillCompleted();
-
-        assertProcessInstanceFinished(processInstance, kruntime);
+        
processInstance.completeWorkItem(workItemHandler.getWorkItem().getStringId(), 
null);
+        processInstance.send(Sig.of("Message-HelloMessage", "message data"));
+        
processInstance.completeWorkItem(workItemHandler.getWorkItem().getStringId(), 
null);
 
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
+        assertThatIterable(listener.tracked()).extracting(a -> 
a.getNodeInstance().getNodeName()).contains(nodes);
     }
 
     @Test
-    public void testTimerBoundaryEventDurationISO() throws Exception {
-        ProcessCompletedCountDownProcessEventListener countDownListener = new 
ProcessCompletedCountDownProcessEventListener();
-        kruntime = 
createKogitoProcessRuntime("org/jbpm/bpmn2/timer/BPMN2-TimerBoundaryEventDurationISO.bpmn2");
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("MyTask", 
new DoNothingWorkItemHandler());
-        kruntime.getProcessEventManager().addEventListener(countDownListener);
-        KogitoProcessInstance processInstance = 
kruntime.startProcess("TimerBoundaryEventDurationISO");
-        assertProcessInstanceActive(processInstance);
+    public void testTimerBoundaryEventDuration() {
+        Application app = ProcessTestHelper.newApplication();
+        ProcessCompletedCountDownProcessEventListener countDownListener = new 
ProcessCompletedCountDownProcessEventListener(2);
+        ProcessTestHelper.registerProcessEventListener(app, countDownListener);
+        ProcessTestHelper.registerHandler(app, "MyTask", new 
DoNothingWorkItemHandler());
+        org.kie.kogito.process.Process<TimerBoundaryEventDurationModel> 
process = TimerBoundaryEventDurationProcess.newProcess(app);
+        ProcessInstance<TimerBoundaryEventDurationModel> processInstance = 
process.createInstance(process.createModel());
+        processInstance.start();
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_ACTIVE);
+        Set<EventDescription<?>> eventDescriptions = processInstance.events();
+        assertThat(eventDescriptions).hasSize(2)
+                .extracting("event")
+                .contains("workItemCompleted", TIMER_TRIGGERED_EVENT);
+        assertThat(eventDescriptions).extracting("eventType")
+                .contains("workItem", "timer");
+        assertThat(eventDescriptions).extracting("processInstanceId")
+                .contains(processInstance.id());
+        assertThat(eventDescriptions).filteredOn("eventType", "timer")
+                .hasSize(1)
+                .extracting("properties", Map.class)
+                .anyMatch(m -> m.containsKey("TimerID") && 
m.containsKey("Period"));
         countDownListener.waitTillCompleted();
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
+    }
 
-        assertProcessInstanceFinished(processInstance, kruntime);
+    @Test
+    public void testTimerBoundaryEventDurationISO() {
+        Application app = ProcessTestHelper.newApplication();
+        ProcessCompletedCountDownProcessEventListener countDownListener = new 
ProcessCompletedCountDownProcessEventListener(2);
+        ProcessTestHelper.registerProcessEventListener(app, countDownListener);
+        ProcessTestHelper.registerHandler(app, "MyTask", new 
DoNothingWorkItemHandler());
+
+        org.kie.kogito.process.Process<TimerBoundaryEventDurationISOModel> 
definition = TimerBoundaryEventDurationISOProcess.newProcess(app);
+        TimerBoundaryEventDurationISOModel model = definition.createModel();
+        
org.kie.kogito.process.ProcessInstance<TimerBoundaryEventDurationISOModel> 
processInstance = definition.createInstance(model);
+        processInstance.start();
+
+        
assertThat(processInstance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_ACTIVE);
+        countDownListener.waitTillCompleted();
+        
assertThat(processInstance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_COMPLETED);
     }
 
     @Test
-    public void testTimerBoundaryEventDateISO() throws Exception {
-        ProcessCompletedCountDownProcessEventListener countDownListener = new 
ProcessCompletedCountDownProcessEventListener();
+    public void testTimerBoundaryEventDateISO() {
+        Application app = ProcessTestHelper.newApplication();
+        ProcessCompletedCountDownProcessEventListener countDownListener = new 
ProcessCompletedCountDownProcessEventListener(2);
+        ProcessTestHelper.registerProcessEventListener(app, countDownListener);
+        ProcessTestHelper.registerHandler(app, "MyTask", new 
DoNothingWorkItemHandler());
+
+        org.kie.kogito.process.Process<TimerBoundaryEventDateISOModel> 
definition = TimerBoundaryEventDateISOProcess.newProcess(app);
+        TimerBoundaryEventDateISOModel model = definition.createModel();
 
-        kruntime = 
createKogitoProcessRuntime("org/jbpm/bpmn2/timer/BPMN2-TimerBoundaryEventDateISO.bpmn2");
-        kruntime.getProcessEventManager().addEventListener(countDownListener);
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("MyTask", 
new DoNothingWorkItemHandler());
-        HashMap<String, Object> params = new HashMap<>();
         OffsetDateTime plusTwoSeconds = OffsetDateTime.now().plusSeconds(2);
-        params.put("date", plusTwoSeconds.toString());
-        KogitoProcessInstance processInstance = 
kruntime.startProcess("TimerBoundaryEventDateISO", params);
-        assertProcessInstanceActive(processInstance);
-        countDownListener.waitTillCompleted();
+        model.setDate(plusTwoSeconds.toString());
 
-        assertProcessInstanceFinished(processInstance, kruntime);
+        org.kie.kogito.process.ProcessInstance<TimerBoundaryEventDateISOModel> 
processInstance = definition.createInstance(model);
+        processInstance.start();
 
+        
assertThat(processInstance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_ACTIVE);
+        countDownListener.waitTillCompleted();
+        
assertThat(processInstance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_COMPLETED);
     }
 
     @Test
-    public void testTimerBoundaryEventCycle1() {
-        ProcessCompletedCountDownProcessEventListener countDownListener = new 
ProcessCompletedCountDownProcessEventListener(2);
+    public void testTimerBoundaryEventCycle1() throws Exception {
         Application app = ProcessTestHelper.newApplication();
-        ProcessTestHelper.registerHandler(app, "MyTask", new 
DoNothingWorkItemHandler());
+        NodeLeftCountDownProcessEventListener countDownListener = new 
NodeLeftCountDownProcessEventListener("TimerEvent", 3);
         ProcessTestHelper.registerProcessEventListener(app, countDownListener);
+        ProcessTestHelper.registerHandler(app, "MyTask", new 
DoNothingWorkItemHandler());
 
-        org.kie.kogito.process.Process<TimerBoundaryEventCycle1Model> 
processDefinition = TimerBoundaryEventCycle1Process.newProcess(app);
-        TimerBoundaryEventCycle1Model model = processDefinition.createModel();
-        org.kie.kogito.process.ProcessInstance<TimerBoundaryEventCycle1Model> 
instance = processDefinition.createInstance(model);
-        instance.start();
+        org.kie.kogito.process.Process<TimerBoundaryEventCycle1Model> 
definition = TimerBoundaryEventCycle1Process.newProcess(app);
+        TimerBoundaryEventCycle1Model model = definition.createModel();
+        org.kie.kogito.process.ProcessInstance<TimerBoundaryEventCycle1Model> 
processInstance = definition.createInstance(model);
+        processInstance.start();
 
-        
assertThat(instance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_ACTIVE);
+        
assertThat(processInstance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_ACTIVE);
         countDownListener.waitTillCompleted();
-        
assertThat(instance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_COMPLETED);
+        
assertThat(processInstance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_COMPLETED);
     }
 
     @Test
@@ -1162,17 +1180,24 @@ public class IntermediateEventTest extends 
JbpmBpmn2TestCase {
 
     @Test
     @RequirePersistence(false)
-    public void testTimerBoundaryEventCycleISO() throws Exception {
-        NodeLeftCountDownProcessEventListener countDownListener = new 
NodeLeftCountDownProcessEventListener(
-                "TimerEvent", 2);
-        kruntime = 
createKogitoProcessRuntime("org/jbpm/bpmn2/timer/BPMN2-TimerBoundaryEventCycleISO.bpmn2");
-        kruntime.getProcessEventManager().addEventListener(countDownListener);
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("MyTask", 
new DoNothingWorkItemHandler());
-        KogitoProcessInstance processInstance = 
kruntime.startProcess("TimerBoundaryEventCycleISO");
-        assertProcessInstanceActive(processInstance);
+    public void testTimerBoundaryEventCycleISO() {
+        Application app = ProcessTestHelper.newApplication();
+        NodeLeftCountDownProcessEventListener countDownListener = new 
NodeLeftCountDownProcessEventListener("TimerEvent", 2);
+        ProcessTestHelper.registerProcessEventListener(app, countDownListener);
+        ProcessTestHelper.registerHandler(app, "MyTask", new 
DoNothingWorkItemHandler());
+
+        org.kie.kogito.process.Process<TimerBoundaryEventCycleISOModel> 
definition = TimerBoundaryEventCycleISOProcess.newProcess(app);
+        TimerBoundaryEventCycleISOModel model = definition.createModel();
+
+        
org.kie.kogito.process.ProcessInstance<TimerBoundaryEventCycleISOModel> 
processInstance = definition.createInstance(model);
+        processInstance.start();
+
+        
assertThat(processInstance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_ACTIVE);
+
         countDownListener.waitTillCompleted();
-        assertProcessInstanceActive(processInstance);
-        kruntime.abortProcessInstance(processInstance.getStringId());
+        
assertThat(processInstance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_ACTIVE);
+
+        processInstance.abort();
     }
 
     @Test
@@ -1216,33 +1241,44 @@ public class IntermediateEventTest extends 
JbpmBpmn2TestCase {
         Application app = ProcessTestHelper.newApplication();
         TestWorkItemHandler handler = new TestWorkItemHandler();
         ProcessTestHelper.registerHandler(app, "Human Task", handler);
-        
org.kie.kogito.process.Process<TimerBoundaryEventInterruptingOnTaskCancelTimerModel>
 processDefinition = 
TimerBoundaryEventInterruptingOnTaskCancelTimerProcess.newProcess(app);
-        TimerBoundaryEventInterruptingOnTaskCancelTimerModel model = 
processDefinition.createModel();
-        
org.kie.kogito.process.ProcessInstance<TimerBoundaryEventInterruptingOnTaskCancelTimerModel>
 instance = processDefinition.createInstance(model);
-        instance.start();
-        
assertThat(instance).extracting(ProcessInstance::status).isEqualTo(ProcessInstance.STATE_ACTIVE);
+        
org.kie.kogito.process.Process<TimerBoundaryEventInterruptingOnTaskCancelTimerModel>
 definition =
+                
TimerBoundaryEventInterruptingOnTaskCancelTimerProcess.newProcess(app);
+        TimerBoundaryEventInterruptingOnTaskCancelTimerModel model = 
definition.createModel();
+        ProcessInstance<TimerBoundaryEventInterruptingOnTaskCancelTimerModel> 
processInstance = definition.createInstance(model);
+
+        processInstance.start();
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_ACTIVE);
+
         KogitoWorkItem workItem = handler.getWorkItem();
-        assertThat(workItem).isNotNull();
-        instance.completeWorkItem(workItem.getStringId(), null);
+        if (workItem != null) {
+            processInstance.completeWorkItem(workItem.getStringId(), null);
+        }
         workItem = handler.getWorkItem();
-        assertThat(workItem).isNotNull();
-        instance.completeWorkItem(workItem.getStringId(), null);
-
-        
assertThat(instance).extracting(ProcessInstance::status).isEqualTo(ProcessInstance.STATE_COMPLETED);
+        if (workItem != null) {
+            processInstance.completeWorkItem(workItem.getStringId(), null);
+        }
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
     }
 
     @Test
-    public void testIntermediateCatchEventSignal() throws Exception {
-        kruntime = 
createKogitoProcessRuntime("org/jbpm/bpmn2/intermediate/BPMN2-IntermediateCatchEventSignal.bpmn2");
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Human 
Task", new SystemOutWorkItemHandler());
-        KogitoProcessInstance processInstance = 
kruntime.startProcess("IntermediateCatchEventSignal");
-        assertProcessInstanceActive(processInstance);
-
-        // now signal process instance
-        kruntime.signalEvent("MyMessage", "SomeValue", 
processInstance.getStringId());
-        assertProcessInstanceFinished(processInstance, kruntime);
-        assertNodeTriggered(processInstance.getStringId(), "StartProcess", 
"UserTask", "EndProcess", "event");
-
+    public void testIntermediateCatchEventSignal() {
+        Application app = ProcessTestHelper.newApplication();
+        List<String> triggeredNodes = new ArrayList<>();
+        KogitoProcessEventListener listener = new 
DefaultKogitoProcessEventListener() {
+            @Override
+            public void afterNodeLeft(ProcessNodeLeftEvent event) {
+                triggeredNodes.add(event.getNodeInstance().getNodeName());
+            }
+        };
+        ProcessTestHelper.registerProcessEventListener(app, listener);
+        ProcessTestHelper.registerHandler(app, "Human Task", new 
SystemOutWorkItemHandler());
+        org.kie.kogito.process.Process<IntermediateCatchEventSignalModel> 
process = IntermediateCatchEventSignalProcess.newProcess(app);
+        ProcessInstance<IntermediateCatchEventSignalModel> processInstance = 
process.createInstance(process.createModel());
+        processInstance.start();
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_ACTIVE);
+        processInstance.send(Sig.of("MyMessage", "SomeValue"));
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
+        assertThat(triggeredNodes).containsExactlyInAnyOrder("StartProcess", 
"UserTask", "Event", "event", "EndProcess");
     }
 
     @Test
@@ -1259,16 +1295,16 @@ public class IntermediateEventTest extends 
JbpmBpmn2TestCase {
     }
 
     @Test
-    public void testIntermediateCatchEventMessageWithRef() {
+    public void testIntermediateCatchEventMessageWithRef() throws Exception {
         Application app = ProcessTestHelper.newApplication();
         ProcessTestHelper.registerHandler(app, "Human Task", new 
SystemOutWorkItemHandler());
-        
org.kie.kogito.process.Process<IntermediateCatchEventMessageWithRefModel> 
processDefinition = IntermediateCatchEventMessageWithRefProcess.newProcess(app);
-        IntermediateCatchEventMessageWithRefModel model = 
processDefinition.createModel();
-        
org.kie.kogito.process.ProcessInstance<IntermediateCatchEventMessageWithRefModel>
 instance = processDefinition.createInstance(model);
-        instance.start();
-        
assertThat(instance).extracting(ProcessInstance::status).isEqualTo(ProcessInstance.STATE_ACTIVE);
-        instance.send(Sig.of("Message-HelloMessage", "SomeValue"));
-        
assertThat(instance).extracting(ProcessInstance::status).isEqualTo(ProcessInstance.STATE_COMPLETED);
+        
org.kie.kogito.process.Process<IntermediateCatchEventMessageWithRefModel> 
process = IntermediateCatchEventMessageWithRefProcess.newProcess(app);
+        ProcessInstance<IntermediateCatchEventMessageWithRefModel> 
processInstance = process.createInstance(process.createModel());
+        processInstance.start();
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_ACTIVE);
+        // now signal process instance
+        processInstance.send(Sig.of("Message-HelloMessage", "SomeValue"));
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
     }
 
     @Test
@@ -1290,98 +1326,113 @@ public class IntermediateEventTest extends 
JbpmBpmn2TestCase {
     }
 
     @Test
-    public void testIntermediateCatchEventTimerDateISO() {
+    public void testIntermediateCatchEventTimerDateISO() throws Exception {
         Application app = ProcessTestHelper.newApplication();
-        ProcessCompletedCountDownProcessEventListener countDownListener = new 
ProcessCompletedCountDownProcessEventListener();
+        ProcessCompletedCountDownProcessEventListener countDownListener = new 
ProcessCompletedCountDownProcessEventListener(2);
         ProcessTestHelper.registerProcessEventListener(app, countDownListener);
         ProcessTestHelper.registerHandler(app, "Human Task", new 
DoNothingWorkItemHandler());
 
-        
org.kie.kogito.process.Process<IntermediateCatchEventTimerDateISOModel> 
processDefinition = IntermediateCatchEventTimerDateISOProcess.newProcess(app);
-        IntermediateCatchEventTimerDateISOModel model = 
processDefinition.createModel();
+        
org.kie.kogito.process.Process<IntermediateCatchEventTimerDateISOModel> 
definition = IntermediateCatchEventTimerDateISOProcess.newProcess(app);
+        IntermediateCatchEventTimerDateISOModel model = 
definition.createModel();
+
         OffsetDateTime plusTwoSeconds = OffsetDateTime.now().plusSeconds(2);
         model.setDate(plusTwoSeconds.toString());
-        
org.kie.kogito.process.ProcessInstance<IntermediateCatchEventTimerDateISOModel> 
instance = processDefinition.createInstance(model);
-        instance.start();
-        
assertThat(instance).extracting(ProcessInstance::status).isEqualTo(ProcessInstance.STATE_ACTIVE);
 
-        boolean completed = countDownListener.waitTillCompleted(3000);
-        assertThat(completed).isTrue();
+        ProcessInstance<IntermediateCatchEventTimerDateISOModel> 
processInstance = definition.createInstance(model);
+        processInstance.start();
 
-        
assertThat(instance).extracting(ProcessInstance::status).isEqualTo(ProcessInstance.STATE_COMPLETED);
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_ACTIVE);
+
+        // Wait for the timer to trigger
+        countDownListener.waitTillCompleted();
+
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
     }
 
     @Test
-    public void testIntermediateCatchEventTimerDurationISO() {
+    public void testIntermediateCatchEventTimerDurationISO() throws Exception {
         Application app = ProcessTestHelper.newApplication();
+        ProcessCompletedCountDownProcessEventListener countDownListener = new 
ProcessCompletedCountDownProcessEventListener(2);
+        ProcessTestHelper.registerProcessEventListener(app, countDownListener);
+        ProcessTestHelper.registerHandler(app, "Human Task", new 
DoNothingWorkItemHandler());
+
+        
org.kie.kogito.process.Process<IntermediateCatchEventTimerDurationISOModel> 
definition = IntermediateCatchEventTimerDurationISOProcess.newProcess(app);
+        IntermediateCatchEventTimerDurationISOModel model = 
definition.createModel();
+
+        ProcessInstance<IntermediateCatchEventTimerDurationISOModel> 
processInstance = definition.createInstance(model);
+        processInstance.start();
+
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_ACTIVE);
 
-        ProcessCompletedCountDownProcessEventListener countDownListener = new 
ProcessCompletedCountDownProcessEventListener();
-        ProcessTestHelper.registerProcessEventListener(app, countDownListener);
-        ProcessTestHelper.registerHandler(app, "Human Task", new 
DoNothingWorkItemHandler());
+        // Wait for the timer to trigger
+        countDownListener.waitTillCompleted();
 
-        
org.kie.kogito.process.Process<IntermediateCatchEventTimerDurationISOModel> 
processDefinition = 
IntermediateCatchEventTimerDurationISOProcess.newProcess(app);
-        IntermediateCatchEventTimerDurationISOModel model = 
processDefinition.createModel();
-        
org.kie.kogito.process.ProcessInstance<IntermediateCatchEventTimerDurationISOModel>
 instance = processDefinition.createInstance(model);
-        instance.start();
-        
assertThat(instance).extracting(ProcessInstance::status).isEqualTo(ProcessInstance.STATE_ACTIVE);
-        boolean completed = countDownListener.waitTillCompleted(2000);
-        assertThat(completed).isTrue();
-        
assertThat(instance).extracting(ProcessInstance::status).isEqualTo(ProcessInstance.STATE_COMPLETED);
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
     }
 
     @Test
-    public void testIntermediateCatchEventTimerCycle1() {
+    public void testIntermediateCatchEventTimerCycle1() throws Exception {
         Application app = ProcessTestHelper.newApplication();
-        ProcessCompletedCountDownProcessEventListener countDownListener = new 
ProcessCompletedCountDownProcessEventListener(); // Expecting 1 completion event
+        ProcessCompletedCountDownProcessEventListener countDownListener = new 
ProcessCompletedCountDownProcessEventListener(2);
         ProcessTestHelper.registerProcessEventListener(app, countDownListener);
         ProcessTestHelper.registerHandler(app, "Human Task", new 
DoNothingWorkItemHandler());
 
-        org.kie.kogito.process.Process<IntermediateCatchEventTimerCycle1Model> 
processDefinition = IntermediateCatchEventTimerCycle1Process.newProcess(app);
-        IntermediateCatchEventTimerCycle1Model model = 
processDefinition.createModel();
-        
org.kie.kogito.process.ProcessInstance<IntermediateCatchEventTimerCycle1Model> 
instance = processDefinition.createInstance(model);
-        instance.start();
-        
assertThat(instance).extracting(ProcessInstance::status).isEqualTo(ProcessInstance.STATE_ACTIVE);
-        boolean completed = countDownListener.waitTillCompleted(2000); // Wait 
for up to 2 seconds
-        assertThat(completed).isTrue();
-        
assertThat(instance).extracting(ProcessInstance::status).isEqualTo(ProcessInstance.STATE_COMPLETED);
+        org.kie.kogito.process.Process<IntermediateCatchEventTimerCycle1Model> 
definition = IntermediateCatchEventTimerCycle1Process.newProcess(app);
+        IntermediateCatchEventTimerCycle1Model model = 
definition.createModel();
+
+        ProcessInstance<IntermediateCatchEventTimerCycle1Model> 
processInstance = definition.createInstance(model);
+        processInstance.start();
+
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_ACTIVE);
+
+        // Wait for the timer to trigger
+        countDownListener.waitTillCompleted();
+
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
     }
 
     @Test
-    public void testIntermediateCatchEventTimerCycleISO() {
+    public void testIntermediateCatchEventTimerCycleISO() throws Exception {
         Application app = ProcessTestHelper.newApplication();
         NodeLeftCountDownProcessEventListener countDownListener = new 
NodeLeftCountDownProcessEventListener("timer", 5);
         ProcessTestHelper.registerProcessEventListener(app, countDownListener);
         ProcessTestHelper.registerHandler(app, "Human Task", new 
DoNothingWorkItemHandler());
-        
org.kie.kogito.process.Process<IntermediateCatchEventTimerCycleISOModel> 
processDefinition = IntermediateCatchEventTimerCycleISOProcess.newProcess(app);
-        IntermediateCatchEventTimerCycleISOModel model = 
processDefinition.createModel();
-        
org.kie.kogito.process.ProcessInstance<IntermediateCatchEventTimerCycleISOModel>
 instance = processDefinition.createInstance(model);
-        instance.start();
-        
assertThat(instance).extracting(ProcessInstance::status).isEqualTo(ProcessInstance.STATE_ACTIVE);
-        boolean completed = countDownListener.waitTillCompleted();
-        assertThat(completed).isTrue();
-        
assertThat(instance).extracting(ProcessInstance::status).isEqualTo(ProcessInstance.STATE_ACTIVE);
-        instance.abort();
-        
assertThat(instance).extracting(ProcessInstance::status).isEqualTo(ProcessInstance.STATE_ABORTED);
+
+        
org.kie.kogito.process.Process<IntermediateCatchEventTimerCycleISOModel> 
definition = IntermediateCatchEventTimerCycleISOProcess.newProcess(app);
+        IntermediateCatchEventTimerCycleISOModel model = 
definition.createModel();
+
+        
org.kie.kogito.process.ProcessInstance<IntermediateCatchEventTimerCycleISOModel>
 processInstance = definition.createInstance(model);
+        processInstance.start();
+
+        
assertThat(processInstance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_ACTIVE);
+
+        countDownListener.waitTillCompleted();
+
+        
assertThat(processInstance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_ACTIVE);
+
+        processInstance.abort();
     }
 
     @Test
-    public void testIntermediateCatchEventTimerCycle2() {
+    public void testIntermediateCatchEventTimerCycle2() throws Exception {
         Application app = ProcessTestHelper.newApplication();
         NodeLeftCountDownProcessEventListener countDownListener = new 
NodeLeftCountDownProcessEventListener("timer", 3);
         ProcessTestHelper.registerProcessEventListener(app, countDownListener);
         ProcessTestHelper.registerHandler(app, "Human Task", new 
DoNothingWorkItemHandler());
 
-        org.kie.kogito.process.Process<IntermediateCatchEventTimerCycle2Model> 
processDefinition = IntermediateCatchEventTimerCycle2Process.newProcess(app);
-        IntermediateCatchEventTimerCycle2Model model = 
processDefinition.createModel();
-        
org.kie.kogito.process.ProcessInstance<IntermediateCatchEventTimerCycle2Model> 
instance = processDefinition.createInstance(model);
-        instance.start();
-        
assertThat(instance).extracting(ProcessInstance::status).isEqualTo(ProcessInstance.STATE_ACTIVE);
+        org.kie.kogito.process.Process<IntermediateCatchEventTimerCycle2Model> 
definition = IntermediateCatchEventTimerCycle2Process.newProcess(app);
+        IntermediateCatchEventTimerCycle2Model model = 
definition.createModel();
 
-        // now wait for 1 second for timer to trigger
-        boolean completed = countDownListener.waitTillCompleted(); // Wait for 
up to 10 seconds
-        assertThat(completed).isTrue();
-        
assertThat(instance).extracting(ProcessInstance::status).isEqualTo(ProcessInstance.STATE_ACTIVE);
-        instance.abort();
-        
assertThat(instance).extracting(ProcessInstance::status).isEqualTo(ProcessInstance.STATE_ABORTED);
+        
org.kie.kogito.process.ProcessInstance<IntermediateCatchEventTimerCycle2Model> 
processInstance = definition.createInstance(model);
+        processInstance.start();
+
+        
assertThat(processInstance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_ACTIVE);
+
+        countDownListener.waitTillCompleted();
+
+        
assertThat(processInstance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_ACTIVE);
+
+        processInstance.abort();
     }
 
     @Test
@@ -1390,13 +1441,11 @@ public class IntermediateEventTest extends 
JbpmBpmn2TestCase {
                 
"org/jbpm/bpmn2/intermediate/BPMN2-IntermediateCatchEventCondition.bpmn2");
         KogitoProcessInstance processInstance = 
kruntime.startProcess("IntermediateCatchEventCondition");
         assertProcessInstanceActive(processInstance);
-
         // now activate condition
         Person person = new Person();
         person.setName("Jack");
         kruntime.getKieSession().insert(person);
         assertProcessInstanceFinished(processInstance, kruntime);
-
     }
 
     @Test
@@ -1443,95 +1492,91 @@ public class IntermediateEventTest extends 
JbpmBpmn2TestCase {
 
     @Test
     @RequirePersistence(false)
-    public void testIntermediateCatchEventTimerCycleWithError() throws 
Exception {
+    public void testIntermediateCatchEventTimerCycleWithError() {
+
+        Application app = ProcessTestHelper.newApplication();
         NodeLeftCountDownProcessEventListener countDownListener = new 
NodeLeftCountDownProcessEventListener("timer", 3);
+        ProcessTestHelper.registerProcessEventListener(app, countDownListener);
 
-        kruntime = createKogitoProcessRuntime(
-                
"org/jbpm/bpmn2/intermediate/BPMN2-IntermediateCatchEventTimerCycleWithError.bpmn2");
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Human 
Task", new DoNothingWorkItemHandler());
-        kruntime.getProcessEventManager().addEventListener(countDownListener);
-        Map<String, Object> params = new HashMap<>();
-        params.put("x", 0);
-        KogitoProcessInstance processInstance = 
kruntime.startProcess("IntermediateCatchEventTimerCycleWithError",
-                params);
-        assertProcessInstanceActive(processInstance);
-        // now wait for 1 second for timer to trigger
-        countDownListener.waitTillCompleted();
-        assertProcessInstanceActive(processInstance);
+        
org.kie.kogito.process.Process<IntermediateCatchEventTimerCycleWithErrorModel> 
definition = IntermediateCatchEventTimerCycleWithErrorProcess.newProcess(app);
+        IntermediateCatchEventTimerCycleWithErrorModel model = 
definition.createModel();
+        model.setX(0);
+        
org.kie.kogito.process.ProcessInstance<IntermediateCatchEventTimerCycleWithErrorModel>
 processInstance = definition.createInstance(model);
+        processInstance.start();
 
-        processInstance = 
kruntime.getProcessInstance(processInstance.getStringId());
-        Integer xValue = (Integer) ((KogitoWorkflowProcessInstance) 
processInstance).getVariable("x");
-        assertThat(xValue).isEqualTo(3);
+        
assertThat(processInstance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_ACTIVE);
 
-        kruntime.abortProcessInstance(processInstance.getStringId());
-        assertProcessInstanceFinished(processInstance, kruntime);
+        countDownListener.waitTillCompleted();
+        
assertThat(processInstance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_ACTIVE);
+        Integer xValue = processInstance.variables().getX();
+        assertThat(xValue).isGreaterThan(0);
+        assertThat(xValue).isLessThanOrEqualTo(3);
+        processInstance.abort();
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_ABORTED);
 
     }
 
     @Test
     @RequirePersistence
-    public void testIntermediateCatchEventTimerCycleWithErrorWithPersistence() 
throws Exception {
+    public void testIntermediateCatchEventTimerCycleWithErrorWithPersistence() 
{
+        Application app = ProcessTestHelper.newApplication();
         NodeLeftCountDownProcessEventListener countDownListener = new 
NodeLeftCountDownProcessEventListener("timer", 2);
+        ProcessTestHelper.registerProcessEventListener(app, countDownListener);
+        ProcessTestHelper.registerHandler(app, "Human Task", new 
DoNothingWorkItemHandler());
 
-        kruntime = createKogitoProcessRuntime(
-                
"org/jbpm/bpmn2/intermediate/BPMN2-IntermediateCatchEventTimerCycleWithError.bpmn2");
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Human 
Task", new DoNothingWorkItemHandler());
-        kruntime.getProcessEventManager().addEventListener(countDownListener);
-        KogitoProcessInstance processInstance = 
kruntime.startProcess("IntermediateCatchEventTimerCycleWithError");
-        assertProcessInstanceActive(processInstance);
+        
org.kie.kogito.process.Process<IntermediateCatchEventTimerCycleWithErrorModel> 
definition =
+                
IntermediateCatchEventTimerCycleWithErrorProcess.newProcess(app);
 
-        final String piId = processInstance.getStringId();
-        kruntime.getKieSession().execute((ExecutableCommand<Void>) context -> {
-            KogitoWorkflowProcessInstance processInstance1 = 
(KogitoWorkflowProcessInstance) kruntime
-                    .getProcessInstance(piId);
-            processInstance1.setVariable("x", 0);
-            return null;
-        });
+        IntermediateCatchEventTimerCycleWithErrorModel model = 
definition.createModel();
+        ProcessInstance<IntermediateCatchEventTimerCycleWithErrorModel> 
processInstance = definition.createInstance(model);
+        processInstance.start();
+
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_ACTIVE);
+        model.setX(0);
+        processInstance.updateVariables(model);
 
-        // now wait for 1 second for timer to trigger
+        // Wait for the timer to trigger
         countDownListener.waitTillCompleted();
-        assertProcessInstanceActive(processInstance);
 
-        Integer xValue = 
kruntime.getKieSession().execute((ExecutableCommand<Integer>) context -> {
-            KogitoWorkflowProcessInstance processInstance2 = 
(KogitoWorkflowProcessInstance) kruntime
-                    .getProcessInstance(piId);
-            return (Integer) processInstance2.getVariable("x");
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_ACTIVE);
 
-        });
-        assertThat(xValue).isEqualTo(2);
-        kruntime.abortProcessInstance(processInstance.getStringId());
-        assertProcessInstanceFinished(processInstance, kruntime);
+        // Retrieve the updated model variables
+        model = processInstance.variables();
+        Integer xValue = model.getX();
+        assertThat(xValue).isGreaterThanOrEqualTo(1);
+
+        processInstance.abort();
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_ABORTED);
     }
 
     @Test
     public void testNoneIntermediateThrow() {
         Application app = ProcessTestHelper.newApplication();
-        org.kie.kogito.process.Process<IntermediateThrowEventNoneModel> 
processDefinition = IntermediateThrowEventNoneProcess.newProcess(app);
-        IntermediateThrowEventNoneModel model = 
processDefinition.createModel();
-        
org.kie.kogito.process.ProcessInstance<IntermediateThrowEventNoneModel> 
instance = processDefinition.createInstance(model);
-        instance.start();
-        
assertThat(instance).extracting(ProcessInstance::status).isEqualTo(ProcessInstance.STATE_COMPLETED);
+        org.kie.kogito.process.Process<IntermediateThrowEventNoneModel> 
process = IntermediateThrowEventNoneProcess.newProcess(app);
+        IntermediateThrowEventNoneModel model = process.createModel();
+        ProcessInstance<IntermediateThrowEventNoneModel> processInstance = 
process.createInstance(model);
+        processInstance.start();
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
     }
 
     @Test
     public void testLinkIntermediateEvent() {
         Application app = ProcessTestHelper.newApplication();
-        org.kie.kogito.process.Process<IntermediateLinkEventModel> 
processDefinition = IntermediateLinkEventProcess.newProcess(app);
-        IntermediateLinkEventModel model = processDefinition.createModel();
-        org.kie.kogito.process.ProcessInstance<IntermediateLinkEventModel> 
instance = processDefinition.createInstance(model);
-        instance.start();
-        
assertThat(instance).extracting(ProcessInstance::status).isEqualTo(ProcessInstance.STATE_COMPLETED);
+        org.kie.kogito.process.Process<IntermediateLinkEventModel> process = 
IntermediateLinkEventProcess.newProcess(app);
+        IntermediateLinkEventModel model = process.createModel();
+        ProcessInstance<IntermediateLinkEventModel> processInstance = 
process.createInstance(model);
+        processInstance.start();
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
     }
 
     @Test
-    public void testLinkEventCompositeProcess() {
+    public void testLinkEventCompositeProcess() throws Exception {
         Application app = ProcessTestHelper.newApplication();
-
-        org.kie.kogito.process.Process<LinkEventCompositeProcessModel> 
processDefinition = LinkEventCompositeProcessProcess.newProcess(app);
-        LinkEventCompositeProcessModel model = processDefinition.createModel();
-        org.kie.kogito.process.ProcessInstance<LinkEventCompositeProcessModel> 
instance = processDefinition.createInstance(model);
-        instance.start();
-        
assertThat(instance).extracting(ProcessInstance::status).isEqualTo(ProcessInstance.STATE_COMPLETED);
+        org.kie.kogito.process.Process<LinkEventCompositeProcessModel> process 
= LinkEventCompositeProcessProcess.newProcess(app);
+        LinkEventCompositeProcessModel model = process.createModel();
+        ProcessInstance<LinkEventCompositeProcessModel> processInstance = 
process.createInstance(model);
+        processInstance.start();
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
     }
 
     @Test
@@ -1539,15 +1584,12 @@ public class IntermediateEventTest extends 
JbpmBpmn2TestCase {
         kruntime = 
createKogitoProcessRuntime("org/jbpm/bpmn2/intermediate/BPMN2-BoundaryConditionalEventOnTask.bpmn2");
         kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Human 
Task", new TestWorkItemHandler());
         KogitoProcessInstance processInstance = 
kruntime.startProcess("BoundaryConditionalEventOnTask");
-
         Person person = new Person();
         person.setName("john");
         kruntime.getKieSession().insert(person);
-
         assertProcessInstanceFinished(processInstance, kruntime);
         assertNodeTriggered(processInstance.getStringId(), "StartProcess", 
"User Task", "Boundary event",
                 "Condition met", "End2");
-
     }
 
     @Test
@@ -1604,20 +1646,20 @@ public class IntermediateEventTest extends 
JbpmBpmn2TestCase {
     }
 
     @Test
-    public void testSignalBoundaryEventOnSubprocessTakingDifferentPaths() 
throws Exception {
-        kruntime = 
createKogitoProcessRuntime("org/jbpm/bpmn2/intermediate/BPMN2-SignalBoundaryOnSubProcess.bpmn");
-
-        KogitoProcessInstance processInstance = 
kruntime.startProcess("SignalBoundaryOnSubProcess");
-        assertProcessInstanceActive(processInstance);
-
-        kruntime.signalEvent("continue", null, processInstance.getStringId());
-        assertProcessInstanceFinished(processInstance, kruntime);
-
-        processInstance = kruntime.startProcess("SignalBoundaryOnSubProcess");
-        assertProcessInstanceActive(processInstance);
+    public void testSignalBoundaryEventOnSubprocessTakingDifferentPaths() {
+        Application app = ProcessTestHelper.newApplication();
+        org.kie.kogito.process.Process<SignalBoundaryOnSubProcessModel> 
definition = SignalBoundaryOnSubProcessProcess.newProcess(app);
 
-        kruntime.signalEvent("forward", null);
-        assertProcessInstanceFinished(processInstance, kruntime);
+        ProcessInstance<SignalBoundaryOnSubProcessModel> processInstance = 
definition.createInstance(definition.createModel());
+        processInstance.start();
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_ACTIVE);
+        processInstance.send(Sig.of("continue", null));
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
+        processInstance = definition.createInstance(definition.createModel());
+        processInstance.start();
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_ACTIVE);
+        processInstance.send(Sig.of("forward", null));
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
     }
 
     @Test
@@ -1663,118 +1705,99 @@ public class IntermediateEventTest extends 
JbpmBpmn2TestCase {
     }
 
     @Test
-    public void testSignalBoundaryEventOnMultiInstanceSubprocess() throws 
Exception {
-        kruntime = createKogitoProcessRuntime(
-                
"org/jbpm/bpmn2/intermediate/BPMN2-MultiInstanceSubprocessWithBoundarySignal.bpmn2");
-
+    public void testSignalBoundaryEventOnMultiInstanceSubprocess() {
+        Application app = ProcessTestHelper.newApplication();
         TestWorkItemHandler handler = new TestWorkItemHandler();
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Human 
Task", handler);
-
-        Map<String, Object> params = new HashMap<>();
-        List<String> approvers = new ArrayList<>();
-        approvers.add("john");
-        approvers.add("john");
+        ProcessTestHelper.registerHandler(app, "Human Task", handler);
 
-        params.put("approvers", approvers);
+        
org.kie.kogito.process.Process<MultiInstanceSubprocessWithBoundarySignalModel> 
definition = MultiInstanceSubprocessWithBoundarySignalProcess.newProcess(app);
+        MultiInstanceSubprocessWithBoundarySignalModel model = 
definition.createModel();
+        model.setApprovers(Arrays.asList("john", "john"));
+        ProcessInstance<MultiInstanceSubprocessWithBoundarySignalModel> 
processInstance = definition.createInstance(model);
 
-        KogitoProcessInstance processInstance = 
kruntime.startProcess("MultiInstanceSubprocessWithBoundarySignal",
-                params);
-        assertProcessInstanceActive(processInstance);
+        processInstance.start();
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_ACTIVE);
 
         List<KogitoWorkItem> workItems = handler.getWorkItems();
         assertThat(workItems).isNotNull().hasSize(2);
 
-        kruntime.signalEvent("Outside", null, processInstance.getStringId());
-        assertProcessInstanceFinished(processInstance, kruntime);
-
+        processInstance.send(Sig.of("Outside", null));
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
     }
 
     @Test
-    public void testSignalBoundaryEventNoInteruptOnMultiInstanceSubprocess() 
throws Exception {
-        kruntime = createKogitoProcessRuntime(
-                
"org/jbpm/bpmn2/intermediate/BPMN2-MultiInstanceSubprocessWithBoundarySignalNoInterupting.bpmn2");
-
+    public void testSignalBoundaryEventNoInteruptOnMultiInstanceSubprocess() {
+        Application app = ProcessTestHelper.newApplication();
         TestWorkItemHandler handler = new TestWorkItemHandler();
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Human 
Task", handler);
-
-        Map<String, Object> params = new HashMap<>();
-        List<String> approvers = new ArrayList<>();
-        approvers.add("john");
-        approvers.add("john");
+        ProcessTestHelper.registerHandler(app, "Human Task", handler);
 
-        params.put("approvers", approvers);
+        
org.kie.kogito.process.Process<MultiInstanceSubprocessWithBoundarySignalNoInteruptingModel>
 definition =
+                
MultiInstanceSubprocessWithBoundarySignalNoInteruptingProcess.newProcess(app);
+        MultiInstanceSubprocessWithBoundarySignalNoInteruptingModel model = 
definition.createModel();
+        model.setApprovers(Arrays.asList("john", "john"));
 
-        KogitoProcessInstance processInstance = kruntime
-                
.startProcess("MultiInstanceSubprocessWithBoundarySignalNoInterupting", params);
-        assertProcessInstanceActive(processInstance);
+        
ProcessInstance<MultiInstanceSubprocessWithBoundarySignalNoInteruptingModel> 
processInstance = definition.createInstance(model);
+        processInstance.start();
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_ACTIVE);
 
         List<KogitoWorkItem> workItems = handler.getWorkItems();
         assertThat(workItems).isNotNull().hasSize(2);
 
-        kruntime.signalEvent("Outside", null, processInstance.getStringId());
-
-        assertProcessInstanceActive(processInstance.getStringId(), kruntime);
+        processInstance.send(Sig.of("Outside", null));
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_ACTIVE);
 
         for (KogitoWorkItem wi : workItems) {
-            
kruntime.getKogitoWorkItemManager().completeWorkItem(wi.getStringId(), null);
+            processInstance.completeWorkItem(wi.getStringId(), null);
         }
-        assertProcessInstanceFinished(processInstance, kruntime);
 
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
     }
 
     @Test
-    public void testErrorBoundaryEventOnMultiInstanceSubprocess() throws 
Exception {
-        kruntime = createKogitoProcessRuntime(
-                
"org/jbpm/bpmn2/intermediate/BPMN2-MultiInstanceSubprocessWithBoundaryError.bpmn2");
-
+    public void testErrorBoundaryEventOnMultiInstanceSubprocess() {
+        Application app = ProcessTestHelper.newApplication();
         TestWorkItemHandler handler = new TestWorkItemHandler();
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Human 
Task", handler);
-
-        Map<String, Object> params = new HashMap<>();
-        List<String> approvers = new ArrayList<>();
-        approvers.add("john");
-        approvers.add("john");
-
-        params.put("approvers", approvers);
-
-        KogitoProcessInstance processInstance = 
kruntime.startProcess("MultiInstanceSubprocessWithBoundaryError",
-                params);
-        assertProcessInstanceActive(processInstance);
-        Set<EventDescription<?>> eventDescriptions = 
processInstance.getEventDescriptions();
-        
assertThat(eventDescriptions).hasSize(3).extracting("event").contains("workItemCompleted",
 "Inside",
-                "Error-_D83CFC28-3322-4ABC-A12D-83476B08C7E8-MyError");
-        
assertThat(eventDescriptions).extracting("eventType").contains("workItem", 
"signal");
-        
assertThat(eventDescriptions).extracting("processInstanceId").contains(processInstance.getStringId());
-        assertThat(eventDescriptions).filteredOn("eventType", 
"signal").hasSize(2).extracting("properties", Map.class)
+        ProcessTestHelper.registerHandler(app, "Human Task", handler);
+        
org.kie.kogito.process.Process<MultiInstanceSubprocessWithBoundaryErrorModel> 
definition =
+                
MultiInstanceSubprocessWithBoundaryErrorProcess.newProcess(app);
+        MultiInstanceSubprocessWithBoundaryErrorModel model = 
definition.createModel();
+        model.setApprovers(Arrays.asList("john", "john"));
+        ProcessInstance<MultiInstanceSubprocessWithBoundaryErrorModel> 
processInstance = definition.createInstance(model);
+        processInstance.start();
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_ACTIVE);
+        Set<EventDescription<?>> eventDescriptions = processInstance.events();
+        assertThat(eventDescriptions).hasSize(3)
+                .extracting("event")
+                .contains("workItemCompleted", "Inside", 
"Error-_D83CFC28-3322-4ABC-A12D-83476B08C7E8-MyError");
+        assertThat(eventDescriptions).extracting("eventType")
+                .contains("workItem", "signal");
+        assertThat(eventDescriptions).extracting("processInstanceId")
+                .contains(processInstance.id());
+        assertThat(eventDescriptions).filteredOn("eventType", 
"signal").hasSize(2)
+                .extracting("properties", Map.class)
                 .anyMatch(m -> m.containsKey("AttachedToID") && 
m.containsKey("AttachedToName"));
-
         List<KogitoWorkItem> workItems = handler.getWorkItems();
         assertThat(workItems).isNotNull().hasSize(2);
-
-        kruntime.signalEvent("Inside", null, processInstance.getStringId());
-        assertProcessInstanceFinished(processInstance, kruntime);
-
+        processInstance.send(Sig.of("Inside", null));
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
     }
 
     @Test
-    public void testIntermediateCatchEventSignalAndBoundarySignalEvent() 
throws Exception {
-        kruntime = 
createKogitoProcessRuntime("org/jbpm/bpmn2/intermediate/BPMN2-BoundaryEventWithSignals.bpmn2");
+    public void testIntermediateCatchEventSignalAndBoundarySignalEvent() {
+        Application app = ProcessTestHelper.newApplication();
         TestWorkItemHandler handler = new TestWorkItemHandler();
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Human 
Task", handler);
-        KogitoProcessInstance processInstance = 
kruntime.startProcess("BoundaryEventWithSignals");
-        assertProcessInstanceActive(processInstance);
-
-        // now signal process instance
-        kruntime.signalEvent("moveon", "", processInstance.getStringId());
-        assertProcessInstanceActive(processInstance);
-
+        ProcessTestHelper.registerHandler(app, "Human Task", handler);
+        org.kie.kogito.process.Process<BoundaryEventWithSignalsModel> process 
= BoundaryEventWithSignalsProcess.newProcess(app);
+        BoundaryEventWithSignalsModel model = process.createModel();
+        ProcessInstance<BoundaryEventWithSignalsModel> processInstance = 
process.createInstance(model);
+        processInstance.start();
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_ACTIVE);
+        processInstance.send(Sig.of("moveon", ""));
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_ACTIVE);
         KogitoWorkItem wi = handler.getWorkItem();
         assertThat(wi).isNotNull();
-
-        // signal boundary event on user task
-        kruntime.signalEvent("moveon", "", processInstance.getStringId());
-
-        assertProcessInstanceFinished(processInstance, kruntime);
+        processInstance.send(Sig.of("moveon", ""));
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
     }
 
     @Test
@@ -1987,38 +2010,40 @@ public class IntermediateEventTest extends 
JbpmBpmn2TestCase {
     }
 
     @Test
-    public void testMultipleMessageSignalSubprocess() throws Exception {
-        kruntime = createKogitoProcessRuntime(
-                
"org/jbpm/bpmn2/intermediate/BPMN2-MultipleMessageSignalSubprocess.bpmn2");
-        KogitoProcessInstance processInstance = 
kruntime.startProcess("MultipleMessageSignalSubprocess");
-        logger.debug("Parent Process ID: " + processInstance.getStringId());
-
-        kruntime.signalEvent("Message-Message 1", "Test", 
processInstance.getStringId());
-        assertProcessInstanceActive(processInstance.getStringId(), kruntime);
-
-        kruntime.signalEvent("Message-Message 1", "Test", 
processInstance.getStringId());
-        assertProcessInstanceCompleted(processInstance.getStringId(), 
kruntime);
+    public void testMultipleMessageSignalSubprocess() {
+        Application app = ProcessTestHelper.newApplication();
+        org.kie.kogito.process.Process<MultipleMessageSignalSubprocessModel> 
process = MultipleMessageSignalSubprocessProcess.newProcess(app);
+        MultipleMessageSignalSubprocessModel model = process.createModel();
+        ProcessInstance<MultipleMessageSignalSubprocessModel> processInstance 
= process.createInstance(model);
+        processInstance.start();
+        logger.debug("Parent Process ID: " + processInstance.id());
+        processInstance.send(Sig.of("Message-Message 1", "Test"));
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_ACTIVE);
+        processInstance.send(Sig.of("Message-Message 1", "Test"));
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
     }
 
     @Test
-    public void testIntermediateCatchEventSignalWithRef() throws Exception {
-        kruntime = createKogitoProcessRuntime(
-                
"org/jbpm/bpmn2/intermediate/BPMN2-IntermediateCatchEventSignalWithRef.bpmn2");
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Human 
Task", new SystemOutWorkItemHandler());
-        KogitoProcessInstance processInstance = 
kruntime.startProcess("IntermediateCatchEventSignalWithRef");
-        assertProcessInstanceActive(processInstance);
-
-        // now signal process instance
-        kruntime.signalEvent("Signal1", "SomeValue", 
processInstance.getStringId());
-        assertProcessInstanceFinished(processInstance, kruntime);
-        assertNodeTriggered(processInstance.getStringId(), "StartProcess", 
"UserTask", "EndProcess", "event");
-
+    public void testIntermediateCatchEventSignalWithRef() {
+        String[] nodes = { "StartProcess", "UserTask", "EndProcess", "event" };
+        Application app = ProcessTestHelper.newApplication();
+        ProcessTestHelper.registerHandler(app, "Human Task", new 
SystemOutWorkItemHandler());
+        EventTrackerProcessListener tracker = new 
EventTrackerProcessListener();
+        ProcessTestHelper.registerProcessEventListener(app, tracker);
+        
org.kie.kogito.process.Process<IntermediateCatchEventSignalWithRefModel> 
process = IntermediateCatchEventSignalWithRefProcess.newProcess(app);
+        IntermediateCatchEventSignalWithRefModel model = process.createModel();
+        ProcessInstance<IntermediateCatchEventSignalWithRefModel> 
processInstance = process.createInstance(model);
+        processInstance.start();
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_ACTIVE);
+        processInstance.send(Sig.of("Signal1", "SomeValue"));
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
+        assertThatIterable(tracker.tracked()).extracting(a -> 
a.getNodeInstance().getNodeName()).contains(nodes);
     }
 
     @Test
     public void testMultiInstanceLoopBoundaryTimer() throws Exception {
         Application app = ProcessTestHelper.newApplication();
-        NodeLeftCountDownProcessEventListener countDownListener = new 
NodeLeftCountDownProcessEventListener("timer", 3);
+        NodeLeftCountDownProcessEventListener countDownListener = new 
NodeLeftCountDownProcessEventListener("timer", 2);
         ProcessTestHelper.registerProcessEventListener(app, countDownListener);
         TestUserTaskWorkItemHandler handler = new 
TestUserTaskWorkItemHandler();
         ProcessTestHelper.registerHandler(app, "Human Task", handler);
@@ -2196,208 +2221,229 @@ public class IntermediateEventTest extends 
JbpmBpmn2TestCase {
     }
 
     @Test
-    public void testIntermediateTimerParallelGateway() throws Exception {
-        NodeLeftCountDownProcessEventListener countDownListener1 = new 
NodeLeftCountDownProcessEventListener("Timer1",
-                1);
-        NodeLeftCountDownProcessEventListener countDownListener2 = new 
NodeLeftCountDownProcessEventListener("Timer2",
-                1);
-        NodeLeftCountDownProcessEventListener countDownListener3 = new 
NodeLeftCountDownProcessEventListener("Timer3",
-                1);
+    public void testIntermediateTimerParallelGateway() {
+        Application app = ProcessTestHelper.newApplication();
+        NodeLeftCountDownProcessEventListener countDownListener1 = new 
NodeLeftCountDownProcessEventListener("Timer1", 1);
+        NodeLeftCountDownProcessEventListener countDownListener2 = new 
NodeLeftCountDownProcessEventListener("Timer2", 1);
+        NodeLeftCountDownProcessEventListener countDownListener3 = new 
NodeLeftCountDownProcessEventListener("Timer3", 1);
         ProcessCompletedCountDownProcessEventListener 
countDownProcessEventListener = new 
ProcessCompletedCountDownProcessEventListener();
-        kruntime = 
createKogitoProcessRuntime("org/jbpm/bpmn2/timer/BPMN2-IntermediateTimerParallelGateway.bpmn2");
-        kruntime.getProcessEventManager().addEventListener(countDownListener1);
-        kruntime.getProcessEventManager().addEventListener(countDownListener2);
-        kruntime.getProcessEventManager().addEventListener(countDownListener3);
-        
kruntime.getProcessEventManager().addEventListener(countDownProcessEventListener);
+
+        ProcessTestHelper.registerProcessEventListener(app, 
countDownListener1);
+        ProcessTestHelper.registerProcessEventListener(app, 
countDownListener2);
+        ProcessTestHelper.registerProcessEventListener(app, 
countDownListener3);
+        ProcessTestHelper.registerProcessEventListener(app, 
countDownProcessEventListener);
+
         TestWorkItemHandler handler = new TestWorkItemHandler();
+        ProcessTestHelper.registerHandler(app, "Human Task", handler);
 
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Human 
Task", handler);
-        KogitoProcessInstance processInstance = 
kruntime.startProcess("IntermediateTimerParallelGateway");
-        assertProcessInstanceActive(processInstance);
+        org.kie.kogito.process.Process<IntermediateTimerParallelGatewayModel> 
process = IntermediateTimerParallelGatewayProcess.newProcess(app);
+        IntermediateTimerParallelGatewayModel model = process.createModel();
+        ProcessInstance<IntermediateTimerParallelGatewayModel> processInstance 
= process.createInstance(model);
+        processInstance.start();
+
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_ACTIVE);
 
         countDownListener1.waitTillCompleted();
         countDownListener2.waitTillCompleted();
         countDownListener3.waitTillCompleted();
         countDownProcessEventListener.waitTillCompleted();
-        assertProcessInstanceCompleted(processInstance.getStringId(), 
kruntime);
 
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
     }
 
     @Test
-    public void testIntermediateTimerEventMI() throws Exception {
-        NodeLeftCountDownProcessEventListener countDownListener = new 
NodeLeftCountDownProcessEventListener(
-                "After timer", 3);
-        kruntime = 
createKogitoProcessRuntime("org/jbpm/bpmn2/timer/BPMN2-IntermediateTimerEventMI.bpmn2");
-        kruntime.getProcessEventManager().addEventListener(countDownListener);
+    public void testIntermediateTimerEventMI() {
+        Application app = ProcessTestHelper.newApplication();
+        NodeLeftCountDownProcessEventListener countDownListener = new 
NodeLeftCountDownProcessEventListener("After timer", 3);
+        ProcessTestHelper.registerProcessEventListener(app, countDownListener);
+
         TestWorkItemHandler handler = new TestWorkItemHandler();
+        ProcessTestHelper.registerHandler(app, "Human Task", handler);
 
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Human 
Task", handler);
-        KogitoProcessInstance processInstance = 
kruntime.startProcess("IntermediateTimerEventMI");
-        assertProcessInstanceActive(processInstance);
+        org.kie.kogito.process.Process<IntermediateTimerEventMIModel> process 
= IntermediateTimerEventMIProcess.newProcess(app);
+        IntermediateTimerEventMIModel model = process.createModel();
+        ProcessInstance<IntermediateTimerEventMIModel> processInstance = 
process.createInstance(model);
+        processInstance.start();
+
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_ACTIVE);
 
         countDownListener.waitTillCompleted();
-        assertProcessInstanceActive(processInstance.getStringId(), kruntime);
 
-        kruntime.abortProcessInstance(processInstance.getStringId());
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_ACTIVE);
 
-        assertProcessInstanceAborted(processInstance.getStringId(), kruntime);
+        processInstance.abort();
+
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_ABORTED);
     }
 
     @Test
-    public void testThrowIntermediateSignalWithScope() throws Exception {
-        kruntime = 
createKogitoProcessRuntime("org/jbpm/bpmn2/intermediate/BPMN2-IntermediateThrowEventScope.bpmn2");
+    public void testThrowIntermediateSignalWithScope() {
+        Application app = ProcessTestHelper.newApplication();
         TestWorkItemHandler handler = new TestWorkItemHandler();
+        ProcessTestHelper.registerHandler(app, "Human Task", handler);
 
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Human 
Task", handler);
-        Map<String, Object> params = new HashMap<>();
+        org.kie.kogito.process.Process<IntermediateThrowEventScopeModel> 
process = IntermediateThrowEventScopeProcess.newProcess(app);
+        IntermediateThrowEventScopeModel model1 = process.createModel();
+        IntermediateThrowEventScopeModel model2 = process.createModel();
 
-        KogitoProcessInstance processInstance = 
kruntime.startProcess("IntermediateThrowEventScope", params);
-        KogitoProcessInstance processInstance2 = 
kruntime.startProcess("IntermediateThrowEventScope", params);
+        ProcessInstance<IntermediateThrowEventScopeModel> processInstance1 = 
process.createInstance(model1);
+        ProcessInstance<IntermediateThrowEventScopeModel> processInstance2 = 
process.createInstance(model2);
 
-        assertProcessInstanceActive(processInstance);
-        assertProcessInstanceActive(processInstance2);
+        processInstance1.start();
+        processInstance2.start();
 
-        assertNodeActive(processInstance.getStringId(), kruntime, "Complete 
work", "Wait");
-        assertNodeActive(processInstance2.getStringId(), kruntime, "Complete 
work", "Wait");
+        
assertThat(processInstance1.status()).isEqualTo(ProcessInstance.STATE_ACTIVE);
+        
assertThat(processInstance2.status()).isEqualTo(ProcessInstance.STATE_ACTIVE);
 
         List<KogitoWorkItem> items = handler.getWorkItems();
-
-        KogitoWorkItem wi = items.get(0);
-
+        KogitoWorkItem wi1 = items.get(0);
         Map<String, Object> result = new HashMap<>();
         result.put("_output", "sending event");
 
-        kruntime.getKogitoWorkItemManager().completeWorkItem(wi.getStringId(), 
result);
+        processInstance1.completeWorkItem(wi1.getStringId(), result);
 
-        assertProcessInstanceCompleted(processInstance);
-        assertProcessInstanceActive(processInstance2);
-        assertNodeActive(processInstance2.getStringId(), kruntime, "Complete 
work", "Wait");
+        
assertThat(processInstance1.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
+        
assertThat(processInstance2.status()).isEqualTo(ProcessInstance.STATE_ACTIVE);
 
-        wi = items.get(1);
-        kruntime.getKogitoWorkItemManager().completeWorkItem(wi.getStringId(), 
result);
-        assertProcessInstanceCompleted(processInstance2);
+        KogitoWorkItem wi2 = items.get(1);
+        processInstance2.completeWorkItem(wi2.getStringId(), result);
 
+        
assertThat(processInstance2.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
     }
 
     @Test
-    public void testThrowEndSignalWithScope() throws Exception {
-        kruntime = 
createKogitoProcessRuntime("org/jbpm/bpmn2/intermediate/BPMN2-EndThrowEventScope.bpmn2");
+    public void testThrowEndSignalWithScope() {
+        Application app = ProcessTestHelper.newApplication();
         TestWorkItemHandler handler = new TestWorkItemHandler();
+        ProcessTestHelper.registerHandler(app, "Human Task", handler);
 
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Human 
Task", handler);
-        Map<String, Object> params = new HashMap<>();
+        org.kie.kogito.process.Process<EndThrowEventScopeModel> process = 
EndThrowEventScopeProcess.newProcess(app);
+        EndThrowEventScopeModel model1 = process.createModel();
+        EndThrowEventScopeModel model2 = process.createModel();
 
-        KogitoProcessInstance processInstance = 
kruntime.startProcess("EndThrowEventScope", params);
-        KogitoProcessInstance processInstance2 = 
kruntime.startProcess("EndThrowEventScope", params);
+        ProcessInstance<EndThrowEventScopeModel> processInstance1 = 
process.createInstance(model1);
+        ProcessInstance<EndThrowEventScopeModel> processInstance2 = 
process.createInstance(model2);
 
-        assertProcessInstanceActive(processInstance);
-        assertProcessInstanceActive(processInstance2);
+        processInstance1.start();
+        processInstance2.start();
 
-        assertNodeActive(processInstance.getStringId(), kruntime, "Complete 
work", "Wait");
-        assertNodeActive(processInstance2.getStringId(), kruntime, "Complete 
work", "Wait");
+        
assertThat(processInstance1.status()).isEqualTo(ProcessInstance.STATE_ACTIVE);
+        
assertThat(processInstance2.status()).isEqualTo(ProcessInstance.STATE_ACTIVE);
 
         List<KogitoWorkItem> items = handler.getWorkItems();
-
-        KogitoWorkItem wi = items.get(0);
-
+        KogitoWorkItem wi1 = items.get(0);
         Map<String, Object> result = new HashMap<>();
         result.put("_output", "sending event");
 
-        kruntime.getKogitoWorkItemManager().completeWorkItem(wi.getStringId(), 
result);
+        processInstance1.completeWorkItem(wi1.getStringId(), result);
 
-        assertProcessInstanceCompleted(processInstance);
-        assertProcessInstanceActive(processInstance2);
-        assertNodeActive(processInstance2.getStringId(), kruntime, "Complete 
work", "Wait");
+        
assertThat(processInstance1.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
+        
assertThat(processInstance2.status()).isEqualTo(ProcessInstance.STATE_ACTIVE);
 
-        wi = items.get(1);
-        kruntime.getKogitoWorkItemManager().completeWorkItem(wi.getStringId(), 
result);
-        assertProcessInstanceCompleted(processInstance2);
+        KogitoWorkItem wi2 = items.get(1);
+        processInstance2.completeWorkItem(wi2.getStringId(), result);
 
+        
assertThat(processInstance2.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
     }
 
     @Test
-    public void testThrowIntermediateSignalWithExternalScope() throws 
Exception {
-        kruntime = createKogitoProcessRuntime(
-                
"org/jbpm/bpmn2/intermediate/BPMN2-IntermediateThrowEventExternalScope.bpmn2");
+    public void testThrowIntermediateSignalWithExternalScope() {
+        Application app = ProcessTestHelper.newApplication();
         TestWorkItemHandler handler = new TestWorkItemHandler();
+        ProcessTestHelper.registerHandler(app, "Human Task", handler);
         KogitoWorkItemHandler externalHandler = new 
DefaultKogitoWorkItemHandler() {
 
             @Override
             public Optional<WorkItemTransition> 
activateWorkItemHandler(KogitoWorkItemManager manager, KogitoWorkItemHandler 
handler, KogitoWorkItem workItem, WorkItemTransition transition) {
                 String signal = (String) workItem.getParameter("Signal");
-                kruntime.signalEvent(signal, null);
+                workItem.getProcessInstance().signalEvent(signal, null);
                 return 
Optional.of(this.workItemLifeCycle.newTransition("complete", 
workItem.getPhaseStatus(), Collections.emptyMap()));
             }
 
         };
+        ProcessTestHelper.registerHandler(app, "External Send Task", 
externalHandler);
+        
org.kie.kogito.process.Process<IntermediateThrowEventExternalScopeModel> 
process = IntermediateThrowEventExternalScopeProcess.newProcess(app);
+        IntermediateThrowEventExternalScopeModel model = process.createModel();
+        ProcessInstance<IntermediateThrowEventExternalScopeModel> 
processInstance = process.createInstance(model);
+        processInstance.start();
 
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Human 
Task", handler);
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("External 
Send Task", externalHandler);
-        Map<String, Object> params = new HashMap<>();
-
-        KogitoProcessInstance processInstance = 
kruntime.startProcess("IntermediateThrowEventExternalScope", params);
-
-        assertProcessInstanceActive(processInstance);
-
-        assertNodeActive(processInstance.getStringId(), kruntime, "Complete 
work", "Wait");
-
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_ACTIVE);
         List<KogitoWorkItem> items = handler.getWorkItems();
         assertThat(items).hasSize(1);
         KogitoWorkItem wi = items.get(0);
-
         Map<String, Object> result = new HashMap<>();
         result.put("_output", "sending event");
+        processInstance.completeWorkItem(wi.getStringId(), result);
 
-        kruntime.getKogitoWorkItemManager().completeWorkItem(wi.getStringId(), 
result);
-
-        assertProcessInstanceCompleted(processInstance);
-
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
     }
 
     @Test
-    public void testIntermediateCatchEventSignalWithVariable() throws 
Exception {
-        kruntime = createKogitoProcessRuntime(
-                
"org/jbpm/bpmn2/intermediate/BPMN2-IntermediateCatchEventSignalWithVariable.bpmn2");
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Human 
Task", new SystemOutWorkItemHandler());
+    public void testIntermediateCatchEventSignalWithVariable() {
+        Application app = ProcessTestHelper.newApplication();
+        List<String> triggeredNodes = new ArrayList<>();
+
+        KogitoProcessEventListener listener = new 
DefaultKogitoProcessEventListener() {
+            @Override
+            public void afterNodeLeft(ProcessNodeLeftEvent event) {
+                triggeredNodes.add(event.getNodeInstance().getNodeName());
+            }
+        };
+
+        ProcessTestHelper.registerProcessEventListener(app, listener);
+        ProcessTestHelper.registerHandler(app, "Human Task", new 
SystemOutWorkItemHandler());
 
         String signalVar = "myVarSignal";
         Map<String, Object> parameters = new HashMap<>();
         parameters.put("signalName", signalVar);
-        KogitoProcessInstance processInstance = 
kruntime.startProcess("IntermediateCatchEventSignalWithVariable",
-                parameters);
-        assertProcessInstanceActive(processInstance);
 
-        // now signal process instance
-        kruntime.signalEvent(signalVar, "SomeValue", 
processInstance.getStringId());
-        assertProcessInstanceFinished(processInstance, kruntime);
-        assertNodeTriggered(processInstance.getStringId(), "StartProcess", 
"UserTask", "EndProcess", "event");
+        
org.kie.kogito.process.Process<IntermediateCatchEventSignalWithVariableModel> 
process = IntermediateCatchEventSignalWithVariableProcess.newProcess(app);
+        IntermediateCatchEventSignalWithVariableModel model = 
process.createModel();
+        model.fromMap(parameters);
+
+        ProcessInstance<IntermediateCatchEventSignalWithVariableModel> 
processInstance = process.createInstance(model);
+        processInstance.start();
 
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_ACTIVE);
+
+        processInstance.send(Sig.of(signalVar, "SomeValue"));
+
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
+        assertThat(triggeredNodes).containsExactlyInAnyOrder("StartProcess", 
"UserTask", "Event", "event", "EndProcess");
     }
 
     @Test
     public void testSignalIntermediateThrowWithVariable() throws Exception {
-        kruntime = createKogitoProcessRuntime(
-                
"org/jbpm/bpmn2/intermediate/BPMN2-IntermediateThrowEventSignalWithVariable.bpmn2",
-                
"org/jbpm/bpmn2/intermediate/BPMN2-IntermediateCatchEventSignalWithVariable.bpmn2");
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Human 
Task", new SystemOutWorkItemHandler());
-        // create catch process instance
+        Application app = ProcessTestHelper.newApplication();
+        List<String> triggeredNodes = new ArrayList<>();
+        KogitoProcessEventListener listener = new 
DefaultKogitoProcessEventListener() {
+            @Override
+            public void afterNodeLeft(ProcessNodeLeftEvent event) {
+                triggeredNodes.add(event.getNodeInstance().getNodeName());
+            }
+        };
+        ProcessTestHelper.registerProcessEventListener(app, listener);
+        ProcessTestHelper.registerHandler(app, "Human Task", new 
SystemOutWorkItemHandler());
         String signalVar = "myVarSignal";
-        Map<String, Object> parameters = new HashMap<>();
-        parameters.put("signalName", signalVar);
-        KogitoProcessInstance processInstance = 
kruntime.startProcess("IntermediateCatchEventSignalWithVariable",
-                parameters);
-        assertProcessInstanceActive(processInstance);
-
-        Map<String, Object> params = new HashMap<>();
-        params.put("x", "MyValue");
-        params.put("signalName", signalVar);
-        KogitoProcessInstance processInstanceThrow = 
kruntime.startProcess("IntermediateThrowEventSignalWithVariable",
-                params);
-        
assertThat(processInstanceThrow.getState()).isEqualTo(KogitoProcessInstance.STATE_COMPLETED);
-
-        // catch process instance should now be completed
-        assertProcessInstanceFinished(processInstance, kruntime);
-
+        Map<String, Object> catchParameters = new HashMap<>();
+        catchParameters.put("signalName", signalVar);
+        
org.kie.kogito.process.Process<IntermediateCatchEventSignalWithVariableModel> 
catchProcess = IntermediateCatchEventSignalWithVariableProcess.newProcess(app);
+        IntermediateCatchEventSignalWithVariableModel catchModel = 
catchProcess.createModel();
+        catchModel.fromMap(catchParameters);
+        ProcessInstance<IntermediateCatchEventSignalWithVariableModel> 
catchProcessInstance = catchProcess.createInstance(catchModel);
+        catchProcessInstance.start();
+        
assertThat(catchProcessInstance.status()).isEqualTo(ProcessInstance.STATE_ACTIVE);
+        Map<String, Object> throwParameters = new HashMap<>();
+        throwParameters.put("x", "MyValue");
+        throwParameters.put("signalName", signalVar);
+        
org.kie.kogito.process.Process<IntermediateThrowEventSignalWithVariableModel> 
throwProcess = IntermediateThrowEventSignalWithVariableProcess.newProcess(app);
+        IntermediateThrowEventSignalWithVariableModel throwModel = 
throwProcess.createModel();
+        throwModel.fromMap(throwParameters);
+        ProcessInstance<IntermediateThrowEventSignalWithVariableModel> 
throwProcessInstance = throwProcess.createInstance(throwModel);
+        throwProcessInstance.start();
+        
assertThat(throwProcessInstance.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
+        
assertThat(catchProcessInstance.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
+        assertThat(triggeredNodes).contains("StartProcess", "UserTask", 
"Event", "event", "EndProcess");
     }
 
     @Test
@@ -2559,20 +2605,22 @@ public class IntermediateEventTest extends 
JbpmBpmn2TestCase {
     }
 
     @Test
-    public void testEventSubprocessWithExpression() throws Exception {
-        kruntime = createKogitoProcessRuntime(
-                
"org/jbpm/bpmn2/intermediate/BPMN2-EventSubprocessSignalExpression.bpmn2");
+    public void testEventSubprocessWithExpression() {
+        Application app = ProcessTestHelper.newApplication();
         TestWorkItemHandler handler = new TestWorkItemHandler();
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Human 
Task", handler);
-        Map<String, Object> params = new HashMap<>();
-        params.put("x", "signalling");
-        KogitoProcessInstance processInstance = 
kruntime.startProcess("EventSubprocessSignalExpression", params);
+        ProcessTestHelper.registerHandler(app, "Human Task", handler);
 
-        assertProcessInstanceActive(processInstance.getStringId(), kruntime);
-        assertProcessInstanceActive(processInstance);
-        kruntime.signalEvent("signalling", null, 
processInstance.getStringId());
+        org.kie.kogito.process.Process<EventSubprocessSignalExpressionModel> 
process = EventSubprocessSignalExpressionProcess.newProcess(app);
+        EventSubprocessSignalExpressionModel model = process.createModel();
+        model.setX("signalling");
+        ProcessInstance<EventSubprocessSignalExpressionModel> processInstance 
= process.createInstance(model);
+        processInstance.start();
 
-        assertProcessInstanceFinished(processInstance, kruntime);
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_ACTIVE);
+
+        processInstance.send(Sig.of("signalling"));
+
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_ABORTED);
     }
 
     @Test
@@ -2584,63 +2632,57 @@ public class IntermediateEventTest extends 
JbpmBpmn2TestCase {
         kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Human 
Task", handler);
         Person person0 = new Person("john");
         kruntime.getKieSession().insert(person0);
-
         Map<String, Object> params0 = new HashMap<>();
         params0.put("name", "john");
         KogitoProcessInstance pi0 = 
kruntime.startProcess("IntermediateCatchEventSignal", params0);
         kruntime.getKieSession().insert(pi0);
-
         Person person = new Person("Jack");
         kruntime.getKieSession().insert(person);
-
         Map<String, Object> params = new HashMap<>();
         params.put("name", "Poul");
         KogitoProcessInstance pi = 
kruntime.startProcess("IntermediateCatchEventConditionPI", params);
         kruntime.getKieSession().insert(pi);
         pi = kruntime.getProcessInstance(pi.getStringId());
         assertThat(pi).isNotNull();
-
         Person person2 = new Person("Poul");
         kruntime.getKieSession().insert(person2);
-
         pi = kruntime.getProcessInstance(pi.getStringId());
         assertThat(pi).isNull();
-
     }
 
     @Test
-    public void testBoundarySignalEventOnSubprocessWithVariableResolution() 
throws Exception {
-        kruntime = createKogitoProcessRuntime(
-                
"org/jbpm/bpmn2/intermediate/BPMN2-SubprocessWithSignalEndEventAndSignalBoundaryEvent.bpmn2");
-        
kruntime.getProcessEventManager().addEventListener(LOGGING_EVENT_LISTENER);
+    public void testBoundarySignalEventOnSubprocessWithVariableResolution() {
+        Application app = ProcessTestHelper.newApplication();
+
+        
org.kie.kogito.process.Process<SubprocessWithSignalEndEventAndSignalBoundaryEventModel>
 process =
+                
SubprocessWithSignalEndEventAndSignalBoundaryEventProcess.newProcess(app);
 
         Map<String, Object> params = new HashMap<>();
         params.put("document-ref", "signalling");
         params.put("message", "hello");
-        KogitoProcessInstance processInstance = kruntime
-                
.startProcess("SubprocessWithSignalEndEventAndSignalBoundaryEvent", params);
-
-        assertNodeTriggered(processInstance.getStringId(), "sysout from 
boundary", "end2");
-        assertNotNodeTriggered(processInstance.getStringId(), "end1");
-
-        assertProcessInstanceFinished(processInstance, kruntime);
-    }
-
-    @Test
-    public void testSignalEndWithData() throws Exception {
-        kruntime = createKogitoProcessRuntime(
-                
"org/jbpm/bpmn2/intermediate/BPMN2-IntermediateThrowEventSignalWithData.bpmn2");
 
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Human 
Task", new SystemOutWorkItemHandler());
-        Map<String, Object> params = new HashMap<>();
-        KogitoProcessInstance processInstance = 
kruntime.startProcess("IntermediateThrowEventSignalWithData", params);
+        SubprocessWithSignalEndEventAndSignalBoundaryEventModel model = 
process.createModel();
+        model.fromMap(params);
 
-        assertProcessInstanceActive(processInstance);
+        
ProcessInstance<SubprocessWithSignalEndEventAndSignalBoundaryEventModel> 
processInstance = process.createInstance(model);
+        processInstance.start();
 
-        kruntime.signalEvent("mysignal", null, processInstance.getStringId());
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
 
-        assertProcessInstanceCompleted(processInstance);
+    }
 
+    @Test
+    public void testSignalEndWithData() {
+        Application app = ProcessTestHelper.newApplication();
+        ProcessTestHelper.registerHandler(app, "Human Task", new 
SystemOutWorkItemHandler());
+        
org.kie.kogito.process.Process<IntermediateThrowEventSignalWithDataModel> 
definition =
+                IntermediateThrowEventSignalWithDataProcess.newProcess(app);
+        IntermediateThrowEventSignalWithDataModel model = 
definition.createModel();
+        ProcessInstance<IntermediateThrowEventSignalWithDataModel> 
processInstance = definition.createInstance(model);
+        processInstance.start();
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_ACTIVE);
+        processInstance.send(Sig.of("mysignal", null));
+        
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
     }
 
     @Test


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to