Polish "Add support for writing license and developer in Maven pom"

See gh-1029
This commit is contained in:
Stephane Nicoll
2019-12-27 11:58:00 +01:00
parent f50af605fe
commit 2d0ef11693
7 changed files with 136 additions and 249 deletions

View File

@@ -17,6 +17,7 @@
package io.spring.initializr.generator.buildsystem.maven; package io.spring.initializr.generator.buildsystem.maven;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
@@ -95,7 +96,7 @@ public class MavenBuildSettings extends BuildSettings {
/** /**
* Return the {@linkplain MavenLicense licenses} associated with the project. * Return the {@linkplain MavenLicense licenses} associated with the project.
* @return the licenses of the project or {@code null} * @return the licenses of the project
*/ */
public List<MavenLicense> getLicenses() { public List<MavenLicense> getLicenses() {
return this.licenses; return this.licenses;
@@ -103,7 +104,7 @@ public class MavenBuildSettings extends BuildSettings {
/** /**
* Return the {@linkplain MavenDeveloper developers} associated with the project. * Return the {@linkplain MavenDeveloper developers} associated with the project.
* @return the developers of the project or {@code null} * @return the developers of the project
*/ */
public List<MavenDeveloper> getDevelopers() { public List<MavenDeveloper> getDevelopers() {
return this.developers; return this.developers;
@@ -201,8 +202,8 @@ public class MavenBuildSettings extends BuildSettings {
* @param licenses the licenses associated with the project * @param licenses the licenses associated with the project
* @return this for method chaining * @return this for method chaining
*/ */
public Builder licenses(List<MavenLicense> licenses) { public Builder licenses(MavenLicense... licenses) {
this.licenses = licenses; this.licenses = (licenses != null) ? Arrays.asList(licenses) : new ArrayList<>();
return self(); return self();
} }
@@ -211,8 +212,8 @@ public class MavenBuildSettings extends BuildSettings {
* @param developers the developers associated with the project * @param developers the developers associated with the project
* @return this for method chaining * @return this for method chaining
*/ */
public Builder developers(List<MavenDeveloper> developers) { public Builder developers(MavenDeveloper... developers) {
this.developers = developers; this.developers = (developers != null) ? Arrays.asList(developers) : new ArrayList<>();
return self(); return self();
} }

View File

@@ -20,6 +20,7 @@ import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.Comparator; import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.function.BiConsumer; import java.util.function.BiConsumer;
import java.util.function.Predicate; import java.util.function.Predicate;
@@ -133,6 +134,25 @@ public class MavenBuildWriter {
}); });
} }
private void writeLicenses(IndentingWriter writer, MavenBuildSettings settings) {
if (settings.getLicenses().isEmpty()) {
return;
}
writeElement(writer, "licenses", () -> writeCollection(writer, settings.getLicenses(), this::writeLicense));
}
private void writeLicense(IndentingWriter writer, MavenLicense license) {
writeElement(writer, "license", () -> {
writeSingleElement(writer, "name", license.getName());
writeSingleElement(writer, "url", license.getUrl());
if (license.getDistribution() != null) {
writeSingleElement(writer, "distribution",
license.getDistribution().name().toLowerCase(Locale.ENGLISH));
}
writeSingleElement(writer, "comments", license.getComments());
});
}
private void writeDevelopers(IndentingWriter writer, MavenBuildSettings settings) { private void writeDevelopers(IndentingWriter writer, MavenBuildSettings settings) {
if (settings.getDevelopers().isEmpty()) { if (settings.getDevelopers().isEmpty()) {
return; return;
@@ -162,22 +182,6 @@ public class MavenBuildWriter {
}); });
} }
private void writeLicenses(IndentingWriter writer, MavenBuildSettings settings) {
if (settings.getLicenses().isEmpty()) {
return;
}
writeElement(writer, "licenses", () -> writeCollection(writer, settings.getLicenses(), this::writeLicense));
}
private void writeLicense(IndentingWriter writer, MavenLicense license) {
writeElement(writer, "license", () -> {
writeSingleElement(writer, "name", license.getName());
writeSingleElement(writer, "url", license.getUrl());
writeSingleElement(writer, "distribution", license.getDistribution());
writeSingleElement(writer, "comments", license.getComments());
});
}
private void writeDependencies(IndentingWriter writer, MavenBuild build) { private void writeDependencies(IndentingWriter writer, MavenBuild build) {
if (build.dependencies().isEmpty()) { if (build.dependencies().isEmpty()) {
return; return;

View File

@@ -47,7 +47,7 @@ public class MavenDeveloper {
private final Map<String, String> properties; private final Map<String, String> properties;
public MavenDeveloper(Builder builder) { MavenDeveloper(Builder builder) {
this.id = builder.id; this.id = builder.id;
this.name = builder.name; this.name = builder.name;
this.email = builder.email; this.email = builder.email;
@@ -76,8 +76,8 @@ public class MavenDeveloper {
} }
/** /**
* Return the e-mail address of the developer. * Return the email address of the developer.
* @return the e-mail address * @return the email address
*/ */
public String getEmail() { public String getEmail() {
return this.email; return this.email;
@@ -175,8 +175,8 @@ public class MavenDeveloper {
} }
/** /**
* Set the e-mail address of the developer. * Set the email address of the developer.
* @param email the e-mail address of the developer or {@code null} * @param email the email address of the developer or {@code null}
* @return this for method chaining * @return this for method chaining
*/ */
public Builder email(String email) { public Builder email(String email) {

View File

@@ -20,6 +20,7 @@ package io.spring.initializr.generator.buildsystem.maven;
* A {@code <license>} in a Maven pom. * A {@code <license>} in a Maven pom.
* *
* @author Jafer Khan Shamshad * @author Jafer Khan Shamshad
* @author Stephane Nicoll
*/ */
public class MavenLicense { public class MavenLicense {
@@ -27,11 +28,11 @@ public class MavenLicense {
private final String url; private final String url;
private final String distribution; private final Distribution distribution;
private final String comments; private final String comments;
public MavenLicense(Builder builder) { MavenLicense(Builder builder) {
this.name = builder.name; this.name = builder.name;
this.url = builder.url; this.url = builder.url;
this.distribution = builder.distribution; this.distribution = builder.distribution;
@@ -58,7 +59,7 @@ public class MavenLicense {
* Return the distribution mechanism of the project associated with the license. * Return the distribution mechanism of the project associated with the license.
* @return the distribution mechanism * @return the distribution mechanism
*/ */
public String getDistribution() { public Distribution getDistribution() {
return this.distribution; return this.distribution;
} }
@@ -79,7 +80,7 @@ public class MavenLicense {
private String url; private String url;
private String distribution; private Distribution distribution;
private String comments; private String comments;
@@ -108,7 +109,7 @@ public class MavenLicense {
* @param distribution the distribution mechanism of the project or {@code null} * @param distribution the distribution mechanism of the project or {@code null}
* @return this for method chaining * @return this for method chaining
*/ */
public Builder distribution(String distribution) { public Builder distribution(Distribution distribution) {
this.distribution = distribution; this.distribution = distribution;
return this; return this;
} }
@@ -129,4 +130,21 @@ public class MavenLicense {
} }
/**
* Describes how the project may be legally distributed.
*/
public enum Distribution {
/**
* May be downloaded from a Maven repository.
*/
REPO,
/**
* Must be manually installed.
*/
MANUAL
}
} }

View File

@@ -17,7 +17,6 @@
package io.spring.initializr.generator.buildsystem.maven; package io.spring.initializr.generator.buildsystem.maven;
import java.io.StringWriter; import java.io.StringWriter;
import java.util.Collections;
import java.util.function.Consumer; import java.util.function.Consumer;
import io.spring.initializr.generator.buildsystem.BillOfMaterials; import io.spring.initializr.generator.buildsystem.BillOfMaterials;
@@ -25,6 +24,7 @@ import io.spring.initializr.generator.buildsystem.Dependency;
import io.spring.initializr.generator.buildsystem.Dependency.Exclusion; import io.spring.initializr.generator.buildsystem.Dependency.Exclusion;
import io.spring.initializr.generator.buildsystem.DependencyScope; import io.spring.initializr.generator.buildsystem.DependencyScope;
import io.spring.initializr.generator.buildsystem.MavenRepository; import io.spring.initializr.generator.buildsystem.MavenRepository;
import io.spring.initializr.generator.buildsystem.maven.MavenLicense.Distribution;
import io.spring.initializr.generator.io.IndentingWriter; import io.spring.initializr.generator.io.IndentingWriter;
import io.spring.initializr.generator.version.VersionProperty; import io.spring.initializr.generator.version.VersionProperty;
import io.spring.initializr.generator.version.VersionReference; import io.spring.initializr.generator.version.VersionReference;
@@ -86,29 +86,6 @@ class MavenBuildWriterTests {
generatePom(build, (pom) -> assertThat(pom).textAtPath("/project/packaging").isEqualTo("war")); generatePom(build, (pom) -> assertThat(pom).textAtPath("/project/packaging").isEqualTo("war"));
} }
@Test
void pomWithProperties() {
MavenBuild build = new MavenBuild();
build.settings().coordinates("com.example.demo", "demo");
build.properties().property("java.version", "1.8").property("alpha", "a");
generatePom(build, (pom) -> {
assertThat(pom).textAtPath("/project/properties/java.version").isEqualTo("1.8");
assertThat(pom).textAtPath("/project/properties/alpha").isEqualTo("a");
});
}
@Test
void pomWithVersionProperties() {
MavenBuild build = new MavenBuild();
build.properties().version(VersionProperty.of("version.property", false), "1.2.3")
.version(VersionProperty.of("internal.property", true), "4.5.6").version("external.property", "7.8.9");
generatePom(build, (pom) -> {
assertThat(pom).textAtPath("/project/properties/version.property").isEqualTo("1.2.3");
assertThat(pom).textAtPath("/project/properties/internal.property").isEqualTo("4.5.6");
assertThat(pom).textAtPath("/project/properties/external.property").isEqualTo("7.8.9");
});
}
@Test @Test
void pomWithNoLicense() { void pomWithNoLicense() {
MavenBuild build = new MavenBuild(); MavenBuild build = new MavenBuild();
@@ -117,12 +94,26 @@ class MavenBuildWriterTests {
} }
@Test @Test
void pomWithLicense() { void pomWithBasicLicense() {
MavenBuild build = new MavenBuild();
build.settings().coordinates("com.example.demo", "demo").licenses(new MavenLicense.Builder()
.name("Apache License, Version 2.0").url("https://www.apache.org/licenses/LICENSE-2.0").build());
generatePom(build, (pom) -> {
NodeAssert license = pom.nodeAtPath("/project/licenses/license");
assertThat(license).textAtPath("name").isEqualTo("Apache License, Version 2.0");
assertThat(license).textAtPath("url").isEqualTo("https://www.apache.org/licenses/LICENSE-2.0");
assertThat(license).textAtPath("distribution").isNullOrEmpty();
assertThat(license).textAtPath("comments").isNullOrEmpty();
});
}
@Test
void pomWithFullLicense() {
MavenBuild build = new MavenBuild(); MavenBuild build = new MavenBuild();
build.settings().coordinates("com.example.demo", "demo") build.settings().coordinates("com.example.demo", "demo")
.licenses(Collections.singletonList(new MavenLicense.Builder().name("Apache License, Version 2.0") .licenses(new MavenLicense.Builder().name("Apache License, Version 2.0")
.url("https://www.apache.org/licenses/LICENSE-2.0").distribution("repo") .url("https://www.apache.org/licenses/LICENSE-2.0").distribution(Distribution.REPO)
.comments("A business-friendly OSS license").build())); .comments("A business-friendly OSS license").build());
generatePom(build, (pom) -> { generatePom(build, (pom) -> {
NodeAssert licenses = pom.nodeAtPath("/project/licenses"); NodeAssert licenses = pom.nodeAtPath("/project/licenses");
assertThat(licenses).isNotNull(); assertThat(licenses).isNotNull();
@@ -143,84 +134,75 @@ class MavenBuildWriterTests {
} }
@Test @Test
void pomWithDeveloper() { void pomWithBasicDeveloper() {
MavenBuild build = new MavenBuild(); MavenBuild build = new MavenBuild();
build.settings().coordinates("com.example.demo", "demo") build.settings().coordinates("com.example.demo", "demo").developers(
.developers(Collections.singletonList(new MavenDeveloper.Builder().id("jaferkhan") new MavenDeveloper.Builder().id("jsmith").name("John Smith").email("jsmith@example.com").build())
.name("Jafer Khan Shamshad").email("jaferkhan@example.com")
.url("http://www.example.com/jaferkhan").organization("ACME")
.organizationUrl("http://www.example.com").timezone("Asia/Karachi").build()))
.build(); .build();
generatePom(build, (pom) -> { generatePom(build, (pom) -> {
NodeAssert developers = pom.nodeAtPath("/project/developers"); NodeAssert developer = pom.nodeAtPath("/project/developers/developer");
assertThat(developers).isNotNull(); assertThat(developer).textAtPath("id").isEqualTo("jsmith");
NodeAssert developer = developers.nodeAtPath("developer"); assertThat(developer).textAtPath("name").isEqualTo("John Smith");
assertThat(developer).isNotNull(); assertThat(developer).textAtPath("email").isEqualTo("jsmith@example.com");
assertThat(developer).textAtPath("id").isEqualTo("jaferkhan"); assertThat(developer).textAtPath("url").isNullOrEmpty();
assertThat(developer).textAtPath("name").isEqualTo("Jafer Khan Shamshad"); assertThat(developer).textAtPath("organization").isNullOrEmpty();
assertThat(developer).textAtPath("email").isEqualTo("jaferkhan@example.com"); assertThat(developer).textAtPath("organizationUrl").isNullOrEmpty();
assertThat(developer).textAtPath("url").isEqualTo("http://www.example.com/jaferkhan");
assertThat(developer).textAtPath("organization").isEqualTo("ACME");
assertThat(developer).textAtPath("organizationUrl").isEqualTo("http://www.example.com");
assertThat(developer.nodeAtPath("roles")).isNull(); assertThat(developer.nodeAtPath("roles")).isNull();
assertThat(developer).textAtPath("timezone").isEqualTo("Asia/Karachi"); assertThat(developer).textAtPath("timezone").isNullOrEmpty();
assertThat(developer.nodeAtPath("properties")).isNull(); assertThat(developer.nodeAtPath("properties")).isNull();
}); });
} }
@Test @Test
void pomWithDeveloperWithRoles() { void pomWithFullDeveloper() {
MavenBuild build = new MavenBuild(); MavenBuild build = new MavenBuild();
build.settings().coordinates("com.example.demo", "demo") build.settings().coordinates("com.example.demo", "demo")
.developers(Collections.singletonList(new MavenDeveloper.Builder().id("jaferkhan") .developers(new MavenDeveloper.Builder().id("jsmith").name("John Smith").email("jsmith@example.com")
.name("Jafer Khan Shamshad").role("developer").role("tester").build())) .url("https://example.com/jsmith").organization("Acme Corp")
.build(); .organizationUrl("https://example.com").timezone("Asia/Karachi").role("developer")
.role("tester").property("prop1", "test1").property("prop2", "test2").build());
generatePom(build, (pom) -> { generatePom(build, (pom) -> {
NodeAssert developers = pom.nodeAtPath("/project/developers"); NodeAssert developers = pom.nodeAtPath("/project/developers");
assertThat(developers).isNotNull(); assertThat(developers).isNotNull();
NodeAssert developer = developers.nodeAtPath("developer"); NodeAssert developer = developers.nodeAtPath("developer");
assertThat(developer).isNotNull(); assertThat(developer).isNotNull();
assertThat(developer).textAtPath("id").isEqualTo("jaferkhan"); assertThat(developer).textAtPath("id").isEqualTo("jsmith");
assertThat(developer).textAtPath("name").isEqualTo("Jafer Khan Shamshad"); assertThat(developer).textAtPath("name").isEqualTo("John Smith");
assertThat(developer).textAtPath("email").isNullOrEmpty(); assertThat(developer).textAtPath("email").isEqualTo("jsmith@example.com");
assertThat(developer).textAtPath("url").isNullOrEmpty(); assertThat(developer).textAtPath("url").isEqualTo("https://example.com/jsmith");
assertThat(developer).textAtPath("organization").isNullOrEmpty(); assertThat(developer).textAtPath("organization").isEqualTo("Acme Corp");
assertThat(developer).textAtPath("organizationUrl").isNullOrEmpty(); assertThat(developer).textAtPath("organizationUrl").isEqualTo("https://example.com");
assertThat(developer).textAtPath("timezone").isNullOrEmpty(); assertThat(developer).textAtPath("timezone").isEqualTo("Asia/Karachi");
assertThat(developer.nodeAtPath("properties")).isNull();
NodeAssert roles = developer.nodeAtPath("roles"); NodeAssert roles = developer.nodeAtPath("roles");
assertThat(roles).isNotNull();
roles.nodesAtPath("role").hasSize(2); roles.nodesAtPath("role").hasSize(2);
assertThat(roles).textAtPath("role[1]").isEqualTo("developer"); assertThat(roles).textAtPath("role[1]").isEqualTo("developer");
assertThat(roles).textAtPath("role[2]").isEqualTo("tester"); assertThat(roles).textAtPath("role[2]").isEqualTo("tester");
NodeAssert properties = developer.nodeAtPath("properties");
assertThat(properties).textAtPath("prop1").isEqualTo("test1");
assertThat(properties).textAtPath("prop2").isEqualTo("test2");
}); });
} }
@Test @Test
void pomWithDeveloperWithProperties() { void pomWithProperties() {
MavenBuild build = new MavenBuild(); MavenBuild build = new MavenBuild();
build.settings().coordinates("com.example.demo", "demo") build.settings().coordinates("com.example.demo", "demo");
.developers(Collections.singletonList(new MavenDeveloper.Builder().id("jaferkhan") build.properties().property("java.version", "1.8").property("alpha", "a");
.name("Jafer Khan Shamshad").property("hometown", "Mardan").property("ethnicity", "Pukhtun")
.property("religion", "Islam").build()))
.build();
generatePom(build, (pom) -> { generatePom(build, (pom) -> {
NodeAssert developers = pom.nodeAtPath("/project/developers"); assertThat(pom).textAtPath("/project/properties/java.version").isEqualTo("1.8");
assertThat(developers).isNotNull(); assertThat(pom).textAtPath("/project/properties/alpha").isEqualTo("a");
NodeAssert developer = developers.nodeAtPath("developer"); });
assertThat(developer).isNotNull(); }
assertThat(developer).textAtPath("id").isEqualTo("jaferkhan");
assertThat(developer).textAtPath("name").isEqualTo("Jafer Khan Shamshad"); @Test
assertThat(developer).textAtPath("email").isNullOrEmpty(); void pomWithVersionProperties() {
assertThat(developer).textAtPath("url").isNullOrEmpty(); MavenBuild build = new MavenBuild();
assertThat(developer).textAtPath("organization").isNullOrEmpty(); build.properties().version(VersionProperty.of("version.property", false), "1.2.3")
assertThat(developer).textAtPath("organizationUrl").isNullOrEmpty(); .version(VersionProperty.of("internal.property", true), "4.5.6").version("external.property", "7.8.9");
assertThat(developer).textAtPath("timezone").isNullOrEmpty(); generatePom(build, (pom) -> {
NodeAssert properties = developer.nodeAtPath("properties"); assertThat(pom).textAtPath("/project/properties/version.property").isEqualTo("1.2.3");
assertThat(properties).isNotNull(); assertThat(pom).textAtPath("/project/properties/internal.property").isEqualTo("4.5.6");
assertThat(properties).textAtPath("hometown").isEqualTo("Mardan"); assertThat(pom).textAtPath("/project/properties/external.property").isEqualTo("7.8.9");
assertThat(properties).textAtPath("ethnicity").isEqualTo("Pukhtun");
assertThat(properties).textAtPath("religion").isEqualTo("Islam");
}); });
} }

View File

@@ -22,7 +22,7 @@ import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.entry; import static org.assertj.core.api.Assertions.entry;
/** /**
* Tests for {@link MavenDeveloper} * Tests for {@link MavenDeveloper}.
* *
* @author Jafer Khan Shamshad * @author Jafer Khan Shamshad
*/ */
@@ -30,8 +30,8 @@ class MavenDeveloperTests {
@Test @Test
void developerWithIdOnly() { void developerWithIdOnly() {
MavenDeveloper developer = new MavenDeveloper.Builder().id("jaferkhan").build(); MavenDeveloper developer = new MavenDeveloper.Builder().id("jsmith").build();
assertThat(developer.getId()).isEqualTo("jaferkhan"); assertThat(developer.getId()).isEqualTo("jsmith");
assertThat(developer.getName()).isNull(); assertThat(developer.getName()).isNull();
assertThat(developer.getEmail()).isNull(); assertThat(developer.getEmail()).isNull();
assertThat(developer.getUrl()).isNull(); assertThat(developer.getUrl()).isNull();
@@ -43,120 +43,21 @@ class MavenDeveloperTests {
} }
@Test @Test
void developerWithName() { void developerWithFullDetails() {
MavenDeveloper developer = new MavenDeveloper.Builder().id("jaferkhan").name("Jafer Khan Shamshad").build(); MavenDeveloper developer = new MavenDeveloper.Builder().id("jsmith").name("John Smith")
assertThat(developer.getId()).isEqualTo("jaferkhan"); .email("john@example.com").url("http://www.example.com/jsmith").organization("Acme Corp")
assertThat(developer.getName()).isEqualTo("Jafer Khan Shamshad");
assertThat(developer.getEmail()).isNull();
assertThat(developer.getUrl()).isNull();
assertThat(developer.getOrganization()).isNull();
assertThat(developer.getOrganizationUrl()).isNull();
assertThat(developer.getRoles()).hasSize(0);
assertThat(developer.getTimezone()).isNull();
assertThat(developer.getProperties()).hasSize(0);
}
@Test
void developerWithEmail() {
MavenDeveloper developer = new MavenDeveloper.Builder().id("jaferkhan").name("Jafer Khan Shamshad")
.email("jaferkhan@example.com").build();
assertThat(developer.getId()).isEqualTo("jaferkhan");
assertThat(developer.getName()).isEqualTo("Jafer Khan Shamshad");
assertThat(developer.getEmail()).isEqualTo("jaferkhan@example.com");
assertThat(developer.getUrl()).isNull();
assertThat(developer.getOrganization()).isNull();
assertThat(developer.getOrganizationUrl()).isNull();
assertThat(developer.getRoles()).hasSize(0);
assertThat(developer.getTimezone()).isNull();
assertThat(developer.getProperties()).hasSize(0);
}
@Test
void developerWithUrl() {
MavenDeveloper developer = new MavenDeveloper.Builder().id("jaferkhan").name("Jafer Khan Shamshad")
.email("jaferkhan@example.com").url("http://www.example.com/jaferkhan").build();
assertThat(developer.getId()).isEqualTo("jaferkhan");
assertThat(developer.getName()).isEqualTo("Jafer Khan Shamshad");
assertThat(developer.getEmail()).isEqualTo("jaferkhan@example.com");
assertThat(developer.getUrl()).isEqualTo("http://www.example.com/jaferkhan");
assertThat(developer.getOrganization()).isNull();
assertThat(developer.getOrganizationUrl()).isNull();
assertThat(developer.getRoles()).hasSize(0);
assertThat(developer.getTimezone()).isNull();
assertThat(developer.getProperties()).hasSize(0);
}
@Test
void developerWithOrganization() {
MavenDeveloper developer = new MavenDeveloper.Builder().id("jaferkhan").name("Jafer Khan Shamshad")
.email("jaferkhan@example.com").url("http://www.example.com/jaferkhan").organization("ACME")
.organizationUrl("http://www.example.com").build();
assertThat(developer.getId()).isEqualTo("jaferkhan");
assertThat(developer.getName()).isEqualTo("Jafer Khan Shamshad");
assertThat(developer.getEmail()).isEqualTo("jaferkhan@example.com");
assertThat(developer.getUrl()).isEqualTo("http://www.example.com/jaferkhan");
assertThat(developer.getOrganization()).isEqualTo("ACME");
assertThat(developer.getOrganizationUrl()).isEqualTo("http://www.example.com");
assertThat(developer.getRoles()).hasSize(0);
assertThat(developer.getTimezone()).isNull();
assertThat(developer.getProperties()).hasSize(0);
}
@Test
void developerWithRoles() {
MavenDeveloper developer = new MavenDeveloper.Builder().id("jaferkhan").name("Jafer Khan Shamshad")
.email("jaferkhan@example.com").url("http://www.example.com/jaferkhan").organization("ACME")
.organizationUrl("http://www.example.com").role("developer").role("tester").build();
assertThat(developer.getId()).isEqualTo("jaferkhan");
assertThat(developer.getName()).isEqualTo("Jafer Khan Shamshad");
assertThat(developer.getEmail()).isEqualTo("jaferkhan@example.com");
assertThat(developer.getUrl()).isEqualTo("http://www.example.com/jaferkhan");
assertThat(developer.getOrganization()).isEqualTo("ACME");
assertThat(developer.getOrganizationUrl()).isEqualTo("http://www.example.com");
assertThat(developer.getRoles()).hasSize(2);
assertThat(developer.getRoles().isEmpty()).isFalse();
assertThat(developer.getRoles()).containsExactly("developer", "tester");
assertThat(developer.getTimezone()).isNull();
assertThat(developer.getProperties()).hasSize(0);
}
@Test
void developerWithTimezone() {
MavenDeveloper developer = new MavenDeveloper.Builder().id("jaferkhan").name("Jafer Khan Shamshad")
.email("jaferkhan@example.com").url("http://www.example.com/jaferkhan").organization("ACME")
.organizationUrl("http://www.example.com").role("developer").role("tester").timezone("Asia/Karachi") .organizationUrl("http://www.example.com").role("developer").role("tester").timezone("Asia/Karachi")
.build(); .property("prop1", "test1").property("prop2", "test2").property("prop3", "test3").build();
assertThat(developer.getId()).isEqualTo("jaferkhan"); assertThat(developer.getId()).isEqualTo("jsmith");
assertThat(developer.getName()).isEqualTo("Jafer Khan Shamshad"); assertThat(developer.getName()).isEqualTo("John Smith");
assertThat(developer.getEmail()).isEqualTo("jaferkhan@example.com"); assertThat(developer.getEmail()).isEqualTo("john@example.com");
assertThat(developer.getUrl()).isEqualTo("http://www.example.com/jaferkhan"); assertThat(developer.getUrl()).isEqualTo("http://www.example.com/jsmith");
assertThat(developer.getOrganization()).isEqualTo("ACME"); assertThat(developer.getOrganization()).isEqualTo("Acme Corp");
assertThat(developer.getOrganizationUrl()).isEqualTo("http://www.example.com"); assertThat(developer.getOrganizationUrl()).isEqualTo("http://www.example.com");
assertThat(developer.getRoles()).hasSize(2);
assertThat(developer.getRoles()).containsExactly("developer", "tester"); assertThat(developer.getRoles()).containsExactly("developer", "tester");
assertThat(developer.getTimezone()).isEqualTo("Asia/Karachi"); assertThat(developer.getTimezone()).isEqualTo("Asia/Karachi");
assertThat(developer.getProperties()).hasSize(0); assertThat(developer.getProperties()).containsExactly(entry("prop1", "test1"), entry("prop2", "test2"),
} entry("prop3", "test3"));
@Test
void developerWithProperties() {
MavenDeveloper developer = new MavenDeveloper.Builder().id("jaferkhan").name("Jafer Khan Shamshad")
.email("jaferkhan@example.com").url("http://www.example.com/jaferkhan").organization("ACME")
.organizationUrl("http://www.example.com").role("developer").role("tester").timezone("Asia/Karachi")
.property("hometown", "Mardan").property("ethnicity", "Pukhtun").property("religion", "Islam").build();
assertThat(developer.getId()).isEqualTo("jaferkhan");
assertThat(developer.getName()).isEqualTo("Jafer Khan Shamshad");
assertThat(developer.getEmail()).isEqualTo("jaferkhan@example.com");
assertThat(developer.getUrl()).isEqualTo("http://www.example.com/jaferkhan");
assertThat(developer.getOrganization()).isEqualTo("ACME");
assertThat(developer.getOrganizationUrl()).isEqualTo("http://www.example.com");
assertThat(developer.getRoles()).hasSize(2);
assertThat(developer.getRoles().isEmpty()).isFalse();
assertThat(developer.getRoles()).containsExactly("developer", "tester");
assertThat(developer.getTimezone()).isEqualTo("Asia/Karachi");
assertThat(developer.getProperties()).hasSize(3);
assertThat(developer.getProperties()).containsExactly(entry("hometown", "Mardan"),
entry("ethnicity", "Pukhtun"), entry("religion", "Islam"));
} }
} }

View File

@@ -16,12 +16,13 @@
package io.spring.initializr.generator.buildsystem.maven; package io.spring.initializr.generator.buildsystem.maven;
import io.spring.initializr.generator.buildsystem.maven.MavenLicense.Distribution;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
/** /**
* Tests for {@link MavenLicense} * Tests for {@link MavenLicense}.
* *
* @author Jafer Khan Shamshad * @author Jafer Khan Shamshad
*/ */
@@ -37,33 +38,13 @@ class MavenLicenseTests {
} }
@Test @Test
void licenseWithUrl() { void licenseWithFullDetails() {
MavenLicense license = new MavenLicense.Builder().name("Apache License, Version 2.0") MavenLicense license = new MavenLicense.Builder().name("Apache License, Version 2.0")
.url("https://www.apache.org/licenses/LICENSE-2.0").build(); .url("https://www.apache.org/licenses/LICENSE-2.0").distribution(Distribution.MANUAL)
assertThat(license.getName()).isEqualTo("Apache License, Version 2.0");
assertThat(license.getUrl()).isEqualTo("https://www.apache.org/licenses/LICENSE-2.0");
assertThat(license.getDistribution()).isNull();
assertThat(license.getComments()).isNull();
}
@Test
void licenseWithDistribution() {
MavenLicense license = new MavenLicense.Builder().name("Apache License, Version 2.0")
.url("https://www.apache.org/licenses/LICENSE-2.0").distribution("repo").build();
assertThat(license.getName()).isEqualTo("Apache License, Version 2.0");
assertThat(license.getUrl()).isEqualTo("https://www.apache.org/licenses/LICENSE-2.0");
assertThat(license.getDistribution()).isEqualTo("repo");
assertThat(license.getComments()).isNull();
}
@Test
void licenseWithComments() {
MavenLicense license = new MavenLicense.Builder().name("Apache License, Version 2.0")
.url("https://www.apache.org/licenses/LICENSE-2.0").distribution("repo")
.comments("A business-friendly OSS license").build(); .comments("A business-friendly OSS license").build();
assertThat(license.getName()).isEqualTo("Apache License, Version 2.0"); assertThat(license.getName()).isEqualTo("Apache License, Version 2.0");
assertThat(license.getUrl()).isEqualTo("https://www.apache.org/licenses/LICENSE-2.0"); assertThat(license.getUrl()).isEqualTo("https://www.apache.org/licenses/LICENSE-2.0");
assertThat(license.getDistribution()).isEqualTo("repo"); assertThat(license.getDistribution()).isEqualTo(Distribution.MANUAL);
assertThat(license.getComments()).isEqualTo("A business-friendly OSS license"); assertThat(license.getComments()).isEqualTo("A business-friendly OSS license");
} }