package hudson.plugins.statusmonitor;
import hudson.matrix.MatrixProject;
import hudson.maven.MavenModuleSet;
import hudson.model.AbstractProject;
import hudson.model.FreeStyleProject;
import org.jvnet.hudson.test.HudsonTestCase;
import java.io.IOException;
public class MonitorActionTest
extends HudsonTestCase
{
private MonitorAction monitorAction;
@Override
protected void setUp() throws Exception
{
super.setUp();
monitorAction = new MonitorAction();
}
public void testGetProjectsArray_shouldGetProjectFreeStyleProjectWithAMonitorPublisher()
throws Exception
{
FreeStyleProject freeStyleProject = createFreeStyleProject();
addMonitorPublisher(freeStyleProject);
AbstractProject[][] projects = monitorAction.getProjectsArray();
assertTrue("Free-style project should be in array since one of its publishers is a MonitorPublisher.",
isInArray(projects, freeStyleProject));
}
public void testGetProjectsArray_shouldGetMavenProjectProjectWithAMonitorPublisher()
throws Exception
{
MavenModuleSet mavenProject = createMavenProject();
addMonitorPublisher(mavenProject);
AbstractProject[][] projects = monitorAction.getProjectsArray();
assertTrue("Maven project should be in array since one of its publishers is a MonitorPublisher.",
isInArray(projects, mavenProject));
}
public void testGetProjectsArray_shouldGetMatrixProjectWithAMonitorPublisher()
throws Exception
{
MatrixProject matrixProject = createMatrixProject();
addMonitorPublisher(matrixProject);
AbstractProject[][] projects = monitorAction.getProjectsArray();
assertTrue("Matrix project should be in array since one of its publishers is a MonitorPublisher.",
isInArray(projects, matrixProject));
}
public void testGetProjectsArray_shouldNotGetProjectsWithoutAMonitorPublisher()
throws Exception
{
FreeStyleProject freeStyleProject = createFreeStyleProject();
AbstractProject[][] projects = monitorAction.getProjectsArray();
assertFalse("There should not be any projects in the array since none of the projects have a MonitorPublisher.",
isInArray(projects, freeStyleProject));
}
public void testGetProjectsArray_shouldGetMultipleProjectsWhenMultipleProjectsWithMonitorPublishersFound()
throws Exception
{
FreeStyleProject freeStyleProject = createFreeStyleProject();
addMonitorPublisher(freeStyleProject);
MatrixProject matrixProject = createMatrixProject();
addMonitorPublisher(matrixProject);
AbstractProject[][] projects = monitorAction.getProjectsArray();
assertTrue("freeStyleProject should be in array since one of its publishers is a MonitorPublisher.",
isInArray(projects, freeStyleProject));
assertTrue("matrixProject should be in array since one of its publishers is a MonitorPublisher.",
isInArray(projects, matrixProject));
}
public void testGetProjectsArray_shouldBeEmptyArrayWhenNoPojrectsWithMonitorPublishersFound()
{
AbstractProject[][] projects = monitorAction.getProjectsArray();
assertEquals(0, projects.length);
}
public void testGetProjectsArray_shouldBe1Column3RowsWhenThereAreLessThan3ProjectsWithMonitorPublishersFound()
throws Exception
{
addMonitorPublisher(createFreeStyleProject());
addMonitorPublisher(createFreeStyleProject());
addMonitorPublisher(createFreeStyleProject());
AbstractProject[][] projects = monitorAction.getProjectsArray();
assertEquals("Should have 3 rows of projects with MonitorPublisher publishers.", 3, projects.length);
assertEquals("Row should have one project.", 1, projects[0].length);
assertEquals("Row should have one project.", 1, projects[1].length);
assertEquals("Row should have one project.", 1, projects[2].length);
}
public void testGetProjectsArray_shouldHave3RowsAnd2ColumnsOfProjectsWhenThereAreMoreThan3ProjectsWithMonitorPublishersFound()
throws Exception
{
// 7 projects
addMonitorPublisher(createFreeStyleProject());
addMonitorPublisher(createFreeStyleProject());
addMonitorPublisher(createFreeStyleProject());
addMonitorPublisher(createFreeStyleProject());
addMonitorPublisher(createFreeStyleProject());
addMonitorPublisher(createFreeStyleProject());
addMonitorPublisher(createFreeStyleProject());
AbstractProject[][] projects = monitorAction.getProjectsArray();
assertEquals("Should have 3 rows of projects with MonitorPublisher publishers.", 4, projects.length);
assertEquals("Row should have two projects.", 2, projects[0].length);
assertEquals("Row should have two projects.", 2, projects[1].length);
assertEquals("Row should have two projects.", 2, projects[2].length);
assertEquals("Row should have one project by itself.", 1, projects[3].length);
}
public void testGetProjectsArray_shouldHaveLastProjectByItselfInARowWhenMoreThan3ProjectsWithMonitorPublishersFound()
throws Exception
{
// 6 projects
addMonitorPublisher(createFreeStyleProject());
addMonitorPublisher(createFreeStyleProject());
addMonitorPublisher(createFreeStyleProject());
addMonitorPublisher(createFreeStyleProject());
addMonitorPublisher(createFreeStyleProject());
addMonitorPublisher(createFreeStyleProject());
AbstractProject[][] projects = monitorAction.getProjectsArray();
assertEquals("Should have 3 rows of projects with MonitorPublisher publishers.", 3, projects.length);
assertEquals("Row should have one project.", 2, projects[0].length);
assertEquals("Row should have one project.", 2, projects[1].length);
assertEquals("Row should have one project.", 2, projects[2].length);
}
private void addMonitorPublisher(AbstractProject project)
throws IOException
{
//noinspection unchecked
project.getPublishersList().add(new MonitorPublisher());
}
public boolean isInArray(AbstractProject[][] projects, AbstractProject expectedProject)
{
for (AbstractProject[] rowOfProjects : projects)
{
for (AbstractProject project : rowOfProjects)
{
if (expectedProject == project)
{
return true;
}
}
}
return false;
}
}