/* * 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 io.spring.initializr.metadata.BillOfMaterials.Mapping; import io.spring.initializr.util.Version; import io.spring.initializr.util.VersionParser; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.CoreMatchers.sameInstance; import static org.junit.Assert.assertThat; /** * @author Stephane Nicoll */ public class BillOfMaterialsTests { @Rule public final ExpectedException thrown = ExpectedException.none(); @Test public void resolveSimpleBom() { BillOfMaterials bom = BillOfMaterials.create("com.example", "bom", "1.0.0"); bom.validate(); BillOfMaterials resolved = bom.resolve(Version.parse("1.2.3.RELEASE")); assertThat(bom, sameInstance(resolved)); } @Test public void resolveSimpleRange() { BillOfMaterials bom = BillOfMaterials.create("com.example", "bom", "1.0.0"); bom.setVersionProperty("bom.version"); bom.getRepositories().add("repo-main"); bom.getAdditionalBoms().add("bom-main"); bom.getMappings() .add(BillOfMaterials.Mapping.create("[1.2.0.RELEASE,1.3.0.M1)", "1.1.0")); bom.validate(); BillOfMaterials resolved = bom.resolve(Version.parse("1.2.3.RELEASE")); assertThat(resolved.getGroupId(), equalTo("com.example")); assertThat(resolved.getArtifactId(), equalTo("bom")); assertThat(resolved.getVersion(), equalTo("1.1.0")); assertThat(resolved.getVersionProperty().toStandardFormat(), equalTo("bom.version")); assertThat(resolved.getRepositories().size(), equalTo(1)); assertThat(resolved.getRepositories().get(0), equalTo("repo-main")); assertThat(resolved.getAdditionalBoms().size(), equalTo(1)); assertThat(resolved.getAdditionalBoms().get(0), equalTo("bom-main")); } @Test public void resolveRangeOverride() { BillOfMaterials bom = BillOfMaterials.create("com.example", "bom", "1.0.0"); bom.getRepositories().add("repo-main"); bom.getAdditionalBoms().add("bom-main"); Mapping mapping = BillOfMaterials.Mapping.create("[1.2.0.RELEASE,1.3.0.M1)", "1.1.0", "repo-foo"); mapping.getAdditionalBoms().add("bom-foo"); bom.getMappings().add(mapping); bom.validate(); BillOfMaterials resolved = bom.resolve(Version.parse("1.2.3.RELEASE")); assertThat(resolved.getGroupId(), equalTo("com.example")); assertThat(resolved.getArtifactId(), equalTo("bom")); assertThat(resolved.getVersion(), equalTo("1.1.0")); assertThat(resolved.getVersionProperty(), nullValue()); assertThat(resolved.getRepositories().size(), equalTo(1)); assertThat(resolved.getRepositories().get(0), equalTo("repo-foo")); assertThat(resolved.getAdditionalBoms().size(), equalTo(1)); assertThat(resolved.getAdditionalBoms().get(0), equalTo("bom-foo")); } @Test public void resolveRangeOverrideAndMapping() { BillOfMaterials bom = BillOfMaterials.create("com.example", "bom", "1.0.0"); bom.setVersionProperty("example.version"); bom.getMappings() .add(BillOfMaterials.Mapping.create("[1.2.0.RELEASE,1.3.0.M1)", "1.1.0")); bom.validate(); BillOfMaterials resolved = bom.resolve(Version.parse("1.2.3.RELEASE")); assertThat(resolved.getGroupId(), equalTo("com.example")); assertThat(resolved.getArtifactId(), equalTo("bom")); assertThat(resolved.getVersion(), equalTo("1.1.0")); assertThat(resolved.getVersionProperty().toStandardFormat(), equalTo("example.version")); } @Test public void noRangeAvailable() { BillOfMaterials bom = BillOfMaterials.create("com.example", "bom"); bom.getMappings() .add(BillOfMaterials.Mapping.create("[1.2.0.RELEASE,1.3.0.M1)", "1.1.0")); bom.getMappings() .add(BillOfMaterials.Mapping.create("[1.3.0.M1, 1.4.0.M1)", "1.2.0")); bom.validate(); thrown.expect(IllegalStateException.class); thrown.expectMessage("1.4.1.RELEASE"); bom.resolve(Version.parse("1.4.1.RELEASE")); } @Test public void resolveRangeWithVariablePatch() { BillOfMaterials bom = BillOfMaterials.create("com.example", "bom", "1.0.0"); bom.getMappings().add( BillOfMaterials.Mapping.create("[1.3.0.RELEASE,1.3.x.RELEASE]", "1.1.0")); bom.getMappings().add(BillOfMaterials.Mapping .create("[1.3.x.BUILD-SNAPSHOT,1.4.0.RELEASE)", "1.1.1-SNAPSHOT")); bom.validate(); bom.updateVersionRange(new VersionParser(Arrays.asList( Version.parse("1.3.8.RELEASE"), Version.parse("1.3.9.BUILD-SNAPSHOT")))); assertThat(bom.resolve(Version.parse("1.3.8.RELEASE")).getVersion(), equalTo("1.1.0")); assertThat(bom.resolve(Version.parse("1.3.9.RELEASE")).getVersion(), equalTo("1.1.1-SNAPSHOT")); bom.updateVersionRange(new VersionParser(Arrays.asList( Version.parse("1.3.9.RELEASE"), Version.parse("1.3.10.BUILD-SNAPSHOT")))); assertThat(bom.resolve(Version.parse("1.3.8.RELEASE")).getVersion(), equalTo("1.1.0")); assertThat(bom.resolve(Version.parse("1.3.9.RELEASE")).getVersion(), equalTo("1.1.0")); } }