blob: 44b8197e1db59bb7dab0f801b46d862fde86b990 [file] [log] [blame]
/*********************************************************************
* Copyright (c) 2013 Boeing
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Boeing - initial API and implementation
**********************************************************************/
package org.eclipse.osee.ats.core.workflow.state;
import static org.mockito.Mockito.when;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.eclipse.osee.ats.api.AtsApi;
import org.eclipse.osee.ats.api.IAtsWorkItem;
import org.eclipse.osee.ats.api.data.AtsAttributeTypes;
import org.eclipse.osee.ats.api.user.AtsUser;
import org.eclipse.osee.ats.api.user.IAtsUserService;
import org.eclipse.osee.ats.api.util.IAtsChangeSet;
import org.eclipse.osee.ats.api.workdef.IAtsStateDefinition;
import org.eclipse.osee.ats.api.workdef.IAtsWorkDefinition;
import org.eclipse.osee.ats.api.workdef.IAttributeResolver;
import org.eclipse.osee.ats.api.workdef.StateType;
import org.eclipse.osee.ats.api.workflow.WorkState;
import org.eclipse.osee.ats.api.workflow.log.IAtsLogFactory;
import org.eclipse.osee.ats.api.workflow.state.IAtsStateManager;
import org.eclipse.osee.ats.api.workflow.state.IAtsWorkStateFactory;
import org.eclipse.osee.ats.core.internal.state.AtsWorkStateFactory;
import org.eclipse.osee.ats.core.internal.state.StateManager;
import org.eclipse.osee.ats.core.workflow.TestState;
import org.eclipse.osee.framework.core.enums.DemoUsers;
import org.eclipse.osee.framework.core.util.Result;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
/**
* Test Case for {@link StateManagerUtility}
*
* @author Donald G. Dunne
*/
public class StateManagerUtilityTest {
// @formatter:off
@Mock IAtsWorkItem workItem;
@Mock IAtsChangeSet changes;
@Mock IAtsWorkDefinition workDef;
@Mock IAtsStateDefinition analyzeState, completedState;
@Mock IAttributeResolver attrResolver;
@Mock IAtsStateManager stateMgr;
@Mock IAtsWorkStateFactory workStateFactory;
@Mock IAtsUserService userService;
@Mock IAtsLogFactory logFactory;
@Mock AtsApi atsApi;
// @formatter:on
private static final AtsUser Joe = new AtsUser(DemoUsers.Joe_Smith);
private static final AtsUser Kay = new AtsUser(DemoUsers.Kay_Jones);
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
when(workItem.getWorkDefinition()).thenReturn(workDef);
when(workItem.getStateMgr()).thenReturn(stateMgr);
when(workDef.getStateByName("Analyze")).thenReturn(analyzeState);
when(analyzeState.getStateType()).thenReturn(StateType.Working);
when(workDef.getStateByName("Completed")).thenReturn(completedState);
when(completedState.getStateType()).thenReturn(StateType.Completed);
}
@Test
public void testConstructor() {
new StateManagerUtility();
}
@Test
public void testInitializeStateMachine() {
StateManager stateMgr = new StateManager(workItem, logFactory, atsApi);
TestState state = new TestState("Analyze", StateType.Working);
StateManagerUtility.initializeStateMachine(stateMgr, state, Arrays.asList(Joe, Kay), Joe, changes);
Assert.assertEquals("Analyze", stateMgr.getCurrentStateName());
Assert.assertEquals(2, stateMgr.getAssignees().size());
state = new TestState("Analyze", StateType.Working);
StateManagerUtility.initializeStateMachine(stateMgr, state, null, Joe, changes);
Assert.assertEquals("Analyze", stateMgr.getCurrentStateName());
Assert.assertEquals(1, stateMgr.getAssignees().size());
Assert.assertEquals(Joe, stateMgr.getAssignees().iterator().next());
state = new TestState("Completed", StateType.Completed);
StateManagerUtility.initializeStateMachine(stateMgr, state, Arrays.asList(Joe, Kay), Joe, changes);
Assert.assertEquals("Completed", stateMgr.getCurrentStateName());
Assert.assertEquals(0, stateMgr.getAssignees().size());
}
@Test
public void testIsDirtyResult() {
AtsWorkStateFactory workStateFactory = new AtsWorkStateFactory(userService);
// test current state new
when(attrResolver.getAttributeCount(workItem, AtsAttributeTypes.CurrentState)).thenReturn(0);
Result result = StateManagerUtility.isDirtyResult(workItem, stateMgr, attrResolver, workStateFactory);
Assert.assertTrue(result.getText().contains("Current State new"));
// test current state modified
when(attrResolver.getAttributeCount(workItem, AtsAttributeTypes.CurrentState)).thenReturn(1);
when(attrResolver.getSoleAttributeValue(workItem, AtsAttributeTypes.CurrentState, null)).thenReturn("this");
when(stateMgr.getCurrentStateName()).thenReturn("Analyze");
result = StateManagerUtility.isDirtyResult(workItem, stateMgr, attrResolver, workStateFactory);
Assert.assertTrue(result.getText().contains("Current State modified"));
// test no visited states
when(attrResolver.getSoleAttributeValue(workItem, AtsAttributeTypes.CurrentState, null)).thenReturn("Analyze;;;");
List<String> emptyVisitedNames = new ArrayList<>();
when(stateMgr.getVisitedStateNames()).thenReturn(emptyVisitedNames);
result = StateManagerUtility.isDirtyResult(workItem, stateMgr, attrResolver, workStateFactory);
Assert.assertFalse(result.isTrue());
when(attrResolver.getSoleAttributeValue(workItem, AtsAttributeTypes.CurrentState, null)).thenReturn("Analyze;;;");
when(stateMgr.getVisitedStateNames()).thenReturn(Arrays.asList("Implement"));
when(attrResolver.getAttributesToStringList(workItem, AtsAttributeTypes.State)).thenReturn(
new ArrayList<String>());
result = StateManagerUtility.isDirtyResult(workItem, stateMgr, attrResolver, workStateFactory);
Assert.assertTrue(result.getText().contains("State [Implement] added"));
// test state added
when(attrResolver.getSoleAttributeValue(workItem, AtsAttributeTypes.CurrentState, null)).thenReturn("Analyze;;;");
when(stateMgr.getVisitedStateNames()).thenReturn(Arrays.asList("Implement"));
when(attrResolver.getAttributesToStringList(workItem, AtsAttributeTypes.State)).thenReturn(
new ArrayList<String>());
result = StateManagerUtility.isDirtyResult(workItem, stateMgr, attrResolver, workStateFactory);
Assert.assertTrue(result.getText().contains("State [Implement] added"));
// test state unmodified
when(attrResolver.getSoleAttributeValue(workItem, AtsAttributeTypes.CurrentState, null)).thenReturn("Analyze;;;");
when(stateMgr.getVisitedStateNames()).thenReturn(Arrays.asList("Implement"));
when(attrResolver.getAttributesToStringList(workItem, AtsAttributeTypes.State)).thenReturn(
Arrays.asList("Implement;;;"));
result = StateManagerUtility.isDirtyResult(workItem, stateMgr, attrResolver, workStateFactory);
Assert.assertFalse(result.isTrue());
// test state modified
when(stateMgr.getVisitedStateNames()).thenReturn(Arrays.asList("Analyze", "Implement"));
when(attrResolver.getSoleAttributeValue(workItem, AtsAttributeTypes.CurrentState, null)).thenReturn("Analyze;;;");
when(attrResolver.getAttributesToStringList(workItem, AtsAttributeTypes.State)).thenReturn(
Arrays.asList("Endorse;;;", "Implement;;;"));
WorkState workState = Mockito.mock(WorkState.class);
when(stateMgr.getHoursSpent("Implement")).thenReturn(1.3);
when(stateMgr.getHoursSpentStr("Implement")).thenReturn("1.3");
when(stateMgr.getState("Implement")).thenReturn(workState);
result = StateManagerUtility.isDirtyResult(workItem, stateMgr, attrResolver, workStateFactory);
Assert.assertTrue(
result.getText().contains("StateManager: State [Implement] modified was [Implement;;;] is [Implement;;1.3;]"));
}
}