package ee.telekom.workflow.graph.node.event;
import java.util.HashMap;
import java.util.Map;
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.GraphWorkItem;
import ee.telekom.workflow.graph.RecordEventsListener;
import ee.telekom.workflow.graph.Token;
import ee.telekom.workflow.graph.node.output.MapEntryMapping;
import ee.telekom.workflow.graph.node.output.OutputMapping;
import ee.telekom.workflow.graph.node.output.ValueMapping;
public class CatchSignalTest extends AbstractGraphTest{
@Test
public void one(){
RecordEventsListener listener = new RecordEventsListener();
GraphEngine engine = createEngine( listener );
Graph graph = GraphFactory.INSTANCE.signal_one();
GraphInstance instance = engine.start( graph, null );
assertActiveTokens( instance, 1 );
Token token = instance.getTokens().iterator().next();
assertAwaitingSignal( token, GraphFactory.SIGNAL );
assertActiveWorkItems( instance, 1 );
completeWorkItemOnToken( engine, token );
assertActiveTokens( instance, 0 );
assertActiveWorkItems( instance, 0 );
Assert.assertEquals( EVENTS_1WI, listener.getEvents() );
}
@Test
public void one_with_valuemapping(){
Object result = new Object();
OutputMapping resultMapping = new ValueMapping( "result" );
RecordEventsListener listener = new RecordEventsListener();
GraphEngine engine = createEngine( listener );
Graph graph = GraphFactory.INSTANCE.signal_one_special( resultMapping );
GraphInstance instance = engine.start( graph, null );
GraphWorkItem wi = getActiveWorkItems( instance ).iterator().next();
wi.setResult( result );
engine.complete( wi );
Assert.assertSame( result,
instance.getEnvironment().getAttribute( "result" ) );
Assert.assertEquals( EVENTS_1WI, listener.getEvents() );
}
@Test
public void one_with_mapentrymapping(){
Map<String, String> result = new HashMap<>();
result.put( "alpha", "alphaValue" );
result.put( "beta", "betaValue" );
Map<String, String> mapping = new HashMap<>();
mapping.put( "alpha", "a" );
mapping.put( "beta", "b" );
OutputMapping resultMapping = new MapEntryMapping( mapping );
RecordEventsListener listener = new RecordEventsListener();
GraphEngine engine = createEngine( listener );
Graph graph = GraphFactory.INSTANCE.signal_one_special( resultMapping );
GraphInstance instance = engine.start( graph, null );
GraphWorkItem wi = getActiveWorkItems( instance ).iterator().next();
wi.setResult( result );
engine.complete( wi );
Assert.assertEquals( "alphaValue", instance.getEnvironment()
.getAttribute( "a" ) );
Assert.assertEquals( "betaValue", instance.getEnvironment()
.getAttribute( "b" ) );
Assert.assertEquals( EVENTS_1WI, listener.getEvents() );
}
@Test
public void one_pre_post(){
RecordEventsListener listener = new RecordEventsListener();
GraphEngine engine = createEngine( listener );
Graph graph = GraphFactory.INSTANCE.signal_one_pre_post();
GraphInstance instance = engine.start( graph, null );
assertActiveTokens( instance, 1 );
Token token = instance.getTokens().iterator().next();
assertAwaitingSignal( token, GraphFactory.SIGNAL );
assertActiveWorkItems( instance, 1 );
completeWorkItemOnToken( engine, token );
assertActiveTokens( instance, 0 );
assertPath( instance, "1,3" );
assertActiveWorkItems( instance, 0 );
Assert.assertEquals( EVENTS_1WI, listener.getEvents() );
}
@Test
public void two(){
RecordEventsListener listener = new RecordEventsListener();
GraphEngine engine = createEngine( listener );
Graph graph = GraphFactory.INSTANCE.signal_two();
GraphInstance instance = engine.start( graph, null );
assertActiveTokens( instance, 1 );
Token token = instance.getTokens().iterator().next();
assertAwaitingSignal( token, GraphFactory.SIGNAL );
assertActiveWorkItems( instance, 1 );
completeWorkItemOnToken( engine, token );
assertActiveTokens( instance, 1 );
assertAwaitingSignal( token, GraphFactory.SIGNAL );
assertActiveWorkItems( instance, 1 );
completeWorkItemOnToken( engine, token );
assertActiveTokens( instance, 0 );
assertActiveWorkItems( instance, 0 );
Assert.assertEquals( EVENTS_2WI_SERIAL, listener.getEvents() );
}
@Test
public void parallel(){
RecordEventsListener listener = new RecordEventsListener();
GraphEngine engine = createEngine( listener );
Graph graph = GraphFactory.INSTANCE.signal_parallel_pre_post();
GraphInstance instance = engine.start( graph, null );
assertActiveTokens( instance, 3 );
Token token2 = getTokenById( instance.getTokens(), 2 );
Token token3 = getTokenById( instance.getTokens(), 3 );
assertAwaitingSignal( token2, GraphFactory.SIGNAL );
assertAwaitingSignal( token3, GraphFactory.SIGNAL );
assertActiveWorkItems( instance, 2 );
assertPath( instance, "1" );
completeWorkItemOnToken( engine, token2 );
assertAwaitingSignal( token3, GraphFactory.SIGNAL );
assertActiveWorkItems( instance, 1 );
assertPath( instance, "1" );
completeWorkItemOnToken( engine, token3 );
assertActiveTokens( instance, 0 );
assertActiveWorkItems( instance, 0 );
assertPath( instance, "1,6" );
Assert.assertEquals( EVENTS_2WI_PARALLEL, listener.getEvents() );
}
}