diff --git a/initializr-generator/src/main/java/io/spring/initializr/generator/ProjectGenerator.java b/initializr-generator/src/main/java/io/spring/initializr/generator/ProjectGenerator.java index 30c3fb03..bdde4198 100644 --- a/initializr-generator/src/main/java/io/spring/initializr/generator/ProjectGenerator.java +++ b/initializr-generator/src/main/java/io/spring/initializr/generator/ProjectGenerator.java @@ -186,7 +186,8 @@ public class ProjectGenerator { */ public File generateProjectStructure(ProjectRequest request) { try { - File rootDir = doGenerateProjectStructure(request); + Map model = resolveModel(request); + File rootDir = generateProjectStructure(request, model); publishProjectGeneratedEvent(request); return rootDir; } @@ -196,9 +197,12 @@ public class ProjectGenerator { } } - protected File doGenerateProjectStructure(ProjectRequest request) { - Map model = resolveModel(request); - + /** + * Generate a project structure for the specified {@link ProjectRequest} and resolved + * model. + */ + protected File generateProjectStructure(ProjectRequest request, + Map model) { File rootDir; try { rootDir = File.createTempFile("tmp", "", getTemporaryDirectory()); @@ -566,11 +570,11 @@ public class ProjectGenerator { && !request.getJavaVersion().equals("1.7"); } - protected static boolean isGradleBuild(ProjectRequest request) { + private static boolean isGradleBuild(ProjectRequest request) { return "gradle".equals(request.getBuild()); } - protected static boolean isMavenBuild(ProjectRequest request) { + private static boolean isMavenBuild(ProjectRequest request) { return "maven".equals(request.getBuild()); } diff --git a/initializr-generator/src/test/java/io/spring/initializr/generator/AbstractProjectGeneratorTests.java b/initializr-generator/src/test/java/io/spring/initializr/generator/AbstractProjectGeneratorTests.java index 83a25611..a7409d22 100644 --- a/initializr-generator/src/test/java/io/spring/initializr/generator/AbstractProjectGeneratorTests.java +++ b/initializr-generator/src/test/java/io/spring/initializr/generator/AbstractProjectGeneratorTests.java @@ -53,11 +53,11 @@ public abstract class AbstractProjectGeneratorTests { protected final ApplicationEventPublisher eventPublisher = mock( ApplicationEventPublisher.class); - public AbstractProjectGeneratorTests() { + protected AbstractProjectGeneratorTests() { this(new ProjectGenerator()); } - public AbstractProjectGeneratorTests(ProjectGenerator projectGenerator) { + protected AbstractProjectGeneratorTests(ProjectGenerator projectGenerator) { this.projectGenerator = projectGenerator; } diff --git a/initializr-generator/src/test/java/io/spring/initializr/generator/CustomProjectGeneratorTests.java b/initializr-generator/src/test/java/io/spring/initializr/generator/CustomProjectGeneratorTests.java index 346cc0de..0ffa9164 100644 --- a/initializr-generator/src/test/java/io/spring/initializr/generator/CustomProjectGeneratorTests.java +++ b/initializr-generator/src/test/java/io/spring/initializr/generator/CustomProjectGeneratorTests.java @@ -1,63 +1,97 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package io.spring.initializr.generator; +import java.io.File; +import java.util.Map; + import io.spring.initializr.test.generator.ProjectAssert; import org.junit.Test; import org.mockito.InOrder; import org.mockito.Mockito; + import org.springframework.core.io.ClassPathResource; -import java.io.File; - import static org.mockito.Matchers.argThat; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; +/** + * Test for custom {@link ProjectGenerator}. + * + * @author Torsten Walter + * @author Stephane Nicoll + */ public class CustomProjectGeneratorTests extends AbstractProjectGeneratorTests { - public CustomProjectGeneratorTests() { - super(new MyProjectGenerator()); - } + public CustomProjectGeneratorTests() { + super(new MyProjectGenerator()); + } - @Test - public void jenkinsfileMaven() { - ProjectRequest request = createProjectRequest(); - request.setType("maven-project"); - ProjectAssert project = generateProject(request); - project.sourceCodeAssert("Jenkinsfile") - .equalsTo(new ClassPathResource("project/maven/Jenkinsfile")); - } + @Test + public void generateCustomResource() { + ProjectRequest request = createProjectRequest(); + request.setType("maven-project"); + request.setGroupId("com.example.custom"); + ProjectAssert project = generateProject(request); + project.sourceCodeAssert("custom.txt") + .equalsTo(new ClassPathResource("project/custom/custom.txt")); + } - @Test - public void jenkinsfileGradle() { - ProjectRequest request = createProjectRequest(); - request.setType("gradle-build"); - ProjectAssert project = generateProject(request); - project.hasNoFile("Jenkinsfile"); - } + @Test + public void generateCustomResourceDisabled() { + ProjectRequest request = createProjectRequest(); + request.setType("gradle-build"); + request.setGroupId("com.example.custom"); + ProjectAssert project = generateProject(request); + project.hasNoFile("custom.txt"); + } - @Test - public void projectGenerationEventAfterGeneratingAllFiles() throws Exception { - ProjectRequest request = createProjectRequest("web"); - generateProject(request); - verifyProjectSuccessfulEventFor(request); + @Test + public void projectGenerationEventFiredAfterCustomization() { + ProjectRequest request = createProjectRequest(); + request.setType("maven-project"); + request.setGroupId("com.example.custom"); + generateProject(request); + verifyProjectSuccessfulEventFor(request); - Runnable jenkinsfileGenerated = ((MyProjectGenerator) projectGenerator).jenkinsfileGenerated; - InOrder inOrder = Mockito.inOrder(eventPublisher, jenkinsfileGenerated); + Runnable customFileGenerated = ((MyProjectGenerator) projectGenerator).customFileGenerated; + InOrder inOrder = Mockito.inOrder(eventPublisher, customFileGenerated); - inOrder.verify(jenkinsfileGenerated, times(1)).run(); - inOrder.verify(eventPublisher, times(1)).publishEvent(argThat(new ProjectGeneratedEventMatcher(request))); - } + inOrder.verify(customFileGenerated, times(1)).run(); + inOrder.verify(eventPublisher, times(1)).publishEvent( + argThat(new ProjectGeneratedEventMatcher(request))); + } - private static class MyProjectGenerator extends ProjectGenerator { - protected final Runnable jenkinsfileGenerated = Mockito.mock(Runnable.class); - @Override - protected File doGenerateProjectStructure(ProjectRequest request) { - File dir = super.doGenerateProjectStructure(request); - if (isMavenBuild(request)) { - write(new File(dir, "Jenkinsfile"), "Jenkinsfile.tmpl", resolveModel(request)); - jenkinsfileGenerated.run(); - } - return dir; - } - } + private static class MyProjectGenerator extends ProjectGenerator { + private Runnable customFileGenerated = mock(Runnable.class); + + @Override + protected File generateProjectStructure(ProjectRequest request, + Map model) { + model.put("customValue", 42); + File dir = super.generateProjectStructure(request, model); + if ("maven".equals(request.getBuild())) { + write(new File(dir, "custom.txt"), "custom.txt", model); + customFileGenerated.run(); + } + return dir; + } + } + } diff --git a/initializr-generator/src/test/resources/project/custom/custom.txt b/initializr-generator/src/test/resources/project/custom/custom.txt new file mode 100644 index 00000000..fdccaf98 --- /dev/null +++ b/initializr-generator/src/test/resources/project/custom/custom.txt @@ -0,0 +1,4 @@ +Custom resources + +com.example.custom +42 \ No newline at end of file diff --git a/initializr-generator/src/test/resources/project/maven/Jenkinsfile b/initializr-generator/src/test/resources/project/maven/Jenkinsfile deleted file mode 100644 index 847f0154..00000000 --- a/initializr-generator/src/test/resources/project/maven/Jenkinsfile +++ /dev/null @@ -1,16 +0,0 @@ -pipeline { - agent any - stages { - stage ('Build') { - steps { - echo "building com.example:demo:0.0.1-SNAPSHOT" - sh 'mvn -Dmaven.test.failure.ignore=true -B clean install' - } - post { - success { - junit 'target/surefire-reports/**/*.xml' - } - } - } - } -} \ No newline at end of file diff --git a/initializr-generator/src/test/resources/templates/Jenkinsfile.tmpl b/initializr-generator/src/test/resources/templates/Jenkinsfile.tmpl deleted file mode 100644 index 55c68a19..00000000 --- a/initializr-generator/src/test/resources/templates/Jenkinsfile.tmpl +++ /dev/null @@ -1,16 +0,0 @@ -pipeline { - agent any - stages { - stage ('Build') { - steps { - echo "building {{groupId}}:{{artifactId}}:{{version}}" - sh 'mvn -Dmaven.test.failure.ignore=true -B clean install' - } - post { - success { - junit 'target/surefire-reports/**/*.xml' - } - } - } - } -} \ No newline at end of file diff --git a/initializr-generator/src/test/resources/templates/custom.txt b/initializr-generator/src/test/resources/templates/custom.txt new file mode 100644 index 00000000..40eca41b --- /dev/null +++ b/initializr-generator/src/test/resources/templates/custom.txt @@ -0,0 +1,4 @@ +Custom resources + +{{groupId}} +{{customValue}} \ No newline at end of file