/* * 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.metadata; import java.util.Arrays; import java.util.List; import io.spring.initializr.metadata.BillOfMaterials.Mapping; import io.spring.initializr.test.metadata.InitializrMetadataTestBuilder; import io.spring.initializr.util.Version; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import static org.assertj.core.api.Assertions.assertThat; /** * @author Stephane Nicoll */ public class InitializrMetadataTests { @Rule public final ExpectedException thrown = ExpectedException.none(); @Test public void invalidBom() { Dependency foo = Dependency.withId("foo", "org.acme", "foo"); foo.setBom("foo-bom"); InitializrMetadataTestBuilder builder = InitializrMetadataTestBuilder .withDefaults().addBom("my-bom", "org.acme", "foo", "1.2.3") .addDependencyGroup("test", foo); thrown.expect(InvalidInitializrMetadataException.class); thrown.expectMessage("foo-bom"); thrown.expectMessage("my-bom"); builder.build(); } @Test public void invalidRepository() { Dependency foo = Dependency.withId("foo", "org.acme", "foo"); foo.setRepository("foo-repo"); InitializrMetadataTestBuilder builder = InitializrMetadataTestBuilder .withDefaults() .addRepository("my-repo", "repo", "http://example.com/repo", true) .addDependencyGroup("test", foo); thrown.expect(InvalidInitializrMetadataException.class); thrown.expectMessage("foo-repo"); thrown.expectMessage("my-repo"); builder.build(); } @Test public void invalidBomNoVersion() { BillOfMaterials bom = BillOfMaterials.create("org.acme", "foo-bom"); InitializrMetadataTestBuilder builder = InitializrMetadataTestBuilder .withDefaults().addBom("foo-bom", bom); thrown.expect(InvalidInitializrMetadataException.class); thrown.expectMessage("No version"); thrown.expectMessage("foo-bom"); builder.build(); } @Test public void invalidBomUnknownRepository() { BillOfMaterials bom = BillOfMaterials.create("org.acme", "foo-bom", "1.0.0.RELEASE"); bom.getRepositories().add("foo-repo"); InitializrMetadataTestBuilder builder = InitializrMetadataTestBuilder .withDefaults().addBom("foo-bom", bom); thrown.expect(InvalidInitializrMetadataException.class); thrown.expectMessage("invalid repository id foo-repo"); thrown.expectMessage("foo-bom"); builder.build(); } @Test public void invalidBomUnknownAdditionalBom() { BillOfMaterials bom = BillOfMaterials.create("org.acme", "foo-bom", "1.0.0.RELEASE"); bom.getAdditionalBoms().addAll(Arrays.asList("bar-bom", "biz-bom")); BillOfMaterials barBom = BillOfMaterials.create("org.acme", "bar-bom", "1.0.0.RELEASE"); InitializrMetadataTestBuilder builder = InitializrMetadataTestBuilder .withDefaults().addBom("foo-bom", bom).addBom("bar-bom", barBom); thrown.expect(InvalidInitializrMetadataException.class); thrown.expectMessage("invalid additional bom"); thrown.expectMessage("biz-bom"); builder.build(); } @Test public void invalidBomVersionRangeMapping() { BillOfMaterials bom = BillOfMaterials.create("org.acme", "foo-bom"); bom.getMappings().add(Mapping.create("[1.2.0.RELEASE,1.3.0.M1)", "1.0.0")); bom.getMappings().add(Mapping.create("FOO_BAR", "1.2.0")); InitializrMetadataTestBuilder builder = InitializrMetadataTestBuilder .withDefaults().addBom("foo-bom", bom); thrown.expect(InvalidInitializrMetadataException.class); thrown.expectMessage("FOO_BAR"); thrown.expectMessage("foo-bom"); builder.build(); } @Test public void invalidBomVersionRangeMappingUnknownRepo() { BillOfMaterials bom = BillOfMaterials.create("org.acme", "foo-bom"); bom.getMappings().add(Mapping.create("[1.0.0.RELEASE,1.3.0.M1)", "1.0.0")); Mapping mapping = Mapping.create("1.3.0.M2", "1.2.0"); mapping.getRepositories().add("foo-repo"); bom.getMappings().add(mapping); InitializrMetadataTestBuilder builder = InitializrMetadataTestBuilder .withDefaults().addBom("foo-bom", bom); thrown.expect(InvalidInitializrMetadataException.class); thrown.expectMessage("invalid repository id foo-repo"); thrown.expectMessage("1.3.0.M2"); thrown.expectMessage("foo-bom"); builder.build(); } @Test public void invalidBomVersionRangeMappingUnknownAdditionalBom() { BillOfMaterials bom = BillOfMaterials.create("org.acme", "foo-bom"); bom.getMappings().add(Mapping.create("[1.0.0.RELEASE,1.3.0.M1)", "1.0.0")); Mapping mapping = Mapping.create("1.3.0.M2", "1.2.0"); mapping.getAdditionalBoms().add("bar-bom"); bom.getMappings().add(mapping); InitializrMetadataTestBuilder builder = InitializrMetadataTestBuilder .withDefaults().addBom("foo-bom", bom); thrown.expect(InvalidInitializrMetadataException.class); thrown.expectMessage("invalid additional bom"); thrown.expectMessage("1.3.0.M2"); thrown.expectMessage("bar-bom"); builder.build(); } @Test public void updateSpringBootVersions() { BillOfMaterials bom = BillOfMaterials.create("org.acme", "foo-bom"); bom.getMappings().add(Mapping.create("[1.2.0.RELEASE,1.3.x.RELEASE]", "1.0.0")); bom.getMappings().add(Mapping.create("1.3.x.BUILD-SNAPSHOT", "1.1.0-BUILD-SNAPSHOT")); Dependency dependency = Dependency.withId("bar"); dependency.getMappings().add(Dependency.Mapping.create( "[1.3.0.RELEASE, 1.3.x.RELEASE]", null, null, "0.1.0.RELEASE")); dependency.getMappings().add(Dependency.Mapping.create( "1.3.x.BUILD-SNAPSHOT", null, null, "0.2.0.RELEASE")); InitializrMetadata metadata = InitializrMetadataTestBuilder .withDefaults().addDependencyGroup("test", dependency) .addBom("foo-bom", bom).build(); List<DefaultMetadataElement> bootVersions = Arrays.asList( DefaultMetadataElement.create("1.3.6.RELEASE", "1.3.6", false), DefaultMetadataElement.create("1.3.7.BUILD-SNAPSHOT", "1.3.7", false)); metadata.updateSpringBootVersions(bootVersions); assertThat(metadata.getConfiguration().getEnv().getBoms().get("foo-bom") .resolve(Version.parse("1.3.6.RELEASE")).getVersion()).isEqualTo("1.0.0"); assertThat(metadata.getConfiguration().getEnv().getBoms().get("foo-bom") .resolve(Version.parse("1.3.7.BUILD-SNAPSHOT")).getVersion()).isEqualTo("1.1.0-BUILD-SNAPSHOT"); assertThat(metadata.getDependencies().get("bar") .resolve(Version.parse("1.3.6.RELEASE")).getVersion()).isEqualTo("0.1.0.RELEASE"); assertThat(metadata.getDependencies().get("bar") .resolve(Version.parse("1.3.7.BUILD-SNAPSHOT")).getVersion()).isEqualTo("0.2.0.RELEASE"); } @Test public void invalidParentMissingVersion() { InitializrMetadataTestBuilder builder = InitializrMetadataTestBuilder .withDefaults().setMavenParent("org.foo", "foo-parent", null, false); thrown.expect(InvalidInitializrMetadataException.class); thrown.expectMessage("Custom maven pom requires groupId, artifactId and version"); builder.build(); } @Test public void stripInvalidCharsFromPackage() { InitializrMetadata metadata = InitializrMetadataTestBuilder.withDefaults().build(); metadata.getGroupId().setContent("org.acme"); metadata.getArtifactId().setContent("2foo.bar"); assertThat(metadata.getPackageName().getContent()).isEqualTo("org.acme.foo.bar"); metadata = InitializrMetadataTestBuilder.withDefaults().build(); metadata.getGroupId().setContent("org.ac-me"); metadata.getArtifactId().setContent("foo-bar"); assertThat(metadata.getPackageName().getContent()).isEqualTo("org.acme.foobar"); } }