diff --git a/start-site/src/main/java/io/spring/start/site/extension/description/DescriptionProjectGenerationConfiguration.java b/start-site/src/main/java/io/spring/start/site/extension/description/DescriptionProjectGenerationConfiguration.java index a62496ce06..2541cd5988 100644 --- a/start-site/src/main/java/io/spring/start/site/extension/description/DescriptionProjectGenerationConfiguration.java +++ b/start-site/src/main/java/io/spring/start/site/extension/description/DescriptionProjectGenerationConfiguration.java @@ -37,4 +37,10 @@ public InvalidJvmVersionHelpDocumentCustomizer invalidJvmVersionHelpDocumentCust return new InvalidJvmVersionHelpDocumentCustomizer(diff, description); } + @Bean + public InvalidPackageNameHelpDocumentCustomizer invalidPackageNameHelpDocumentCustomizer( + ProjectDescriptionDiff diff, ProjectDescription description) { + return new InvalidPackageNameHelpDocumentCustomizer(diff, description); + } + } diff --git a/start-site/src/main/java/io/spring/start/site/extension/description/InvalidPackageNameHelpDocumentCustomizer.java b/start-site/src/main/java/io/spring/start/site/extension/description/InvalidPackageNameHelpDocumentCustomizer.java new file mode 100644 index 0000000000..6be214b3f7 --- /dev/null +++ b/start-site/src/main/java/io/spring/start/site/extension/description/InvalidPackageNameHelpDocumentCustomizer.java @@ -0,0 +1,50 @@ +/* + * Copyright 2012-2020 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 + * + * https://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.start.site.extension.description; + +import io.spring.initializr.generator.project.ProjectDescription; +import io.spring.initializr.generator.project.ProjectDescriptionDiff; +import io.spring.initializr.generator.spring.documentation.HelpDocument; +import io.spring.initializr.generator.spring.documentation.HelpDocumentCustomizer; + +/** + * A {@link HelpDocumentCustomizer} that adds a warning when the package name was changed. + * + * @author Stephane Nicoll + */ +public class InvalidPackageNameHelpDocumentCustomizer implements HelpDocumentCustomizer { + + private final ProjectDescriptionDiff diff; + + private final ProjectDescription description; + + public InvalidPackageNameHelpDocumentCustomizer(ProjectDescriptionDiff diff, ProjectDescription description) { + this.diff = diff; + this.description = description; + } + + @Override + public void customize(HelpDocument document) { + this.diff.ifPackageNameChanged(this.description, + (original, current) -> document.getWarnings() + .addItem(String.format( + "The original package name '%s' is invalid and this project uses '%s' instead.", + original, current))); + + } + +} diff --git a/start-site/src/test/java/io/spring/start/site/extension/description/InvalidPackageNameHelpDocumentCustomizerTests.java b/start-site/src/test/java/io/spring/start/site/extension/description/InvalidPackageNameHelpDocumentCustomizerTests.java new file mode 100644 index 0000000000..036b63233d --- /dev/null +++ b/start-site/src/test/java/io/spring/start/site/extension/description/InvalidPackageNameHelpDocumentCustomizerTests.java @@ -0,0 +1,50 @@ +/* + * Copyright 2012-2020 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 + * + * https://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.start.site.extension.description; + +import io.spring.initializr.generator.test.io.TextAssert; +import io.spring.initializr.generator.test.project.ProjectStructure; +import io.spring.initializr.web.project.ProjectRequest; +import io.spring.start.site.extension.AbstractExtensionTests; +import org.junit.jupiter.api.Test; + +/** + * Tests for {@link InvalidPackageNameHelpDocumentCustomizer}. + * + * @author Stephane Nicoll + */ +class InvalidPackageNameHelpDocumentCustomizerTests extends AbstractExtensionTests { + + @Test + void warningAddedWithInvalidPackageName() { + assertHelpDocument("com.my-invalid-package").lines().containsSubsequence("# Read Me First", + "* The original package name 'com.my-invalid-package' is invalid and this project uses 'com.myinvalidpackage' instead."); + } + + @Test + void warningNotAddedWithValidPackageName() { + assertHelpDocument("com.example.valid").doesNotContain("# Read Me First"); + } + + private TextAssert assertHelpDocument(String packageName) { + ProjectRequest request = createProjectRequest("web"); + request.setPackageName(packageName); + ProjectStructure project = generateProject(request); + return new TextAssert(project.getProjectDirectory().resolve("HELP.md")); + } + +}