package org.jbpm.migration.scenarios; import static org.jbpm.migration.tools.listeners.TrackingListenerAssert.assertLeft; import static org.jbpm.migration.tools.listeners.TrackingListenerAssert.assertProcessStarted; import static org.jbpm.migration.tools.listeners.TrackingListenerAssert.assertTriggered; import java.util.Set; import org.assertj.core.api.Assertions; import org.jbpm.migration.JbpmMigrationRuntimeTest; import org.jbpm.migration.tools.bpmn2.ExecutionInfo; import org.jbpm.migration.tools.bpmn2.JavaNodeHandler; import org.jbpm.migration.tools.jpdl.JpdlAssert; import org.jbpm.migration.tools.jpdl.JpdlHelper; import org.jbpm.migration.tools.jpdl.handlers.DefaultActionHandler; import org.jbpm.migration.tools.jpdl.listeners.TrackingActionListener; import org.jbpm.migration.tools.listeners.TrackingProcessEventListener; import org.jbpm.graph.exe.ProcessInstance; import org.jbpm.taskmgmt.exe.TaskInstance; import org.jbpm.test.JbpmJUnitBaseTestCase; import org.junit.BeforeClass; import org.junit.Test; import org.kie.api.runtime.process.WorkItem; /** * Testing single task with event on node enter and leave. translated BPMN2 * contains Java task->userTask->Java task. */ public class SingleTaskWithEventTest extends JbpmMigrationRuntimeTest { public static final String definition = "org/jbpm/migration/scenarios/singleTaskWithEvent/processdefinition.xml"; public static final String processId = "singleTask_Process"; private static final String BPMN_HT_NODE_NAME = "Expanded to provide: human-task"; private static final String HANDLER_NAME = "org.jbpm.migration.tools.jpdl.handlers.DefaultActionHandler"; private static final String HANDLER_EXECUTE_METHOD_NAME = "execute"; @BeforeClass public static void getTestReady() { prepareProcess(definition); } @Test public void testJpdl() throws Exception { ProcessInstance pi = processDef.createProcessInstance(); TrackingActionListener listener = new TrackingActionListener(); // pi.getContextInstance().createVariable("listener", listener); DefaultActionHandler.setTrackingListener(listener); DefaultActionHandler.setSignalization(false); pi.signal(); JpdlAssert.assertProcessStarted(pi); TaskInstance ti = JpdlHelper.getTaskInstance("Test task", pi); Assertions.assertThat(ti.getActorId()).isEqualTo("EXPERT"); ti.end(); JpdlAssert.assertTaskEnded(ti); Assertions.assertThat(listener.wasCalledOnNode("human-task")).isTrue(); Assertions.assertThat(listener.wasEventAccepted("node-enter")).isTrue(); Assertions.assertThat(listener.wasEventAccepted("node-leave")).isTrue(); JpdlAssert.assertProcessCompleted(pi); } @Test public void testBpmn() { ksession = kbase.newKieSession(); TrackingProcessEventListener listener = new TrackingProcessEventListener(); ksession.addEventListener(listener); final JbpmJUnitBaseTestCase.TestWorkItemHandler humanTaskHandler = new JbpmJUnitBaseTestCase.TestWorkItemHandler(); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", humanTaskHandler); final JavaNodeHandler javaNodeHandler = new JavaNodeHandler(); ksession.getWorkItemManager().registerWorkItemHandler("JavaNode", javaNodeHandler); ksession.startProcess(processId); assertProcessStarted(listener, processId); assertTriggered(listener, BPMN_HT_NODE_NAME); verifyWorkItem(javaNodeHandler.getExecutionInfo(), 1); final WorkItem wi = humanTaskHandler.getWorkItem(); ksession.getWorkItemManager().completeWorkItem(wi.getId(), null); assertLeft(listener, BPMN_HT_NODE_NAME); verifyWorkItem(javaNodeHandler.getExecutionInfo(), 2); } private void verifyWorkItem(final Set<ExecutionInfo> handlerInfo, final int expectedExecutions) { Assertions.assertThat((long) handlerInfo.size()).as("Unexpected number of ExecutionInfo").isEqualTo((long) 1); for (ExecutionInfo executionInfo : handlerInfo) { Assertions.assertThat(executionInfo.getClassName()).as("Unexpected class name").isEqualTo(HANDLER_NAME); Assertions.assertThat(executionInfo.getMethodName()).as("Unexpected method name").isEqualTo(HANDLER_EXECUTE_METHOD_NAME); Assertions.assertThat((long) executionInfo.ExecutionCount()).as("Unexpected number of handler executions").isEqualTo((long) expectedExecutions); } } }