/* * Copyright 2014 Effektif GmbH. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.effektif.workflow.test.api; import static org.junit.Assert.*; import org.junit.Test; import com.effektif.workflow.api.activities.EmbeddedSubprocess; import com.effektif.workflow.api.activities.EndEvent; import com.effektif.workflow.api.activities.ReceiveTask; import com.effektif.workflow.api.activities.StartEvent; import com.effektif.workflow.api.workflow.ExecutableWorkflow; import com.effektif.workflow.api.workflowinstance.WorkflowInstance; import com.effektif.workflow.test.WorkflowTest; /** * @author Tom Baeyens */ public class EmbeddedSubprocessTest extends WorkflowTest { /** +-------------+ * | sub | * +-----+ | +--+ +--+ | +---+ * |start|-->| |w1| |w2| |-->|end| * +-----+ | +--+ +--+ | +---+ * +-------------+ */ @Test public void testSubprocess() { ExecutableWorkflow workflow = new ExecutableWorkflow() .activity("start", new StartEvent() .transitionTo("sub")) .activity("sub", new EmbeddedSubprocess() .activity("w1", new ReceiveTask()) .activity("w2", new ReceiveTask()) .transitionTo("end")) .activity("end", new EndEvent()); deploy(workflow); WorkflowInstance workflowInstance = start(workflow); assertOpen(workflowInstance, "sub", "w1", "w2"); workflowInstance = endTask(workflowInstance, "w1"); assertOpen(workflowInstance, "sub", "w2"); workflowInstance = endTask(workflowInstance, "w2"); assertTrue(workflowInstance.isEnded()); } /** * Tests a nested subprocess. * <pre> * * ┌───────────────────────┐ * │ subprocess1 │ * │ │ * │ ┌─────────────┐ │ * [start]──┤ │ subprocess2 │ ├─→[t3]─>[end] * │ [s1]─→┤ │ │ * │ │ [s2] │ │ * │ └─────────────┘ │ * └───────────────────────┘ * * </pre> */ @Test public void testNestedSubprocess() { // @formatter:off ExecutableWorkflow workflow = new ExecutableWorkflow() .activity("start", new StartEvent() .transitionTo("subprocess1")) .activity("subprocess1", new EmbeddedSubprocess() .activity("s1", new ReceiveTask() .transitionTo("subprocess2")) .activity("subprocess2", new EmbeddedSubprocess() .activity("s2", new ReceiveTask())) .transitionTo("t3")) .activity("t3", new ReceiveTask() .transitionTo("end")) .activity("end", new EndEvent()); // @formatter:on deploy(workflow); WorkflowInstance workflowInstance = start(workflow); assertOpen(workflowInstance, "subprocess1", "s1"); workflowInstance = endTask(workflowInstance, "s1"); assertOpen(workflowInstance, "subprocess1", "subprocess2", "s2"); workflowInstance = endTask(workflowInstance, "s2"); assertOpen(workflowInstance, "t3"); assertFalse(workflowInstance.isEnded()); } }