/*
* 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.web.support;
import io.spring.initializr.metadata.BillOfMaterials;
import io.spring.initializr.metadata.Dependency;
import io.spring.initializr.metadata.DependencyMetadata;
import io.spring.initializr.metadata.DependencyMetadataProvider;
import io.spring.initializr.metadata.InitializrMetadata;
import io.spring.initializr.test.metadata.InitializrMetadataTestBuilder;
import io.spring.initializr.util.Version;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertSame;
/**
* @author Stephane Nicoll
*/
public class DefaultDependencyMetadataProviderTests {
private final DependencyMetadataProvider provider =
new DefaultDependencyMetadataProvider();
@Test
public void filterDependencies() {
Dependency first = Dependency.withId("first", "org.foo", "first");
first.setVersionRange("1.1.4.RELEASE");
Dependency second = Dependency.withId("second", "org.foo", "second");
Dependency third = Dependency.withId("third", "org.foo", "third");
third.setVersionRange("1.1.8.RELEASE");
InitializrMetadata metadata = InitializrMetadataTestBuilder.withDefaults()
.addDependencyGroup("test", first, second, third).build();
DependencyMetadata dependencyMetadata = provider.get(metadata,
Version.parse("1.1.5.RELEASE"));
assertEquals(2, dependencyMetadata.getDependencies().size());
assertEquals(0, dependencyMetadata.getRepositories().size());
assertEquals(0, dependencyMetadata.getBoms().size());
assertSame(first, dependencyMetadata.getDependencies().get("first"));
assertSame(second, dependencyMetadata.getDependencies().get("second"));
}
@Test
public void resolveDependencies() {
Dependency first = Dependency.withId("first", "org.foo", "first");
first.getMappings().add(Dependency.Mapping.create(
"[1.0.0.RELEASE, 1.1.0.RELEASE)", "org.bar", "second", "0.1.0.RELEASE"));
first.getMappings().add(Dependency.Mapping.create("1.1.0.RELEASE", "org.biz",
"third", "0.2.0.RELEASE"));
Dependency second = Dependency.withId("second", "org.foo", "second");
InitializrMetadata metadata = InitializrMetadataTestBuilder.withDefaults()
.addDependencyGroup("test", first, second).build();
DependencyMetadata dependencyMetadata = provider.get(metadata,
Version.parse("1.0.5.RELEASE"));
assertEquals(2, dependencyMetadata.getDependencies().size());
assertEquals("org.bar",
dependencyMetadata.getDependencies().get("first").getGroupId());
assertEquals("second",
dependencyMetadata.getDependencies().get("first").getArtifactId());
assertEquals("0.1.0.RELEASE",
dependencyMetadata.getDependencies().get("first").getVersion());
DependencyMetadata anotherDependencyMetadata = provider.get(metadata,
Version.parse("1.1.0.RELEASE"));
assertEquals(2, anotherDependencyMetadata.getDependencies().size());
assertEquals("org.biz",
anotherDependencyMetadata.getDependencies().get("first").getGroupId());
assertEquals("third",
anotherDependencyMetadata.getDependencies().get("first").getArtifactId());
assertEquals("0.2.0.RELEASE",
anotherDependencyMetadata.getDependencies().get("first").getVersion());
}
@Test
public void addRepoAndRemoveDuplicates() {
Dependency first = Dependency.withId("first", "org.foo", "first");
first.setRepository("repo-foo");
Dependency second = Dependency.withId("second", "org.foo", "second");
Dependency third = Dependency.withId("third", "org.foo", "third");
third.setRepository("repo-foo");
InitializrMetadata metadata = InitializrMetadataTestBuilder.withDefaults()
.addRepository("repo-foo", "my-repo", "http://localhost", false)
.addDependencyGroup("test", first, second, third).build();
DependencyMetadata dependencyMetadata = provider.get(metadata,
Version.parse("1.1.5.RELEASE"));
assertEquals(3, dependencyMetadata.getDependencies().size());
assertEquals(1, dependencyMetadata.getRepositories().size());
assertEquals(0, dependencyMetadata.getBoms().size());
assertSame(metadata.getConfiguration().getEnv().getRepositories().get("repo-foo"),
dependencyMetadata.getRepositories().get("repo-foo"));
}
@Test
public void addBomAndRemoveDuplicates() {
Dependency first = Dependency.withId("first", "org.foo", "first");
first.setBom("bom-foo");
Dependency second = Dependency.withId("second", "org.foo", "second");
Dependency third = Dependency.withId("third", "org.foo", "third");
third.setBom("bom-foo");
BillOfMaterials bom = BillOfMaterials.create("org.foo", "bom");
bom.getMappings().add(BillOfMaterials.Mapping
.create("[1.0.0.RELEASE, 1.1.8.RELEASE)", "1.0.0.RELEASE"));
bom.getMappings()
.add(BillOfMaterials.Mapping.create("1.1.8.RELEASE", "2.0.0.RELEASE"));
InitializrMetadata metadata = InitializrMetadataTestBuilder.withDefaults()
.addBom("bom-foo", bom).addDependencyGroup("test", first, second, third)
.build();
DependencyMetadata dependencyMetadata = provider.get(metadata,
Version.parse("1.1.5.RELEASE"));
assertEquals(3, dependencyMetadata.getDependencies().size());
assertEquals(0, dependencyMetadata.getRepositories().size());
assertEquals(1, dependencyMetadata.getBoms().size());
assertEquals("org.foo", dependencyMetadata.getBoms().get("bom-foo").getGroupId());
assertEquals("bom", dependencyMetadata.getBoms().get("bom-foo").getArtifactId());
assertEquals("1.0.0.RELEASE",
dependencyMetadata.getBoms().get("bom-foo").getVersion());
}
@Test
public void repoFromBomAccordingToVersion() {
DependencyMetadata dependencyMetadata = testRepoFromBomAccordingToVersion(
"1.0.9.RELEASE");
assertEquals(Version.parse("1.0.9.RELEASE"), dependencyMetadata.getBootVersion());
assertEquals(3, dependencyMetadata.getDependencies().size());
assertEquals(2, dependencyMetadata.getRepositories().size());
assertEquals(1, dependencyMetadata.getBoms().size());
assertEquals("foo",
dependencyMetadata.getRepositories().get("repo-foo").getName());
assertEquals("bar",
dependencyMetadata.getRepositories().get("repo-bar").getName());
assertEquals("org.foo", dependencyMetadata.getBoms().get("bom-foo").getGroupId());
assertEquals("bom", dependencyMetadata.getBoms().get("bom-foo").getArtifactId());
assertEquals("2.0.0.RELEASE",
dependencyMetadata.getBoms().get("bom-foo").getVersion());
}
@Test
public void repoFromBomAccordingToAnotherVersion() {
DependencyMetadata dependencyMetadata = testRepoFromBomAccordingToVersion(
"1.1.5.RELEASE");
assertEquals(Version.parse("1.1.5.RELEASE"), dependencyMetadata.getBootVersion());
assertEquals(3, dependencyMetadata.getDependencies().size());
assertEquals(2, dependencyMetadata.getRepositories().size());
assertEquals(1, dependencyMetadata.getBoms().size());
assertEquals("foo",
dependencyMetadata.getRepositories().get("repo-foo").getName());
assertEquals("biz",
dependencyMetadata.getRepositories().get("repo-biz").getName());
assertEquals("org.foo", dependencyMetadata.getBoms().get("bom-foo").getGroupId());
assertEquals("bom", dependencyMetadata.getBoms().get("bom-foo").getArtifactId());
assertEquals("3.0.0.RELEASE",
dependencyMetadata.getBoms().get("bom-foo").getVersion());
}
private DependencyMetadata testRepoFromBomAccordingToVersion(String bootVersion) {
Dependency first = Dependency.withId("first", "org.foo", "first");
first.setRepository("repo-foo");
Dependency second = Dependency.withId("second", "org.foo", "second");
Dependency third = Dependency.withId("third", "org.foo", "third");
third.setBom("bom-foo");
BillOfMaterials bom = BillOfMaterials.create("org.foo", "bom");
bom.getMappings()
.add(BillOfMaterials.Mapping.create("[1.0.0.RELEASE, 1.1.0.RELEASE)",
"2.0.0.RELEASE", "repo-foo", "repo-bar"));
bom.getMappings().add(BillOfMaterials.Mapping.create("1.1.0.RELEASE",
"3.0.0.RELEASE", "repo-biz"));
InitializrMetadata metadata = InitializrMetadataTestBuilder
.withDefaults().addBom("bom-foo", bom)
.addRepository("repo-foo", "foo", "http://localhost", false)
.addRepository("repo-bar", "bar", "http://localhost", false)
.addRepository("repo-biz", "biz", "http://localhost", false)
.addDependencyGroup("test", first, second, third).build();
return provider.get(metadata, Version.parse(bootVersion));
}
}