package net.sourceforge.cruisecontrol.dashboard.service;
import net.sourceforge.cruisecontrol.BuildLoopInformation;
import net.sourceforge.cruisecontrol.dashboard.BuildSummary;
import net.sourceforge.cruisecontrol.dashboard.CurrentStatus;
import net.sourceforge.cruisecontrol.dashboard.utils.CCDateFormatter;
import net.sourceforge.cruisecontrol.dashboard.repository.BuildInformationRepository;
import org.jmock.Mock;
import org.jmock.cglib.MockObjectTestCase;
import org.joda.time.DateTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class LatestBuildSummariesServiceTest extends MockObjectTestCase {
private Mock mockHistoricalBuildSummaries;
private Mock mockBuildLoopQueryService;
private LatestBuildSummariesService latestBuildSummariesService;
public void setUp() {
mockHistoricalBuildSummaries = mock(
HistoricalBuildSummariesService.class, new Class[]{ConfigurationService.class,
BuildSummaryService.class}, new Object[]{null, null});
mockBuildLoopQueryService = mock(
BuildLoopQueryService.class, new Class[]{EnvironmentService.class,
BuildInformationRepository.class}, new Object[]{null, null});
latestBuildSummariesService = new LatestBuildSummariesService(
(HistoricalBuildSummariesService)
mockHistoricalBuildSummaries.proxy(),
(BuildLoopQueryService) mockBuildLoopQueryService.proxy());
}
public void testShouldUpdateTheStatusOfActivatedProject() throws Exception {
BuildSummary bs = new BuildSummary("project2");
bs.updateStatus(CurrentStatus.WAITING.getCruiseStatus());
Mock mockProjectInfo = mock(
BuildLoopInformation.ProjectInfo.class, new Class[]{String.class, String.class, String.class},
new Object[]{"", "", ""});
mockProjectInfo.expects(once()).method("getStatus").will(returnValue(CurrentStatus.PAUSED.getCruiseStatus()));
mockHistoricalBuildSummaries.expects(once()).method("getLatest").with(eq("project2")).will(returnValue(bs));
mockBuildLoopQueryService.expects(once()).method("getProjectInfo").will(returnValue(mockProjectInfo.proxy()));
mockBuildLoopQueryService.expects(once()).method("getServerName").will(
returnValue("localhost"));
assertFalse(CurrentStatus.PAUSED.equals(bs.getCurrentStatus()));
latestBuildSummariesService.getLatestProject("project2");
assertEquals(CurrentStatus.PAUSED, bs.getCurrentStatus());
}
public void testShouldBeAbleToReturnAllLastestBuildOfProjects() {
BuildSummary inactivebs = new BuildSummary("projec1");
inactivebs.updateStatus(CurrentStatus.WAITING.getCruiseStatus());
List inactives = new ArrayList();
inactives.add(inactivebs);
BuildSummary activebs = new BuildSummary("projec2");
activebs.updateStatus(CurrentStatus.WAITING.getCruiseStatus());
List actives = new ArrayList();
actives.add(activebs);
BuildSummary discontinuedbs = new BuildSummary("projec3");
discontinuedbs.updateStatus(CurrentStatus.DISCONTINUED.getCruiseStatus());
List discontinueds = new ArrayList();
discontinueds.add(discontinuedbs);
mockHistoricalBuildSummaries.expects(once()).method("createInactiveProjects").will(returnValue(inactives));
mockHistoricalBuildSummaries.expects(once()).method("createActiveProjects").will(returnValue(actives));
mockHistoricalBuildSummaries.expects(once()).method("createDiscontinuedProjects")
.will(returnValue(discontinueds));
mockBuildLoopQueryService.expects(atLeastOnce()).method("getAllProjectsStatus").will(
returnValue(
new HashMap() {
public boolean containsKey(Object object) {
return true;
}
public Object get(Object key) {
return CurrentStatus.BUILDING.getCruiseStatus();
}
}));
Mock mockProjectInfo = mock(BuildLoopInformation.ProjectInfo.class,
new Class[]{String.class, String.class, String.class}, new Object[]{null, null, null});
mockProjectInfo.expects(atLeastOnce()).method("getBuildStartTime").will(returnValue("2007-09-08T12:13:11"));
mockBuildLoopQueryService.expects(atLeastOnce()).method("getProjectInfo").will(
returnValue(mockProjectInfo.proxy()));
mockBuildLoopQueryService.expects(atLeastOnce()).method("getServerName").will(
returnValue("localhost"));
List allLatestOfProjects = latestBuildSummariesService.getLatestOfProjects();
assertEquals(3, allLatestOfProjects.size());
assertEquals("localhost", ((BuildSummary) allLatestOfProjects.get(0)).getServerName());
//should be sorted by name
assertEquals(inactivebs, allLatestOfProjects.get(0));
assertEquals(CurrentStatus.BUILDING, inactivebs.getCurrentStatus());
DateTime dateTime = CCDateFormatter.iso8601("2007-09-08T12:13:11");
assertEquals(dateTime, inactivebs.getBuildingSince());
assertEquals(activebs, allLatestOfProjects.get(1));
assertEquals(discontinuedbs, allLatestOfProjects.get(2));
}
public void testShouldBeAbleToReturnLatestBuildOfProjects() {
BuildSummary discontinuedbs = new BuildSummary("projec3");
discontinuedbs.updateStatus(CurrentStatus.DISCONTINUED.getCruiseStatus());
mockHistoricalBuildSummaries.expects(once()).method("getLatest").with(
eq("project3")).will(returnValue(discontinuedbs));
Mock mockProjectInfo = mock(BuildLoopInformation.ProjectInfo.class,
new Class[]{String.class, String.class, String.class}, new Object[]{null, null, null});
mockProjectInfo.expects(once()).method("getBuildStartTime").will(returnValue("2007-09-08T12:13:11"));
mockProjectInfo.expects(once()).method("getStatus").will(
returnValue(CurrentStatus.BUILDING.getCruiseStatus()));
mockBuildLoopQueryService.expects(once()).method("getProjectInfo").will(
returnValue(mockProjectInfo.proxy()));
mockBuildLoopQueryService.expects(once()).method("getServerName").will(
returnValue("localhost"));
BuildSummary buildSummary = latestBuildSummariesService.getLatestProject("project3");
DateTime dateTime = CCDateFormatter.iso8601("2007-09-08T12:13:11");
assertEquals(CurrentStatus.BUILDING, buildSummary.getCurrentStatus());
assertEquals(dateTime, buildSummary.getBuildingSince());
}
public void testShouldNotChangeDefaultStatusWhenThereIsNoSuchProjectInLiveStatus() throws Exception {
BuildSummary inactivebs = new BuildSummary("projec1");
inactivebs.updateStatus(CurrentStatus.WAITING.getCruiseStatus());
List inactives = new ArrayList();
inactives.add(inactivebs);
mockHistoricalBuildSummaries.expects(once()).method("createInactiveProjects").will(returnValue(inactives));
mockHistoricalBuildSummaries.expects(once()).method("createActiveProjects").will(returnValue(new ArrayList()));
mockHistoricalBuildSummaries.expects(once()).method("createDiscontinuedProjects")
.will(returnValue(new ArrayList()));
mockBuildLoopQueryService.expects(atLeastOnce()).method("getAllProjectsStatus").will(
returnValue(
new HashMap() {
public boolean containsKey(Object object) {
return false;
}
public Object get(Object key) {
return CurrentStatus.BUILDING.getCruiseStatus();
}
}));
latestBuildSummariesService.getLatestOfProjects();
assertEquals(CurrentStatus.WAITING, inactivebs.getCurrentStatus());
}
}