@Test void mapDependency() throws Exception { Dependency d = Dependency.withId("foo", "org.foo", "foo"); d.setRepository("my-repo"); d.setBom("my-bom"); Repository repository = new Repository(); repository.setName("foo-repo"); repository.setUrl(new URL("http://example.com/foo")); BillOfMaterials bom = BillOfMaterials.create("org.foo", "foo-bom", "1.0.0.RELEASE"); DependencyMetadata metadata = new DependencyMetadata( Version.parse("1.2.0.RELEASE"), Collections.singletonMap(d.getId(), d), Collections.singletonMap("repo-id", repository), Collections.singletonMap("bom-id", bom)); JSONObject content = new JSONObject(this.mapper.write(metadata)); assertThat(content.getJSONObject("dependencies").getJSONObject("foo") .getString("bom")).isEqualTo("my-bom"); assertThat(content.getJSONObject("dependencies").getJSONObject("foo") .getString("repository")).isEqualTo("my-repo"); assertThat(content.getJSONObject("repositories").getJSONObject("repo-id") .getString("name")).isEqualTo("foo-repo"); assertThat(content.getJSONObject("boms").getJSONObject("bom-id") .getString("artifactId")).isEqualTo("foo-bom"); assertThat(content.getJSONObject("boms").getJSONObject("bom-id") .getString("version")).isEqualTo("1.0.0.RELEASE"); }
private void index() { this.indexedDependencies.clear(); this.content.forEach((group) -> group.content.forEach((dependency) -> { // Apply defaults if (dependency.getVersionRange() == null && group.getVersionRange() != null) { dependency.setVersionRange(group.getVersionRange()); } if (dependency.getBom() == null && group.getBom() != null) { dependency.setBom(group.getBom()); } if (dependency.getRepository() == null && group.getRepository() != null) { dependency.setRepository(group.getRepository()); } dependency.resolve(); indexDependency(dependency.getId(), dependency); for (String alias : dependency.getAliases()) { indexDependency(alias, dependency); } })); }
@Test void addDefaultBom() { Dependency first = Dependency.withId("first"); Dependency second = Dependency.withId("second"); second.setBom("da-bom"); DependencyGroup group = createDependencyGroup("test", first, second); group.setBom("test-bom"); DependenciesCapability capability = new DependenciesCapability(); capability.getContent().add(group); capability.validate(); assertThat(capability.get("first").getBom()).isEqualTo("test-bom"); assertThat(capability.get("second").getBom()).isEqualTo("da-bom"); }
@Test void resolveAdditionalBomsDuplicates() { Dependency dependency = Dependency.withId("foo"); dependency.setBom("foo-bom"); Dependency anotherDependency = Dependency.withId("bar"); anotherDependency.setBom("bar-bom"); BillOfMaterials bom = BillOfMaterials.create("com.example", "foo-bom", "1.0.0"); bom.getAdditionalBoms().add("bar-bom"); BillOfMaterials additionalBom = BillOfMaterials.create("com.example", "bar-bom", "1.1.0"); this.metadata = InitializrMetadataTestBuilder.withDefaults() .addBom("foo-bom", bom).addBom("bar-bom", additionalBom) .addDependencyGroup("test", dependency, anotherDependency).build(); ProjectRequest request = initProjectRequest(); request.getStyle().addAll(Arrays.asList("foo", "bar")); request.resolve(this.metadata); assertThat(request.getResolvedDependencies()).hasSize(2); assertThat(request.getBoms()).hasSize(2); assertThat(request.getBoms().get("foo-bom")).isEqualTo(bom); assertThat(request.getBoms().get("bar-bom")).isEqualTo(additionalBom); }
@Test void resolveAdditionalBoms() { Dependency dependency = Dependency.withId("foo"); dependency.setBom("foo-bom"); BillOfMaterials bom = BillOfMaterials.create("com.example", "foo-bom", "1.0.0"); bom.getAdditionalBoms().add("bar-bom"); BillOfMaterials additionalBom = BillOfMaterials.create("com.example", "bar-bom", "1.1.0"); this.metadata = InitializrMetadataTestBuilder.withDefaults() .addBom("foo-bom", bom).addBom("bar-bom", additionalBom) .addDependencyGroup("test", dependency).build(); ProjectRequest request = initProjectRequest(); request.getStyle().add("foo"); request.resolve(this.metadata); assertThat(request.getResolvedDependencies()).hasSize(1); assertThat(request.getBoms()).hasSize(2); assertThat(request.getBoms().get("foo-bom")).isEqualTo(bom); assertThat(request.getBoms().get("bar-bom")).isEqualTo(additionalBom); }
@Test void resolveAdditionalRepositories() { Dependency dependency = Dependency.withId("foo"); dependency.setBom("foo-bom"); dependency.setRepository("foo-repo"); BillOfMaterials bom = BillOfMaterials.create("com.example", "foo-bom", "1.0.0"); bom.getRepositories().add("bar-repo"); this.metadata = InitializrMetadataTestBuilder.withDefaults() .addBom("foo-bom", bom) .addRepository("foo-repo", "foo-repo", "http://example.com/foo", false) .addRepository("bar-repo", "bar-repo", "http://example.com/bar", false) .addDependencyGroup("test", dependency).build(); ProjectRequest request = initProjectRequest(); request.getStyle().add("foo"); request.resolve(this.metadata); assertThat(request.getResolvedDependencies()).hasSize(1); assertThat(request.getBoms()).hasSize(1); assertThat(request.getRepositories()).hasSize(2); assertThat(request.getRepositories().get("foo-repo")).isEqualTo(this.metadata .getConfiguration().getEnv().getRepositories().get("foo-repo")); assertThat(request.getRepositories().get("bar-repo")).isEqualTo(this.metadata .getConfiguration().getEnv().getRepositories().get("bar-repo")); }
@Test 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 = this.provider.get(metadata, Version.parse("1.1.5.RELEASE")); assertThat(dependencyMetadata.getDependencies()).hasSize(3); assertThat(dependencyMetadata.getRepositories()).isEmpty(); assertThat(dependencyMetadata.getBoms()).hasSize(1); assertThat(dependencyMetadata.getBoms().get("bom-foo").getGroupId()) .isEqualTo("org.foo"); assertThat(dependencyMetadata.getBoms().get("bom-foo").getArtifactId()) .isEqualTo("bom"); assertThat(dependencyMetadata.getBoms().get("bom-foo").getVersion()) .isEqualTo("1.0.0.RELEASE"); }
@Test void resolveAdditionalRepositoriesDuplicates() { Dependency dependency = Dependency.withId("foo"); dependency.setBom("foo-bom"); dependency.setRepository("foo-repo"); BillOfMaterials bom = BillOfMaterials.create("com.example", "foo-bom", "1.0.0"); bom.getRepositories().add("bar-repo"); Dependency anotherDependency = Dependency.withId("bar"); anotherDependency.setRepository("bar-repo"); this.metadata = InitializrMetadataTestBuilder.withDefaults() .addBom("foo-bom", bom) .addRepository("foo-repo", "foo-repo", "http://example.com/foo", false) .addRepository("bar-repo", "bar-repo", "http://example.com/bar", false) .addDependencyGroup("test", dependency, anotherDependency).build(); ProjectRequest request = initProjectRequest(); request.getStyle().addAll(Arrays.asList("foo", "bar")); request.resolve(this.metadata); assertThat(request.getResolvedDependencies()).hasSize(2); assertThat(request.getBoms()).hasSize(1); assertThat(request.getRepositories()).hasSize(2); assertThat(request.getRepositories().get("foo-repo")).isEqualTo(this.metadata .getConfiguration().getEnv().getRepositories().get("foo-repo")); assertThat(request.getRepositories().get("bar-repo")).isEqualTo(this.metadata .getConfiguration().getEnv().getRepositories().get("bar-repo")); }
@Test void mavenBomWithSeveralDependenciesOnSameBom() { Dependency foo = Dependency.withId("foo", "org.acme", "foo"); foo.setBom("the-bom"); Dependency bar = Dependency.withId("bar", "org.acme", "bar"); bar.setBom("the-bom"); InitializrMetadata metadata = InitializrMetadataTestBuilder.withDefaults() .addDependencyGroup("group", foo, bar) .addBom("the-bom", "org.acme", "the-bom", "1.2.3").build(); applyMetadata(metadata); ProjectRequest request = createProjectRequest("foo", "bar"); generateMavenPom(request).hasDependency(foo) .hasBom("org.acme", "the-bom", "1.2.3").hasBomsCount(1); }
@Test void invalidBom() { InitializrMetadata metadata = initializeMetadata(); Dependency foo = Dependency.withId("foo", "org.acme", "foo"); foo.setBom("foo-bom"); addTestDependencyGroup(metadata, foo); metadata.getConfiguration().getEnv().getBoms().put("my-bom", BillOfMaterials.create("org.acme", "foo", "1.2.3")); assertThatExceptionOfType(InvalidInitializrMetadataException.class) .isThrownBy(metadata::validate).withMessageContaining("foo-bom") .withMessageContaining("my-bom"); }
@Test void mavenBom() { Dependency foo = Dependency.withId("foo", "org.acme", "foo"); foo.setBom("foo-bom"); InitializrMetadata metadata = InitializrMetadataTestBuilder.withDefaults() .addDependencyGroup("foo", foo) .addBom("foo-bom", "org.acme", "foo-bom", "1.2.3").build(); applyMetadata(metadata); ProjectRequest request = createProjectRequest("foo"); generateMavenPom(request).hasDependency(foo).hasBom("org.acme", "foo-bom", "1.2.3"); }
@ParameterizedTest @MethodSource("parameters") public void bomWithVersionProperty(String build, String fileName) { Dependency foo = Dependency.withId("foo", "org.acme", "foo"); foo.setBom("the-bom"); BillOfMaterials bom = BillOfMaterials.create("org.acme", "foo-bom", "1.3.3"); bom.setVersionProperty("foo.version"); InitializrMetadata metadata = InitializrMetadataTestBuilder.withDefaults() .addDependencyGroup("foo", foo).addBom("the-bom", bom).build(); applyMetadata(metadata); ProjectRequest request = createProjectRequestForType(build, "foo"); ProjectAssert project = generateProject(request); project.sourceCodeAssert(fileName).equalsTo(new ClassPathResource( "project/" + build + "/bom-property-" + getAssertFileName(fileName))); }
@Test void gradleBom() { Dependency foo = Dependency.withId("foo", "org.acme", "foo"); foo.setBom("foo-bom"); InitializrMetadata metadata = InitializrMetadataTestBuilder.withDefaults() .addDependencyGroup("foo", foo) .addBom("foo-bom", "org.acme", "foo-bom", "1.2.3").build(); applyMetadata(metadata); ProjectRequest request = createProjectRequest("foo"); generateGradleBuild(request).contains("dependencyManagement {") .contains("imports {").contains("mavenBom \"org.acme:foo-bom:1.2.3\""); }
@ParameterizedTest @MethodSource("parameters") public void bomWithOrdering(String build, String fileName) { Dependency foo = Dependency.withId("foo", "org.acme", "foo"); foo.setBom("foo-bom"); BillOfMaterials barBom = BillOfMaterials.create("org.acme", "bar-bom", "1.0"); barBom.setOrder(50); BillOfMaterials bizBom = BillOfMaterials.create("org.acme", "biz-bom"); bizBom.setOrder(40); bizBom.getAdditionalBoms().add("bar-bom"); bizBom.getMappings().add(BillOfMaterials.Mapping.create("1.0.0.RELEASE", "1.0")); BillOfMaterials fooBom = BillOfMaterials.create("org.acme", "foo-bom", "1.0"); fooBom.setOrder(20); fooBom.getAdditionalBoms().add("biz-bom"); InitializrMetadata metadata = InitializrMetadataTestBuilder.withDefaults() .addDependencyGroup("foo", foo).addBom("foo-bom", fooBom) .addBom("bar-bom", barBom).addBom("biz-bom", bizBom).build(); applyMetadata(metadata); ProjectRequest request = createProjectRequestForType(build, "foo"); ProjectAssert project = generateProject(request); project.sourceCodeAssert(fileName).equalsTo(new ClassPathResource( "project/" + build + "/bom-ordering-" + getAssertFileName(fileName))); }
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 this.provider.get(metadata, Version.parse(bootVersion)); }
@Test void mavenBomWithVersionMappingAndExtraRepositories() { Dependency foo = Dependency.withId("foo", "org.acme", "foo"); foo.setBom("the-bom"); BillOfMaterials bom = BillOfMaterials.create("org.acme", "foo-bom"); bom.getRepositories().add("foo-repo"); bom.getMappings() .add(BillOfMaterials.Mapping.create("[2.2.0.RELEASE,2.3.0.M1)", "1.0.0")); bom.getMappings().add(BillOfMaterials.Mapping.create("2.3.0.M1", "1.2.0", "foo-repo", "bar-repo")); InitializrMetadata metadata = InitializrMetadataTestBuilder.withDefaults() .addDependencyGroup("foo", foo).addBom("the-bom", bom) .addRepository("foo-repo", "repo", "http://example.com/foo", true) .addRepository("bar-repo", "repo", "http://example.com/bar", false) .build(); applyMetadata(metadata); // Second version ProjectRequest request = createProjectRequest("foo"); request.setBootVersion("2.3.0.RELEASE"); generateMavenPom(request).hasDependency(foo).hasSpringBootParent("2.3.0.RELEASE") .hasBom("org.acme", "foo-bom", "1.2.0") .hasRepository("foo-repo", "repo", "http://example.com/foo", true) .hasRepository("bar-repo", "repo", "http://example.com/bar", false) .hasRepositoriesCount(2); }
@Test void mavenBomWithVersionMapping() { Dependency foo = Dependency.withId("foo", "org.acme", "foo"); foo.setBom("the-bom"); BillOfMaterials bom = BillOfMaterials.create("org.acme", "foo-bom"); bom.getMappings() .add(BillOfMaterials.Mapping.create("[2.2.0.RELEASE,2.3.0.M1)", "1.0.0")); bom.getMappings().add(BillOfMaterials.Mapping.create("2.3.0.M1", "1.2.0")); InitializrMetadata metadata = InitializrMetadataTestBuilder.withDefaults() .addDependencyGroup("foo", foo).addBom("the-bom", bom).build(); applyMetadata(metadata); // First version ProjectRequest request = createProjectRequest("foo"); request.setBootVersion("2.2.5.RELEASE"); generateMavenPom(request).hasDependency(foo).hasSpringBootParent("2.2.5.RELEASE") .hasBom("org.acme", "foo-bom", "1.0.0"); // Second version ProjectRequest request2 = createProjectRequest("foo"); request2.setBootVersion("2.3.0.M1"); generateMavenPom(request2).hasDependency(foo).hasSpringBootParent("2.3.0.M1") .hasBom("org.acme", "foo-bom", "1.2.0"); }