package managers;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.util.ArrayList;
import java.util.Map;
import org.junit.Before;
import dao.Dao;
import models.Factory;
import models.Project;
import models.Station;
import models.User;
import models.WorkItem;
import models.WorkItemStateTransition;
public class Setup {
Factory factory;
Dao<Factory> factoryDaoMock;
FactoryManager factoryManager;
Station station;
Dao<Station> stationDaoMock;
StationManager stationManager;
WorkItem workItem;
Dao<WorkItem> workItemDaoMock;
WorkItemManager workItemManager;
WorkItemStateTransition transition;
Dao<WorkItemStateTransition> historyDaoMock;
User user;
Dao<User> userDaoMock;
UserManager userManager;
Project project;
Dao<Project> projectDaoMock;
ProjectManager projectManager;
/**
* Make one of everything for testing. Any objects with special
* characteristics will have to be generated in the tests separately.
*/
@SuppressWarnings("unchecked")
@Before
public void setup() {
user = new User();
user.id = new Long(1);
userDaoMock = mock(Dao.class);
when(userDaoMock.read(user.id)).thenReturn(user);
userManager = new UserManager(userDaoMock);
station = new Station();
station.id = new Long(1);
station.isFirst = true;
station.isLast = true;
station.workers = new ArrayList<User>();
station.workers.add(user);
stationDaoMock = mock(Dao.class);
when(stationDaoMock.read(station.id)).thenReturn(station);
stationManager = new StationManager(stationDaoMock);
factory = new Factory();
factory.id = new Long(1);
factory.assemblyLine = new ArrayList<Station>();
factory.assemblyLine.add(station);
station.factory = factory;
factoryDaoMock = mock(Dao.class);
when(factoryDaoMock.read(factory.id)).thenReturn(factory);
when(stationDaoMock.filter(any(Map.class))).thenReturn(factory.assemblyLine);
factoryManager = new FactoryManager(factoryDaoMock, stationManager);
transition = new WorkItemStateTransition(null, null, null, null, null, null, null, null);
transition.id = new Long(1);
historyDaoMock = mock(Dao.class);
when(historyDaoMock.read(transition.id)).thenReturn(transition);
when(historyDaoMock.update(transition)).thenReturn(transition);
workItem = new WorkItem();
workItem.id = new Long(1);
workItem.history = new ArrayList<WorkItemStateTransition>();
workItem.history.add(transition);
workItem.station = station;
station.workItems = new ArrayList<WorkItem>();
station.workItems.add(workItem);
workItemDaoMock = mock(Dao.class);
when(workItemDaoMock.read(workItem.id)).thenReturn(workItem);
when(workItemDaoMock.update(workItem)).thenReturn(workItem);
when(workItemDaoMock.create(workItem)).thenReturn(workItem);
workItemManager = new WorkItemManager(workItemDaoMock, historyDaoMock, new UserManager(userDaoMock),
stationManager);
project = new Project();
project.id = new Long(1);
project.workItems = new ArrayList<WorkItem>();
project.workItems.add(workItem);
project.workItems = new ArrayList<WorkItem>();
project.workItems.add(workItem);
workItem.project = project;
projectDaoMock = mock(Dao.class);
when(projectDaoMock.read(project.id)).thenReturn(project);
projectManager = new ProjectManager(projectDaoMock, factoryManager, workItemManager);
}
}