package org.jenkinsci.plugins.ghprb.manager.impl.downstreambuilds; import static org.fest.assertions.Assertions.assertThat; import static org.mockito.BDDMockito.given; import com.cloudbees.plugins.flow.BuildFlow; import com.cloudbees.plugins.flow.FlowRun; import com.cloudbees.plugins.flow.JobInvocation; import java.util.Iterator; import org.jenkinsci.plugins.ghprb.GhprbITBaseTestCase; import org.jenkinsci.plugins.ghprb.GhprbTestUtil; import org.jenkinsci.plugins.ghprb.manager.GhprbBuildManager; import org.jenkinsci.plugins.ghprb.manager.factory.GhprbBuildManagerFactoryUtil; import org.jenkinsci.plugins.ghprb.rules.JenkinsRuleWithBuildFlow; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.runners.MockitoJUnitRunner; /** * @author mdelapenya (Manuel de la Peña) */ @RunWith(MockitoJUnitRunner.class) public class BuildFlowBuildManagerTest extends GhprbITBaseTestCase { @Rule public JenkinsRuleWithBuildFlow jenkinsRule = new JenkinsRuleWithBuildFlow(); private BuildFlow buildFlowProject; @Before public void setUp() throws Exception { buildFlowProject = jenkinsRule.createBuildFlowProject(); jenkinsRule.createFreeStyleProject("downstreamProject1"); jenkinsRule.createFreeStyleProject("downstreamProject2"); jenkinsRule.createFreeStyleProject("downstreamProject3"); StringBuilder dsl = new StringBuilder(); dsl.append("parallel ("); dsl.append(" { build(\"downstreamProject1\") },"); dsl.append(" { build(\"downstreamProject2\") }"); dsl.append(")"); dsl.append("{ build(\"downstreamProject3\") }"); buildFlowProject.setDsl(dsl.toString()); given(ghPullRequest.getNumber()).willReturn(1); given(ghRepository.getPullRequest(1)).willReturn(ghPullRequest); super.beforeTest(null, null, buildFlowProject); } @Test public void shouldCalculateUrlWithDownstreamBuilds() throws Exception { // GIVEN GhprbTestUtil.triggerRunAndWait(10, trigger, buildFlowProject); // THEN assertThat(buildFlowProject.getBuilds().toArray().length).isEqualTo(1); FlowRun flowRun = buildFlowProject.getBuilds().getFirstBuild(); GhprbBuildManager buildManager = GhprbBuildManagerFactoryUtil.getBuildManager(flowRun); assertThat(buildManager).isInstanceOf(BuildFlowBuildManager.class); Iterator<?> iterator = buildManager.downstreamProjects(); StringBuilder expectedUrl = new StringBuilder(); int count = 0; while (iterator.hasNext()) { Object downstreamBuild = iterator.next(); assertThat(downstreamBuild).isInstanceOf(JobInvocation.class); JobInvocation jobInvocation = (JobInvocation) downstreamBuild; String jobInvocationBuildUrl = jobInvocation.getBuildUrl(); expectedUrl.append("\n<a href='"); expectedUrl.append(jobInvocationBuildUrl); expectedUrl.append("'>"); expectedUrl.append(jobInvocationBuildUrl); expectedUrl.append("</a>"); count++; } assertThat(count).isEqualTo(4); assertThat(buildManager.calculateBuildUrl(null)).isEqualTo(expectedUrl.toString()); } }