diff --git a/src/main/java/hudson/plugins/promoted_builds/integrations/jobdsl/JobDslPromotionProcessConverter.java b/src/main/java/hudson/plugins/promoted_builds/integrations/jobdsl/JobDslPromotionProcessConverter.java index c87d92ce..fa044f95 100755 --- a/src/main/java/hudson/plugins/promoted_builds/integrations/jobdsl/JobDslPromotionProcessConverter.java +++ b/src/main/java/hudson/plugins/promoted_builds/integrations/jobdsl/JobDslPromotionProcessConverter.java @@ -87,24 +87,20 @@ public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingC private void writeNodes(HierarchicalStreamWriter writer, List nodes) { for (Node node : nodes) { - writer.startNode(node.name().toString()); - if (node.value() instanceof Collection) { - for (Object subNode : (Collection) node.value()) { - convertNode((Node) subNode, writer); - } - } else { - writer.setValue(node.value().toString()); - } - writer.endNode(); + writeNode(node, writer); } } - private void convertNode(Node node, HierarchicalStreamWriter writer) { + private void writeNode(Node node, HierarchicalStreamWriter writer) { writer.startNode(node.name().toString()); writeNodeAttributes(node, writer); if (node.value() instanceof Collection) { for (Object subNode : (Collection) node.value()) { - convertNode((Node) subNode, writer); + if (subNode instanceof Node) { + writeNode((Node) subNode, writer); + } else { + writer.setValue(subNode.toString()); + } } } else { writer.setValue(node.value().toString()); diff --git a/src/test/java/hudson/plugins/promoted_builds/integrations/jobdsl/PromotionsDslContextExtensionTest.java b/src/test/java/hudson/plugins/promoted_builds/integrations/jobdsl/PromotionsDslContextExtensionTest.java index 64b75833..e0b01d43 100644 --- a/src/test/java/hudson/plugins/promoted_builds/integrations/jobdsl/PromotionsDslContextExtensionTest.java +++ b/src/test/java/hudson/plugins/promoted_builds/integrations/jobdsl/PromotionsDslContextExtensionTest.java @@ -99,4 +99,20 @@ public void testShouldGenerateTheJobWithBuildWrappers() throws Exception { .matcher(content).find()); } + @Test + public void testShouldGenerateTheDynamicDslJob() throws Exception { + // Given + String dsl = FileUtils.readFileToString(new File("src/test/resources/dynamic-dsl-example-dsl.groovy")); + FreeStyleProject seedJob = j.createFreeStyleProject(); + seedJob.getBuildersList().add(createScript(dsl)); + // When + QueueTaskFuture scheduleBuild2 = seedJob.scheduleBuild2(0); + j.assertBuildStatusSuccess(scheduleBuild2.get()); + + TopLevelItem item = j.jenkins.getItem("dynamic-dsl-test"); + File config = new File(item.getRootDir(), "promotions/Development/config.xml"); + String content = Files.readString(config.toPath()); + assert content.contains("