/**
* Copyright (c) 2014 - 2017 Frank Appel
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Frank Appel - initial API and implementation
*/
package com.codeaffine.workflow.internal;
import static com.codeaffine.workflow.test.util.NodeDefinitionAssert.assertThat;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import org.junit.Before;
import org.junit.Test;
import com.codeaffine.workflow.NodeDefinition;
import com.codeaffine.workflow.definition.Matcher;
import com.codeaffine.workflow.test.util.WorkflowDefinitionHelper.TestActivity;
import com.codeaffine.workflow.test.util.WorkflowDefinitionHelper.TestDecision;
import com.codeaffine.workflow.test.util.WorkflowDefinitionHelper.TestTask;
public class WorkflowDefinitionImplTest {
private static final String ID = "id";
private static final String NODE_1 = "node1";
private static final String NODE_2 = "node2";
private static final String NODE_3 = "node3";
private WorkflowDefinitionImpl definition;
@Before
public void setUp() {
definition = new WorkflowDefinitionImpl();
}
@Test
public void setId() {
definition.setId( ID );
assertThat( definition.getId() ).isEqualTo( ID );
}
@Test
public void addActivity() {
definition.addActivity( NODE_1, TestActivity.class, NODE_2 );
NodeDefinition[] nodes = definition.getNodeDefinitions();
assertThat( nodes[ 0 ] )
.hasNodeId( NODE_1 )
.hasType( TestActivity.class )
.hasSuccessors( NODE_2 );
assertThat( nodes ).hasSize( 1 );
}
@Test
public void addTask() {
definition.addTask( NODE_1, TestTask.class, NODE_2 );
NodeDefinition[] nodes = definition.getNodeDefinitions();
assertThat( nodes[ 0 ] )
.hasNodeId( NODE_1 )
.hasType( TestTask.class )
.hasSuccessors( NODE_2 );
assertThat( nodes ).hasSize( 1 );
}
@Test( expected = IllegalArgumentException.class )
public void addActivityWithNullAsNodeId() {
definition.addActivity( null, TestActivity.class, NODE_2 );
}
@Test( expected = IllegalArgumentException.class )
public void addActivityWithNullAsType() {
definition.addActivity( NODE_1, null, NODE_2 );
}
@Test
public void addDecision() {
definition.addDecision( NODE_1, TestDecision.class, NODE_1, NODE_2, NODE_3 );
NodeDefinition[] nodes = definition.getNodeDefinitions();
assertThat( nodes[ 0 ] )
.hasNodeId( NODE_1 )
.hasType( TestDecision.class )
.hasSuccessors( NODE_1, NODE_2, NODE_3 );
assertThat( nodes ).hasSize( 1 );
}
@Test( expected = IllegalArgumentException.class )
public void addDecisionWithNullAsNodeId() {
definition.addDecision( null, TestDecision.class, NODE_1, NODE_2 );
}
@Test( expected = IllegalArgumentException.class )
public void addDecisionWithNullAsDecision() {
definition.addDecision( NODE_1, null, NODE_1, NODE_2 );
}
@Test( expected = IllegalArgumentException.class )
public void addDecisionWithNullAsSuccessor1() {
definition.addDecision( NODE_1, TestDecision.class, null, NODE_2 );
}
@Test( expected = IllegalArgumentException.class )
public void addDecisionWithNullAsSuccessor2() {
definition.addDecision( NODE_1, TestDecision.class, NODE_1, null );
}
@Test( expected = IllegalArgumentException.class )
public void addDecisionWithNullAsVarArgSuccessors() {
definition.addDecision( NODE_1, TestDecision.class, NODE_1, NODE_2, ( String[] )null );
}
@Test( expected = IllegalArgumentException.class )
public void addDecisionWithNullAsVarArgSuccessorsElement() {
definition.addDecision( NODE_1, TestDecision.class, NODE_1, NODE_2, new String[] { null } );
}
@Test
public void setStart() {
definition.addActivity( NODE_1, TestActivity.class, NODE_2 );
definition.setStart( NODE_1 );
assertThat( definition.getStartNode() )
.hasNodeId( NODE_1 )
.hasType( TestActivity.class )
.hasSuccessors( NODE_2 );
assertThat( definition.getStart() ).isEqualTo( NODE_1 );
}
@Test( expected = IllegalArgumentException.class )
public void setStartWithNullAsStartNodeId() {
definition.setStart( null );
}
@Test
public void getNode() {
definition.addActivity( NODE_1, TestActivity.class, NODE_2 );
definition.setStart( NODE_1 );
assertThat( definition.getNode( NODE_1 ) )
.hasNodeId( NODE_1 )
.hasType( TestActivity.class )
.hasSuccessors( NODE_2 );
}
@Test
public void setMatcher() {
Matcher expected = mock( Matcher.class );
definition.setMatcher( expected );
Matcher actual = definition.getMatcher();
assertThat( actual ).isSameAs( expected );
}
}