package ee.telekom.workflow.graph.node.gateway; import java.util.Arrays; import java.util.Collections; import java.util.List; import org.junit.Assert; import org.junit.Test; import ee.telekom.workflow.graph.AbstractGraphTest; import ee.telekom.workflow.graph.Graph; import ee.telekom.workflow.graph.GraphEngine; import ee.telekom.workflow.graph.GraphFactory; import ee.telekom.workflow.graph.GraphInstance; import ee.telekom.workflow.graph.RecordEventsListener; import ee.telekom.workflow.graph.Token; public class _07_CancellingDiscriminatorTest extends AbstractGraphTest{ private static final List<String> EVENTS_1ST_SIGNAL = Collections .unmodifiableList( Arrays.asList( RecordEventsListener.INSTANCE_CREATED, RecordEventsListener.WORK_ITEM_CREATED + " 4", RecordEventsListener.WORK_ITEM_CREATED + " 5", RecordEventsListener.WORK_ITEM_CREATED + " 6", RecordEventsListener.WORK_ITEM_CREATED + " 7", RecordEventsListener.INSTANCE_STARTED, RecordEventsListener.WORK_ITEM_COMPLETED + " 4", RecordEventsListener.WORK_ITEM_CANCELLED + " 5", RecordEventsListener.WORK_ITEM_CANCELLED + " 6", RecordEventsListener.WORK_ITEM_CANCELLED + " 7", RecordEventsListener.INSTANCE_COMPLETED ) ); private static final List<String> EVENTS_2ND_SIGNAL = Collections .unmodifiableList( Arrays.asList( RecordEventsListener.INSTANCE_CREATED, RecordEventsListener.WORK_ITEM_CREATED + " 4", RecordEventsListener.WORK_ITEM_CREATED + " 5", RecordEventsListener.WORK_ITEM_CREATED + " 6", RecordEventsListener.WORK_ITEM_CREATED + " 7", RecordEventsListener.INSTANCE_STARTED, RecordEventsListener.WORK_ITEM_COMPLETED + " 5", RecordEventsListener.WORK_ITEM_CANCELLED + " 4", RecordEventsListener.WORK_ITEM_CANCELLED + " 6", RecordEventsListener.WORK_ITEM_CANCELLED + " 7", RecordEventsListener.INSTANCE_COMPLETED ) ); private static final List<String> EVENTS_3RD_SIGNAL = Collections .unmodifiableList( Arrays.asList( RecordEventsListener.INSTANCE_CREATED, RecordEventsListener.WORK_ITEM_CREATED + " 4", RecordEventsListener.WORK_ITEM_CREATED + " 5", RecordEventsListener.WORK_ITEM_CREATED + " 6", RecordEventsListener.WORK_ITEM_CREATED + " 7", RecordEventsListener.INSTANCE_STARTED, RecordEventsListener.WORK_ITEM_COMPLETED + " 6", RecordEventsListener.WORK_ITEM_CANCELLED + " 7", RecordEventsListener.WORK_ITEM_CANCELLED + " 4", RecordEventsListener.WORK_ITEM_CANCELLED + " 5", RecordEventsListener.INSTANCE_COMPLETED ) ); private static final List<String> EVENTS_4TH_SIGNAL = Collections .unmodifiableList( Arrays.asList( RecordEventsListener.INSTANCE_CREATED, RecordEventsListener.WORK_ITEM_CREATED + " 4", RecordEventsListener.WORK_ITEM_CREATED + " 5", RecordEventsListener.WORK_ITEM_CREATED + " 6", RecordEventsListener.WORK_ITEM_CREATED + " 7", RecordEventsListener.INSTANCE_STARTED, RecordEventsListener.WORK_ITEM_COMPLETED + " 7", RecordEventsListener.WORK_ITEM_CANCELLED + " 6", RecordEventsListener.WORK_ITEM_CANCELLED + " 4", RecordEventsListener.WORK_ITEM_CANCELLED + " 5", RecordEventsListener.INSTANCE_COMPLETED ) ); @Test public void one(){ assertExecution( GraphFactory.INSTANCE.cancelling_discriminator_one(), "2" ); } @Test public void one_post(){ assertExecution( GraphFactory.INSTANCE.cancelling_discriminator_one_post(), "2,4" ); } @Test public void two(){ assertExecution( GraphFactory.INSTANCE.cancelling_discriminator_two(), "2" ); } @Test public void two_firstBranchEmpty(){ assertExecution( GraphFactory.INSTANCE .cancelling_discriminator_two_firstBranchEmpty(), null ); } @Test public void two_secondBranchEmpty(){ assertExecution( GraphFactory.INSTANCE .cancelling_discriminator_two_secondBranchEmpty(), "2" ); } @Test public void two_before_after(){ assertExecution( GraphFactory.INSTANCE.cancelling_discriminator_two_pre_post(), "1,3,6" ); } @Test public void firstBranchEmpty_pre_post(){ assertExecution( GraphFactory.INSTANCE .cancelling_discriminator_two_firstBranchEmpty_pre_post(), "1,5" ); } @Test public void secondBranchEmpty_pre_post(){ assertExecution( GraphFactory.INSTANCE .cancelling_discriminator_two_secondBranchEmpty_pre_post(), "1,3,6" ); } @Test public void twice(){ assertExecution( GraphFactory.INSTANCE.cancelling_discriminator_twice(), "1,3,6,8,11" ); } @Test public void and_nested(){ run_nested_test( GraphFactory.INSTANCE.cancelling_discriminator_and_nested(), 4, "1,3,9,8,16", EVENTS_1ST_SIGNAL ); run_nested_test( GraphFactory.INSTANCE.cancelling_discriminator_and_nested(), 5, "1,3,9,8,16", EVENTS_2ND_SIGNAL ); run_nested_test( GraphFactory.INSTANCE.cancelling_discriminator_and_nested(), 6, "1,3,9,14,16", EVENTS_3RD_SIGNAL ); run_nested_test( GraphFactory.INSTANCE.cancelling_discriminator_and_nested(), 7, "1,3,9,14,16", EVENTS_4TH_SIGNAL ); } @Test public void or_nested(){ run_nested_test( GraphFactory.INSTANCE.cancelling_discriminator_or_nested(), 4, "1,3,9,8,16", EVENTS_1ST_SIGNAL ); run_nested_test( GraphFactory.INSTANCE.cancelling_discriminator_or_nested(), 5, "1,3,9,8,16", EVENTS_2ND_SIGNAL ); run_nested_test( GraphFactory.INSTANCE.cancelling_discriminator_or_nested(), 6, "1,3,9,14,16", EVENTS_3RD_SIGNAL ); run_nested_test( GraphFactory.INSTANCE.cancelling_discriminator_or_nested(), 7, "1,3,9,14,16", EVENTS_4TH_SIGNAL ); } private void run_nested_test( Graph graph, int tokenId, String expectedPath, List<String> expectedEvents ){ RecordEventsListener listener = new RecordEventsListener(); GraphEngine engine = createEngine( listener ); GraphInstance instance = engine.start( graph, null ); assertActiveTokens( instance, 7 ); assertActiveWorkItems( instance, 4 ); Token token4 = getTokenById( instance.getTokens(), 4 ); Token token5 = getTokenById( instance.getTokens(), 5 ); Token token6 = getTokenById( instance.getTokens(), 6 ); Token token7 = getTokenById( instance.getTokens(), 7 ); assertAwaitingSignal( token4, "1" ); assertAwaitingSignal( token5, "2" ); assertAwaitingSignal( token6, "3" ); assertAwaitingSignal( token7, "4" ); completeWorkItemOnToken( engine, getTokenById( instance.getTokens(), tokenId ) ); assertActiveTokens( instance, 0 ); assertActiveWorkItems( instance, 0 ); Assert.assertEquals( expectedEvents, listener.getEvents() ); assertPath( instance, expectedPath ); } }