package com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features; import com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.JobView; import com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features.KnowsCurrentBuildsDetails.CurrentBuild; import org.junit.Test; import static com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.syntacticsugar.Sugar.*; import static com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.syntacticsugar.TimeMachine.assumeThat; import static com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.syntacticsugar.TimeMachine.currentTime; import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertThat; import java.util.Date; import java.util.List; public class KnowsCurrentBuildsDetailsTest { private JobView view; @Test public void should_know_current_build_number() { view = a(jobView().which(new KnowsCurrentBuildsDetails()).of( a(job().whereTheLast(build().isStillBuilding().and().hasNumber(5))))); assertThat(currentBuildsOf(view).get(0).name(), is("#5")); } @Test public void should_use_build_name_if_its_known() { view = a(jobView().which(new KnowsCurrentBuildsDetails()).of( a(job().whereTheLast(build().isStillBuilding().and().hasName("1.3.4+build.15"))))); assertThat(currentBuildsOf(view).get(0).name(), is("1.3.4+build.15")); } @Test public void should_know_the_url_of_the_last_build() { view = a(jobView().which(new KnowsCurrentBuildsDetails()).of( a(job().whereTheLast(build().isStillBuilding().and().hasNumber(22)))) .with(locatedAt("job/project-name"))); assertThat(currentBuildsOf(view).get(0).url(), is("job/project-name/22/")); } /* * Elapsed time */ @Test public void should_know_how_long_a_build_has_been_running_for() throws Exception { String startTime = "13:10:00", sixSecondsLater = "13:10:06", twoAndHalfMinutesLater = "13:12:30", anHourAndHalfLater = "14:40:00"; Date currentTime = currentTime().is(startTime); view = a(jobView().which(new KnowsCurrentBuildsDetails()).of( a(job().whereTheLast(build().startedAt(startTime).isStillBuilding()))) .assuming(currentTime)); CurrentBuild currentBuild = currentBuildsOf(view).get(0); assumeThat(currentTime).is(sixSecondsLater); assertThat(currentBuild.duration(), is("6s")); assumeThat(currentTime).is(twoAndHalfMinutesLater); assertThat(currentBuild.duration(), is("2m 30s")); assumeThat(currentTime).is(anHourAndHalfLater); assertThat(currentBuild.duration(), is("1h 30m 0s")); } private List<KnowsCurrentBuildsDetails.CurrentBuild> currentBuildsOf(JobView job) { return job.which(KnowsCurrentBuildsDetails.class).asJson().value(); } }