Make sure dependencies are compatible with boot version

Closes gh-825
This commit is contained in:
Madhura Bhave 2019-02-11 13:39:04 -08:00
parent 5ea041744c
commit fe66bbab78
2 changed files with 32 additions and 2 deletions

View File

@ -44,6 +44,10 @@ public class ProjectRequestToDescriptionConverter {
public ProjectDescription convert(ProjectRequest request,
InitializrMetadata metadata) {
validate(request, metadata);
String springBootVersion = getSpringBootVersion(request, metadata);
List<Dependency> resolvedDependencies = getResolvedDependencies(request,
springBootVersion, metadata);
validateDependencyRange(springBootVersion, resolvedDependencies);
ProjectDescription description = new ProjectDescription();
description.setApplicationName(getApplicationName(request, metadata));
description.setArtifactId(request.getArtifactId());
@ -56,9 +60,8 @@ public class ProjectRequestToDescriptionConverter {
description.setName(request.getName());
description.setPackageName(getPackageName(request, metadata));
description.setPackaging(Packaging.forId(request.getPackaging()));
String springBootVersion = getSpringBootVersion(request, metadata);
description.setPlatformVersion(Version.parse(springBootVersion));
getResolvedDependencies(request, springBootVersion, metadata)
resolvedDependencies
.forEach((dependency) -> description.addDependency(dependency.getId(),
MetadataBuildItemMapper.toDependency(dependency)));
return description;
@ -129,6 +132,17 @@ public class ProjectRequestToDescriptionConverter {
});
}
private void validateDependencyRange(String springBootVersion,
List<Dependency> resolvedDependencies) {
resolvedDependencies.forEach((dep) -> {
if (!dep.match(Version.parse(springBootVersion))) {
throw new InvalidProjectRequestException(
"Dependency '" + dep.getId() + "' is not compatible "
+ "with Spring Boot " + springBootVersion);
}
});
}
private BuildSystem getBuildSystem(ProjectRequest request,
InitializrMetadata metadata) {
Type typeFromMetadata = metadata.getTypes().get(request.getType());

View File

@ -22,6 +22,8 @@ import io.spring.initializr.generator.buildsystem.gradle.GradleBuildSystem;
import io.spring.initializr.generator.project.ProjectDescription;
import io.spring.initializr.generator.spring.test.InitializrMetadataTestBuilder;
import io.spring.initializr.generator.version.Version;
import io.spring.initializr.generator.version.VersionRange;
import io.spring.initializr.metadata.Dependency;
import io.spring.initializr.metadata.InitializrMetadata;
import io.spring.initializr.metadata.Type;
import org.junit.jupiter.api.Test;
@ -102,6 +104,20 @@ public class ProjectRequestToDescriptionConverterTests {
.withMessage("Unknown dependency 'invalid' check project metadata");
}
@Test
void convertWhenDependencyOutOfRangeShouldThrowException() {
Dependency dependency = Dependency.withId("foo");
dependency.setRange(new VersionRange(Version.parse("2.2.0.M1")));
InitializrMetadata metadata = InitializrMetadataTestBuilder.withDefaults()
.addDependencyGroup("foo", dependency).build();
ProjectRequest request = getProjectRequest();
request.setDependencies(Collections.singletonList("foo"));
assertThatExceptionOfType(InvalidProjectRequestException.class)
.isThrownBy(() -> this.converter.convert(request, metadata))
.withMessage("Dependency 'foo' is not compatible "
+ "with Spring Boot 2.1.1.RELEASE");
}
@Test
void convertShouldSetApplicationNameForProjectDescriptionFromRequestWhenPresent() {
ProjectRequest request = getProjectRequest();