package hudson.plugins.im.tools;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import hudson.model.FreeStyleBuild;
import hudson.model.Result;
import org.junit.Test;
public class BuildHelperTest {
@Test
public void testIsFix() throws Exception {
{
FreeStyleBuild previousBuild = mock(FreeStyleBuild.class);
when(previousBuild.getResult()).thenReturn(Result.FAILURE);
FreeStyleBuild build = mock(FreeStyleBuild.class);
when(build.getPreviousBuild()).thenReturn(previousBuild);
// non non-successful build can ever be a fix:
when(build.getResult()).thenReturn(Result.ABORTED);
assertFalse(BuildHelper.isFix(build));
when(build.getResult()).thenReturn(Result.NOT_BUILT);
assertFalse(BuildHelper.isFix(build));
when(build.getResult()).thenReturn(Result.UNSTABLE);
assertFalse(BuildHelper.isFix(build));
when(build.getResult()).thenReturn(Result.FAILURE);
assertFalse(BuildHelper.isFix(build));
// only a success can be a fix
when(build.getResult()).thenReturn(Result.SUCCESS);
assertTrue(BuildHelper.isFix(build));
}
{
// a success without a previous failure cannot be a fix:
FreeStyleBuild build = mock(FreeStyleBuild.class);
when(build.getResult()).thenReturn(Result.SUCCESS);
assertFalse(BuildHelper.isFix(build));
}
{
// ABORTED doesn't count as failure
FreeStyleBuild build = mock(FreeStyleBuild.class);
when(build.getResult()).thenReturn(Result.ABORTED);
assertFalse(BuildHelper.isFix(build));
FreeStyleBuild nextBuild = mock(FreeStyleBuild.class);
when(nextBuild.getResult()).thenReturn(Result.SUCCESS);
when(nextBuild.getPreviousBuild()).thenReturn(build);
assertFalse(BuildHelper.isFix(nextBuild));
// but if there was a unstable/failing build somewhere before,
// it is a fix again
FreeStyleBuild anotherAborted = mock(FreeStyleBuild.class);
when(build.getResult()).thenReturn(Result.ABORTED);
when(build.getPreviousBuild()).thenReturn(anotherAborted);
FreeStyleBuild anUnstableBuild = mock(FreeStyleBuild.class);
when(build.getResult()).thenReturn(Result.UNSTABLE);
when(anotherAborted.getPreviousBuild()).thenReturn(anUnstableBuild);
assertTrue(BuildHelper.isFix(nextBuild));
}
}
public void testGetResultDescription() throws Exception {
FreeStyleBuild build = mock(FreeStyleBuild.class);
when(build.getResult()).thenReturn(Result.SUCCESS);
assertEquals("SUCCESS", BuildHelper.getResultDescription(build));
when(build.getResult()).thenReturn(Result.FAILURE);
assertEquals("FAILURE", BuildHelper.getResultDescription(build));
FreeStyleBuild previousBuild = mock(FreeStyleBuild.class);
when(previousBuild.getResult()).thenReturn(Result.FAILURE);
when(build.getPreviousBuild()).thenReturn(previousBuild);
assertEquals("STILL FAILING", BuildHelper.getResultDescription(build));
when(build.getResult()).thenReturn(Result.SUCCESS);
assertEquals("FIXED", BuildHelper.getResultDescription(build));
when(build.getResult()).thenReturn(Result.UNSTABLE);
assertEquals("UNSTABLE", BuildHelper.getResultDescription(build));
when(previousBuild.getResult()).thenReturn(Result.UNSTABLE);
assertEquals("STILL UNSTABLE", BuildHelper.getResultDescription(build));
when(build.getResult()).thenReturn(Result.SUCCESS);
assertEquals("FIXED", BuildHelper.getResultDescription(build));
when(previousBuild.getResult()).thenReturn(Result.ABORTED);
assertEquals("ABORTED", BuildHelper.getResultDescription(previousBuild));
when(build.getResult()).thenReturn(Result.SUCCESS);
// don't mark it as fixed:
assertEquals("SUCCESS", BuildHelper.getResultDescription(build));
}
}