[MCHANGES-419] Make IssueAdapter#getReleases return releases in a sensible order
Closes #29
diff --git a/src/main/java/org/apache/maven/plugins/changes/IssueAdapter.java b/src/main/java/org/apache/maven/plugins/changes/IssueAdapter.java
index 5443e21..34923a9 100644
--- a/src/main/java/org/apache/maven/plugins/changes/IssueAdapter.java
+++ b/src/main/java/org/apache/maven/plugins/changes/IssueAdapter.java
@@ -23,6 +23,7 @@
import java.util.List;
import java.util.Map;
+import org.apache.maven.artifact.versioning.ComparableVersion;
import org.apache.maven.plugins.changes.model.Action;
import org.apache.maven.plugins.changes.model.Release;
import org.apache.maven.plugins.issues.Issue;
@@ -85,8 +86,15 @@
}
}
- // Extract the releases from the Map to a List
- return new ArrayList<>(releasesMap.values());
+ // Extract the releases from the Map to a sorted List. Releases are sorted by descending order of version.
+ List<Release> allReleases = new ArrayList<>(releasesMap.values());
+ allReleases.sort((release1, release2) -> {
+ ComparableVersion version1 = new ComparableVersion(release1.getVersion());
+ ComparableVersion version2 = new ComparableVersion(release2.getVersion());
+ return version2.compareTo(version1);
+ });
+
+ return allReleases;
}
/**
diff --git a/src/test/java/org/apache/maven/plugins/changes/IssueAdapterTest.java b/src/test/java/org/apache/maven/plugins/changes/IssueAdapterTest.java
index 0126a77..f421475 100644
--- a/src/test/java/org/apache/maven/plugins/changes/IssueAdapterTest.java
+++ b/src/test/java/org/apache/maven/plugins/changes/IssueAdapterTest.java
@@ -18,8 +18,12 @@
*/
package org.apache.maven.plugins.changes;
+import java.util.Arrays;
+import java.util.List;
+
import junit.framework.TestCase;
import org.apache.maven.plugins.changes.model.Action;
+import org.apache.maven.plugins.changes.model.Release;
import org.apache.maven.plugins.issues.Issue;
import org.apache.maven.plugins.issues.IssueManagementSystem;
import org.apache.maven.plugins.jira.JIRAIssueManagmentSystem;
@@ -105,11 +109,45 @@
}
private Issue createIssue(String key, String type) {
+ return createIssue(key, type, null);
+ }
+
+ private Issue createIssue(String key, String type, String version) {
Issue issue = new Issue();
issue.setKey(key);
issue.setType(type);
+ if (version != null) {
+ issue.addFixVersion(version);
+ }
+
issue.setAssignee("A User");
issue.setSummary("The title of this issue");
return issue;
}
+
+ public void testReleaseOrder() {
+ IssueManagementSystem ims = new JIRAIssueManagmentSystem();
+ ims.getIssueTypeMap().put("Story", IssueType.ADD);
+ ims.getIssueTypeMap().put("Epic", IssueType.ADD);
+ ims.getIssueTypeMap().put("Defect", IssueType.FIX);
+ ims.getIssueTypeMap().put("Error", IssueType.FIX);
+ IssueAdapter adapter = new IssueAdapter(ims);
+
+ List<Issue> issues = Arrays.asList(
+ createIssue("TST-1", "Story", "1.0.0-alpha"),
+ createIssue("TST-2", "Epic", "1.2.1"),
+ createIssue("TST-3", "Error", "0.1.1"),
+ createIssue("TST-4", "Defect", "3.0"),
+ createIssue("TST-5", "Improvement", "4"),
+ createIssue("TST-6", "Epic", "0.1.1"));
+
+ List<Release> releases = adapter.getReleases(issues);
+
+ assertEquals(releases.size(), 5);
+ assertEquals(releases.get(0).getVersion(), "4");
+ assertEquals(releases.get(1).getVersion(), "3.0");
+ assertEquals(releases.get(2).getVersion(), "1.2.1");
+ assertEquals(releases.get(3).getVersion(), "1.0.0-alpha");
+ assertEquals(releases.get(4).getVersion(), "0.1.1");
+ }
}