package com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features; import com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.JobView; import org.junit.Test; import static com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.syntacticsugar.Sugar.*; import static com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.syntacticsugar.TimeMachine.currentTime; import static hudson.model.Result.SUCCESS; import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertThat; public class KnowsLastCompletedBuildDetailsTest { private JobView view; @Test public void should_know_current_build_number() { view = a(jobView().which(new KnowsLastCompletedBuildDetails()).of( a(job().whereTheLast(build().hasNumber(5))))); assertThat(lastCompletedBuildOf(view).name(), is("#5")); } @Test public void should_use_build_name_if_its_known() { view = a(jobView().which(new KnowsLastCompletedBuildDetails()).of( a(job().whereTheLast(build().hasName("1.3.4+build.15"))))); assertThat(lastCompletedBuildOf(view).name(), is("1.3.4+build.15")); } @Test public void should_know_the_url_of_the_last_build() { view = a(jobView().which(new KnowsLastCompletedBuildDetails()).of( a(job().whereTheLast(build().hasNumber(22)))) .with(locatedAt("job/project-name"))); assertThat(lastCompletedBuildOf(view).url(), is("job/project-name/22/")); } /* * Elapsed time */ @Test public void should_know_how_long_the_last_build_took_once_its_finished() throws Exception { view = a(jobView().which(new KnowsLastCompletedBuildDetails()).of( a(job().whereTheLast(build().finishedWith(SUCCESS).and().took(3))))); assertThat(lastCompletedBuildOf(view).duration(), is("3m 0s")); } /* * Last build, last success and last failure (ISO 8601) */ @Test public void should_know_how_long_since_the_last_build_happened() throws Exception { String tenMinutesInMilliseconds = String.format("%d", 10 * 60 * 1000); view = a(jobView().which(new KnowsLastCompletedBuildDetails()).of( a(job().whereTheLast(build().startedAt("18:05:00").and().took(5)))) .assuming(currentTime().is("18:20:00"))); assertThat(lastCompletedBuildOf(view).timeElapsedSince(), is(tenMinutesInMilliseconds)); } private KnowsLastCompletedBuildDetails.LastCompletedBuild lastCompletedBuildOf(JobView job) { return job.which(KnowsLastCompletedBuildDetails.class).asJson(); } }