package hudson.plugins.promoted_builds.conditions; import hudson.ExtensionList; import hudson.model.FreeStyleBuild; import hudson.model.Descriptor; import hudson.model.FreeStyleProject; import hudson.model.ParameterDefinition; import hudson.model.StringParameterDefinition; import hudson.plugins.promoted_builds.Status; import hudson.plugins.promoted_builds.JobPropertyImpl; import hudson.plugins.promoted_builds.PromotedBuildAction; import hudson.plugins.promoted_builds.Promotion; import hudson.plugins.promoted_builds.PromotionProcess; import hudson.plugins.promoted_builds.conditions.ManualCondition.ManualApproval; import java.io.IOException; import java.util.List; import jenkins.model.Jenkins; import org.jvnet.hudson.test.Bug; import org.jvnet.hudson.test.HudsonTestCase; import com.gargoylesoftware.htmlunit.html.HtmlElement; import com.gargoylesoftware.htmlunit.html.HtmlForm; import com.gargoylesoftware.htmlunit.html.HtmlPage; @Bug(22005) public class ManualConditionBug22005 extends HudsonTestCase { private PromotionProcess createPromotionProcess(JobPropertyImpl parent, String name) throws IOException{ PromotionProcess prom0 = parent.addProcess(name); ManualCondition prom0ManualCondition=new ManualCondition(); prom0ManualCondition.getParameterDefinitions().add(new StringParameterDefinition("param1", prom0.getName()+"_value_1", "Parameter 1")); prom0ManualCondition.getParameterDefinitions().add(new StringParameterDefinition("param2", prom0.getName()+"_value_2", "Parameter 2")); prom0.conditions.add(prom0ManualCondition); return prom0; } public void testPromotionProcess() throws Exception { FreeStyleProject p = createFreeStyleProject(); ExtensionList<Descriptor> list = hudson.getExtensionList(Descriptor.class); list.add(new JobPropertyImpl.DescriptorImpl(JobPropertyImpl.class)); JobPropertyImpl base = new JobPropertyImpl(p); p.addProperty(base); PromotionProcess prom0=createPromotionProcess(base, "PROM0"); ManualCondition prom0Condition=prom0.conditions.get(ManualCondition.class); PromotionProcess prom1=createPromotionProcess(base, "PROM1"); ManualCondition prom1Condition=prom1.conditions.get(ManualCondition.class); PromotionProcess prom2=createPromotionProcess(base, "PROM2"); ManualCondition prom2Condition=prom2.conditions.get(ManualCondition.class); FreeStyleBuild b1 = assertBuildStatusSuccess(p.scheduleBuild2(0)); Promotion p0b1=assertBuildStatusSuccess(prom0Condition.approve(b1, prom0)); assertEquals(2,p0b1.getParameterValues().size()); assertEquals(2,p0b1.getParameterDefinitionsWithValue().size()); Promotion p1b1=assertBuildStatusSuccess(prom1Condition.approve(b1, prom1)); assertEquals(2,p1b1.getParameterValues().size()); assertEquals(2,p1b1.getParameterDefinitionsWithValue().size()); Promotion p2b1=assertBuildStatusSuccess(prom2Condition.approve(b1, prom2)); assertEquals(2,p2b1.getParameterValues().size()); assertEquals(2,p2b1.getParameterDefinitionsWithValue().size()); List<ManualApproval> approvals=b1.getActions(ManualApproval.class); assertEquals(3, approvals.size()); PromotedBuildAction promBuildAction=b1.getAction(PromotedBuildAction.class); List<Status> statuses=promBuildAction.getPromotions(); assertEquals(3, statuses.size()); for (Status status:statuses){ Promotion lastBuild=status.getLast(); List<ParameterDefinition> lastBuildParameters=lastBuild.getParameterDefinitionsWithValue(); assertEquals(2, lastBuildParameters.size()); } } public void testPromotionProcessViaWebClient() throws Exception { FreeStyleProject p = createFreeStyleProject(); ExtensionList<Descriptor> list = hudson.getExtensionList(Descriptor.class); list.add(new JobPropertyImpl.DescriptorImpl(JobPropertyImpl.class)); JobPropertyImpl base = new JobPropertyImpl(p); p.addProperty(base); createPromotionProcess(base, "PROM0"); createPromotionProcess(base, "PROM1"); createPromotionProcess(base, "PROM2"); FreeStyleBuild b1 = assertBuildStatusSuccess(p.scheduleBuild2(0)); assertNull(b1.getAction(ManualApproval.class)); HtmlPage page=createWebClient().getPage(b1, "promotion"); //Approve Promotion List<HtmlForm> forms=ManualConditionTest.getFormsByName(page, "approve"); assertFalse(forms.isEmpty()); assertEquals(3, forms.size()); for (HtmlForm form:forms){ submit(form); } //reload promotions page page=createWebClient().getPage(b1, "promotion"); forms=ManualConditionTest.getFormsByName(page,"build"); for (HtmlForm form:forms){ List<HtmlElement> parameters=ManualConditionTest.getFormParameters(form); assertEquals(2, parameters.size()); } } }