From a025adfc759313fc007d965736d29f8b6d429d4b Mon Sep 17 00:00:00 2001 From: Tomas Bjerre Date: Thu, 17 Mar 2016 19:47:22 +0100 Subject: [PATCH] Adding issueTypes in context #19 --- .travis.yml | 1 + CHANGELOG.md | 4 +- README.md | 29 +++++ build.gradle | 2 +- .../gitchangelog/api/GitChangelogApi.java | 9 +- .../gitchangelog/api/model/Changelog.java | 9 +- .../bjurr/gitchangelog/api/model/Issue.java | 18 ++- .../gitchangelog/api/model/IssueType.java | 28 +++++ .../se/bjurr/gitchangelog/api/model/Tag.java | 8 +- .../gitchangelog/internal/git/GitRepo.java | 2 +- .../internal/issues/IssueParser.java | 26 ++-- .../internal/model/ParsedIssue.java | 2 +- .../internal/model/Transformer.java | 42 ++++++- .../internal/settings/IssuesUtil.java | 7 +- .../internal/settings/SettingsIssue.java | 15 ++- .../api/GitChangelogApiAsserter.java | 6 +- .../bjurr/gitchangelog/api/TemplatesTest.java | 56 +++++---- .../internal/model/TransformerTest.java | 2 +- .../resources/assertions/testIssueTitles.md | 9 ++ .../assertions/testIssueTypesIssuesCommits.md | 118 ++++++++++++++++++ .../assertions/testIssuesAuthorsCommits.md | 4 +- .../resources/assertions/testIssuesCommits.md | 4 +- .../testTagsIssuesAuthorsCommits.md | 4 +- .../assertions/testTagsIssuesCommits.md | 4 +- .../assertions/testThatIssuesCanBeRemoved.md | 4 +- .../settings/git-changelog-test-settings.json | 6 +- .../templates/testIssueTitles.mustache | 3 + .../testIssueTypesIssuesCommits.mustache | 41 ++++++ 28 files changed, 391 insertions(+), 72 deletions(-) create mode 100644 src/main/java/se/bjurr/gitchangelog/api/model/IssueType.java create mode 100644 src/test/resources/assertions/testIssueTitles.md create mode 100644 src/test/resources/assertions/testIssueTypesIssuesCommits.md create mode 100644 src/test/resources/templates/testIssueTitles.mustache create mode 100644 src/test/resources/templates/testIssueTypesIssuesCommits.mustache diff --git a/.travis.yml b/.travis.yml index bc761957..dc3727c9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,6 +6,7 @@ jdk: git: depth: 9999999 before_script: + - git fetch origin master:master - git fetch origin test:test - git pull - git log --graph --full-history --all --color --date=short --pretty=format:"%Cred%x09%h %Creset%ad%Cgreen%d %Creset %s %C(bold)(%an)%Creset" diff --git a/CHANGELOG.md b/CHANGELOG.md index 47535b64..8239f867 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ Changelog of Git Changelog. -## Next release +## 1.36 ### Other changes **Fixing infinite loop in GitRepo** @@ -14,7 +14,7 @@ Changelog of Git Changelog. * at se.bjurr.gitchangelog.internal.git.GitRepo.toString(GitRepo.java:208) * at se.bjurr.gitchangelog.internal.git.GitRepo.getRef(GitRepo.java:174) -[f5b6360a4ad9416](https://github.com/tomasbjerre/git-changelog-lib/commit/f5b6360a4ad9416) Tomas Bjerre *2016-03-15 20:25:52* +[a4a15094f367c31](https://github.com/tomasbjerre/git-changelog-lib/commit/a4a15094f367c31) Tomas Bjerre *2016-03-15 20:27:41* ## 1.35 diff --git a/README.md b/README.md index ce972f9c..acf3c26c 100644 --- a/README.md +++ b/README.md @@ -95,6 +95,35 @@ The template is supplied with a datastructure like: - messageTitle (Only the first line of the message) - messageBody (Everything, except the title) * messageBodyItems (List of strings, the lines after the title) + * issueTypes + - name (Like GitHub, Jira, ...) + * issues + - name + - hasIssue + - issue + - hasLink + - link + - hasTitle + - title + * commits + - authorName + - authorEmailAddress + - commitTime + - message (The full message) + - messageTitle (Only the first line of the message) + - messageBody (Everything, except the title) + * messageBodyItems (List of strings, the lines after the title) + * authors + - authorName + - authrorEmail + * commits + - authorName + - authorEmailAddress + - commitTime + - message (The full message) + - messageTitle (Only the first line of the message) + - messageBody (Everything, except the title) + * messageBodyItems (List of strings, the lines after the title) * issues - name - hasIssue diff --git a/build.gradle b/build.gradle index 7e1785e6..350d5b32 100644 --- a/build.gradle +++ b/build.gradle @@ -30,7 +30,7 @@ dependencies { compile 'com.squareup.retrofit2:converter-gson:2.0.0' compile 'com.squareup.okhttp:okhttp:2.7.5' compile 'com.jayway.jsonpath:json-path:2.1.0' - compile 'com.google.guava:guava:11.0.1' + compile 'com.google.guava:guava:16.0.1' compile 'org.eclipse.jgit:org.eclipse.jgit:3.6.2.201501210735-r' compile 'com.github.spullara.mustache.java:compiler:0.8.18' testCompile 'junit:junit:4.12' diff --git a/src/main/java/se/bjurr/gitchangelog/api/GitChangelogApi.java b/src/main/java/se/bjurr/gitchangelog/api/GitChangelogApi.java index 870c03b6..dc9c2a09 100644 --- a/src/main/java/se/bjurr/gitchangelog/api/GitChangelogApi.java +++ b/src/main/java/se/bjurr/gitchangelog/api/GitChangelogApi.java @@ -24,8 +24,8 @@ import org.eclipse.jgit.lib.ObjectId; -import se.bjurr.gitchangelog.api.exceptions.GitChangelogRepositoryException; import se.bjurr.gitchangelog.api.exceptions.GitChangelogIntegrationException; +import se.bjurr.gitchangelog.api.exceptions.GitChangelogRepositoryException; import se.bjurr.gitchangelog.api.model.Changelog; import se.bjurr.gitchangelog.api.model.Issue; import se.bjurr.gitchangelog.internal.git.GitRepo; @@ -278,8 +278,8 @@ public GitChangelogApi withGitHubIssuePattern(String gitHubIssuePattern) { * Custom issues are added to support any kind of issue management, perhaps * something that is internal to your project. See {@link SettingsIssue}. */ - public GitChangelogApi withCustomIssue(String name, String pattern, String link) { - settings.addCustomIssue(new SettingsIssue(name, pattern, link)); + public GitChangelogApi withCustomIssue(String name, String pattern, String link, String title) { + settings.addCustomIssue(new SettingsIssue(name, pattern, link, title)); return this; } @@ -364,7 +364,8 @@ private Changelog getChangelog(GitRepo gitRepo) throws GitChangelogRepositoryExc transformer.toCommits(diff), // transformer.toTags(tags), // transformer.toAuthors(diff), // - transformer.toIssues(issues)); + transformer.toIssues(issues),// + transformer.toIssueTypes(issues)); } private String getTemplateContent() { diff --git a/src/main/java/se/bjurr/gitchangelog/api/model/Changelog.java b/src/main/java/se/bjurr/gitchangelog/api/model/Changelog.java index 69b9a045..799eb71d 100644 --- a/src/main/java/se/bjurr/gitchangelog/api/model/Changelog.java +++ b/src/main/java/se/bjurr/gitchangelog/api/model/Changelog.java @@ -13,12 +13,15 @@ public class Changelog implements ICommits, IAuthors, IIssues { private final List tags; private final List authors; private final List issues; + private final List issueTypes; - public Changelog(List commits, List tags, List authors, List issues) { + public Changelog(List commits, List tags, List authors, List issues, + List issueTypes) { this.commits = checkNotNull(commits, "commits"); this.tags = checkNotNull(tags, "tags"); this.authors = checkNotNull(authors, "authors"); this.issues = checkNotNull(issues, "issues"); + this.issueTypes = checkNotNull(issueTypes, "issueTypes"); } @Override @@ -39,4 +42,8 @@ public List getCommits() { public List getTags() { return tags; } + + public List getIssueTypes() { + return issueTypes; + } } diff --git a/src/main/java/se/bjurr/gitchangelog/api/model/Issue.java b/src/main/java/se/bjurr/gitchangelog/api/model/Issue.java index e3fbae47..5d7c38d7 100644 --- a/src/main/java/se/bjurr/gitchangelog/api/model/Issue.java +++ b/src/main/java/se/bjurr/gitchangelog/api/model/Issue.java @@ -13,13 +13,25 @@ public class Issue implements ICommits, IAuthors { private final List commits; private final List authors; + /** + * Like JIRA, or GitHub. + */ private final String name; - private final boolean hasIssue; + /** + * Like the title of a Jira. + */ private final String title; private final boolean hasTitle; + /** + * Like the actual Jira, JIR-ABC. + */ private final String issue; - private final boolean hasLink; + private final boolean hasIssue; + /** + * A link to the issue, http://..... + */ private final String link; + private final boolean hasLink; public Issue(List commits, List authors, String name, String title, String issue, String link) { checkState(!commits.isEmpty(), "commits"); @@ -74,6 +86,6 @@ public List getCommits() { @Override public String toString() { - return "Issue: " + issue; + return "Issue: " + issue + " Title: " + title; } } diff --git a/src/main/java/se/bjurr/gitchangelog/api/model/IssueType.java b/src/main/java/se/bjurr/gitchangelog/api/model/IssueType.java new file mode 100644 index 00000000..6bd9564c --- /dev/null +++ b/src/main/java/se/bjurr/gitchangelog/api/model/IssueType.java @@ -0,0 +1,28 @@ +package se.bjurr.gitchangelog.api.model; + +import static com.google.common.base.Preconditions.checkNotNull; + +import java.util.List; + +public class IssueType { + private final String name; + private final List issues; + + public IssueType(List issues, String name) { + this.name = checkNotNull(name, "name"); + this.issues = checkNotNull(issues, "issues"); + } + + public String getName() { + return name; + } + + public List getIssues() { + return issues; + } + + @Override + public String toString() { + return "IssueType: " + name; + } +} diff --git a/src/main/java/se/bjurr/gitchangelog/api/model/Tag.java b/src/main/java/se/bjurr/gitchangelog/api/model/Tag.java index 65aab64c..5e7343e5 100644 --- a/src/main/java/se/bjurr/gitchangelog/api/model/Tag.java +++ b/src/main/java/se/bjurr/gitchangelog/api/model/Tag.java @@ -10,13 +10,15 @@ public class Tag implements ICommits, IAuthors, IIssues { private final List commits; private final List authors; private final List issues; + private final List issueTypes; private final String name; - public Tag(String name, List commits, List authors, List issues) { + public Tag(String name, List commits, List authors, List issues, List issueTypes) { this.commits = commits; this.authors = authors; this.issues = issues; this.name = name; + this.issueTypes = issueTypes; } @Override @@ -46,4 +48,8 @@ public List getCommits() { public String toString() { return "name: " + name; } + + public List getIssueTypes() { + return issueTypes; + } } diff --git a/src/main/java/se/bjurr/gitchangelog/internal/git/GitRepo.java b/src/main/java/se/bjurr/gitchangelog/internal/git/GitRepo.java index 117bfdc8..e3cf2cda 100644 --- a/src/main/java/se/bjurr/gitchangelog/internal/git/GitRepo.java +++ b/src/main/java/se/bjurr/gitchangelog/internal/git/GitRepo.java @@ -210,6 +210,6 @@ private RevCommit firstCommit() { @Override public String toString() { - return "First commit at: " + firstCommit().name() + " Repo: " + repository; + return "Repo: " + repository; } } diff --git a/src/main/java/se/bjurr/gitchangelog/internal/issues/IssueParser.java b/src/main/java/se/bjurr/gitchangelog/internal/issues/IssueParser.java index 7cd6431c..a8593266 100644 --- a/src/main/java/se/bjurr/gitchangelog/internal/issues/IssueParser.java +++ b/src/main/java/se/bjurr/gitchangelog/internal/issues/IssueParser.java @@ -108,9 +108,9 @@ private void putGitHubIssue(Map foundIssues, GitHubHelper g GitHubIssue gitHubIssue = gitHubHelper.getIssueFromAll(matched).get(); foundIssues.put(matched, new ParsedIssue(// issuePattern.getName(),// - gitHubIssue.getTitle(), // matched,// - gitHubIssue.getLink())); + gitHubIssue.getLink(), // + gitHubIssue.getTitle())); } private void putJiraIssue(Map foundIssues, JiraClient jiraClient, SettingsIssue issuePattern, @@ -118,21 +118,27 @@ private void putJiraIssue(Map foundIssues, JiraClient jiraC JiraIssue jiraIssue = jiraClient.getIssue(matched).get(); foundIssues.put(matched, new ParsedIssue(// issuePattern.getName(),// - jiraIssue.getTitle(), // matched,// - jiraIssue.getLink())); + jiraIssue.getLink(), // + jiraIssue.getTitle())); } private void putCustomIssue(Map foundIssues, SettingsIssue issuePattern, Matcher matcher, String matched) { - String link = issuePattern.getLink().or("") // - .replaceAll("\\$\\{PATTERN_GROUP\\}", matched); - for (int i = 0; i <= matcher.groupCount(); i++) { - link = link.replaceAll("\\$\\{PATTERN_GROUP_" + i + "\\}", firstNonNull(matcher.group(i), "")); - } + String link = render(issuePattern.getLink().or(""), matcher, matched); + String title = render(issuePattern.getTitle().or(""), matcher, matched); foundIssues.put(matched, new ParsedIssue(// issuePattern.getName(),// matched,// - link)); + link,// + title)); + } + + private String render(String string, Matcher matcher, String matched) { + string = string.replaceAll("\\$\\{PATTERN_GROUP\\}", matched); + for (int i = 0; i <= matcher.groupCount(); i++) { + string = string.replaceAll("\\$\\{PATTERN_GROUP_" + i + "\\}", firstNonNull(matcher.group(i), "")); + } + return string; } } diff --git a/src/main/java/se/bjurr/gitchangelog/internal/model/ParsedIssue.java b/src/main/java/se/bjurr/gitchangelog/internal/model/ParsedIssue.java index 1a05b82e..53091b0c 100644 --- a/src/main/java/se/bjurr/gitchangelog/internal/model/ParsedIssue.java +++ b/src/main/java/se/bjurr/gitchangelog/internal/model/ParsedIssue.java @@ -26,7 +26,7 @@ public ParsedIssue(String name, String issue, String link) { this.link = link; } - public ParsedIssue(String name, String title, String issue, String link) { + public ParsedIssue(String name, String issue, String link, String title) { this.name = checkNotNull(name, "name"); this.title = emptyToNull(title); this.issue = issue; diff --git a/src/main/java/se/bjurr/gitchangelog/internal/model/Transformer.java b/src/main/java/se/bjurr/gitchangelog/internal/model/Transformer.java index 6520bf83..a3c06c5f 100644 --- a/src/main/java/se/bjurr/gitchangelog/internal/model/Transformer.java +++ b/src/main/java/se/bjurr/gitchangelog/internal/model/Transformer.java @@ -4,20 +4,24 @@ import static com.google.common.collect.Iterables.transform; import static com.google.common.collect.Lists.newArrayList; import static com.google.common.collect.Lists.transform; +import static com.google.common.collect.Maps.newTreeMap; import static com.google.common.collect.Multimaps.index; import static java.util.TimeZone.getTimeZone; import static java.util.regex.Pattern.compile; import static se.bjurr.gitchangelog.internal.common.GitPredicates.ignoreCommits; import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.List; +import java.util.Map; import java.util.regex.Matcher; import se.bjurr.gitchangelog.api.model.Author; import se.bjurr.gitchangelog.api.model.Commit; import se.bjurr.gitchangelog.api.model.Issue; +import se.bjurr.gitchangelog.api.model.IssueType; import se.bjurr.gitchangelog.api.model.Tag; import se.bjurr.gitchangelog.internal.git.model.GitCommit; import se.bjurr.gitchangelog.internal.git.model.GitTag; @@ -47,10 +51,10 @@ public Tag apply(GitTag input) { List gitCommits = input.getGitCommits(); List commits = toCommits(gitCommits); List authors = toAuthors(gitCommits); - List parsedIssues; - parsedIssues = new IssueParser(settings, gitCommits).parseForIssues(); + List parsedIssues = new IssueParser(settings, gitCommits).parseForIssues(); List issues = toIssues(parsedIssues); - return new Tag(toReadableTagName(input.getName()), commits, authors, issues); + List issueTypes = toIssueTypes(parsedIssues); + return new Tag(toReadableTagName(input.getName()), commits, authors, issues, issueTypes); } }); @@ -87,14 +91,23 @@ public Commit apply(GitCommit c) { } public List toIssues(List issues) { + Iterable issuesWithCommits = filterWithCommits(issues); + + return newArrayList(transform(issuesWithCommits, parsedIssueToIssue())); + } + + private Iterable filterWithCommits(List issues) { Iterable issuesWithCommits = filter(issues, new Predicate() { @Override public boolean apply(ParsedIssue input) { return !toCommits(input.getGitCommits()).isEmpty(); } }); + return issuesWithCommits; + } - return newArrayList(transform(issuesWithCommits, new Function() { + private Function parsedIssueToIssue() { + return new Function() { @Override public Issue apply(ParsedIssue input) { List gitCommits = input.getGitCommits(); @@ -106,7 +119,7 @@ public Issue apply(ParsedIssue input) { input.getIssue(), // input.getLink()); } - })); + }; } private Commit toCommit(GitCommit gitCommit) { @@ -166,4 +179,23 @@ public Author apply(String input) { } })); } + + public List toIssueTypes(List issues) { + Map> issuesPerName = newTreeMap(); + + for (ParsedIssue parsedIssue : filterWithCommits(issues)) { + if (!issuesPerName.containsKey(parsedIssue.getName())) { + issuesPerName.put(parsedIssue.getName(), new ArrayList()); + } + Issue transformedIssues = parsedIssueToIssue().apply(parsedIssue); + issuesPerName.get(parsedIssue.getName())// + .add(transformedIssues); + } + + List issueTypes = newArrayList(); + for (String name : issuesPerName.keySet()) { + issueTypes.add(new IssueType(issuesPerName.get(name), name)); + } + return issueTypes; + } } diff --git a/src/main/java/se/bjurr/gitchangelog/internal/settings/IssuesUtil.java b/src/main/java/se/bjurr/gitchangelog/internal/settings/IssuesUtil.java index f50b31e0..ba770f1b 100644 --- a/src/main/java/se/bjurr/gitchangelog/internal/settings/IssuesUtil.java +++ b/src/main/java/se/bjurr/gitchangelog/internal/settings/IssuesUtil.java @@ -24,7 +24,7 @@ public List getIssues() { private void addGitHub(List issues) { if (!isNullOrEmpty(settings.getGitHubIssuePattern())) { if (settings.getGitHubApi().isPresent()) { - issues.add(new SettingsIssue(GITHUB, "GitHub", settings.getGitHubIssuePattern(), null)); + issues.add(new SettingsIssue(GITHUB, "GitHub", settings.getGitHubIssuePattern(), null, null)); } } } @@ -33,9 +33,10 @@ private void addJira(List issues) { if (!isNullOrEmpty(settings.getJiraIssuePattern())) { if (settings.getJiraServer().isPresent()) { issues.add(new SettingsIssue(JIRA, "Jira", settings.getJiraIssuePattern(), settings.getJiraServer().or("") - + "/browse/${PATTERN_GROUP}")); + + "/browse/${PATTERN_GROUP}", null)); } else { - issues.add(new SettingsIssue(JIRA, "Jira", settings.getJiraIssuePattern(), settings.getJiraServer().orNull())); + issues + .add(new SettingsIssue(JIRA, "Jira", settings.getJiraIssuePattern(), settings.getJiraServer().orNull(), null)); } } } diff --git a/src/main/java/se/bjurr/gitchangelog/internal/settings/SettingsIssue.java b/src/main/java/se/bjurr/gitchangelog/internal/settings/SettingsIssue.java index 079c3cf0..f167a9d7 100644 --- a/src/main/java/se/bjurr/gitchangelog/internal/settings/SettingsIssue.java +++ b/src/main/java/se/bjurr/gitchangelog/internal/settings/SettingsIssue.java @@ -17,6 +17,11 @@ public class SettingsIssue { * "GitHub" or "JIRA". */ private final String name; + /** + * Title of the issues. Optional and can, for example, be used when when + * grouping issues per issue type. + */ + private final String title; /** * Regular expression that is evaluated in commit comment. If true, the commit * is available in {@link Issue#getCommits()}. @@ -29,18 +34,20 @@ public class SettingsIssue { */ private final String link; - public SettingsIssue(String name, String pattern, String link) { + public SettingsIssue(String name, String pattern, String link, String title) { this.type = CUSTOM; this.name = checkNotNull(name, "name"); this.pattern = checkNotNull(pattern, "pattern"); this.link = link; + this.title = title; } - public SettingsIssue(SettingsIssueType type, String name, String pattern, String link) { + public SettingsIssue(SettingsIssueType type, String name, String pattern, String link, String title) { this.type = checkNotNull(type, "type"); this.name = checkNotNull(name, "name"); this.pattern = checkNotNull(pattern, "pattern"); this.link = link; + this.title = title; } public SettingsIssueType getType() { @@ -51,6 +58,10 @@ public Optional getLink() { return fromNullable(link); } + public Optional getTitle() { + return fromNullable(title); + } + public String getName() { return name; } diff --git a/src/test/java/se/bjurr/gitchangelog/api/GitChangelogApiAsserter.java b/src/test/java/se/bjurr/gitchangelog/api/GitChangelogApiAsserter.java index 67cd89f0..175f8e63 100644 --- a/src/test/java/se/bjurr/gitchangelog/api/GitChangelogApiAsserter.java +++ b/src/test/java/se/bjurr/gitchangelog/api/GitChangelogApiAsserter.java @@ -68,9 +68,9 @@ public void rendersTo(String file) throws Exception { .withJiraPassword("code") // .withGitHubApi("https://api.github.com/repos/tomasbjerre/git-changelog-lib") // .withGitHubIssuePattern("#([0-9]+)") // - .withCustomIssue("Incident", "INC[0-9]*", "http://inc/${PATTERN_GROUP}") // - .withCustomIssue("CQ", "CQ([0-9]+)", "http://cq/${PATTERN_GROUP_1}") // - .withCustomIssue("Bugs", "#bug", null) // + .withCustomIssue("Incident", "INC[0-9]*", "http://inc/${PATTERN_GROUP}", "${PATTERN_GROUP}") // + .withCustomIssue("CQ", "CQ([0-9]+)", "http://cq/${PATTERN_GROUP_1}", "${PATTERN_GROUP_1}") // + .withCustomIssue("Bugs", "#bug", null, "Mixed bugs") // .withTemplatePath(templatePath) // .render() // .trim()); diff --git a/src/test/java/se/bjurr/gitchangelog/api/TemplatesTest.java b/src/test/java/se/bjurr/gitchangelog/api/TemplatesTest.java index 2ea934f8..b5278444 100644 --- a/src/test/java/se/bjurr/gitchangelog/api/TemplatesTest.java +++ b/src/test/java/se/bjurr/gitchangelog/api/TemplatesTest.java @@ -5,6 +5,7 @@ import static se.bjurr.gitchangelog.api.GitChangelogApiAsserter.assertThat; import static se.bjurr.gitchangelog.internal.integrations.rest.RestClient.mock; +import org.junit.Before; import org.junit.Test; import se.bjurr.gitchangelog.internal.integrations.github.GitHubMockInterceptor; @@ -15,6 +16,30 @@ import com.google.common.io.Resources; public class TemplatesTest { + @Before + public void before() throws Exception { + JiraClientFactory.reset(); + + RestClientMock mockedRestClient = new RestClientMock(); + mockedRestClient // + .addMockedResponse("/repos/tomasbjerre/git-changelog-lib/issues?state=all", + Resources.toString(getResource("github-issues.json"), UTF_8)) // + .addMockedResponse("/jira/rest/api/2/issue/JIR-1234?fields=parent,summary", + Resources.toString(getResource("jira-issue-jir-1234.json"), UTF_8)) // + .addMockedResponse("/jira/rest/api/2/issue/JIR-5262?fields=parent,summary", + Resources.toString(getResource("jira-issue-jir-5262.json"), UTF_8)); + mock(mockedRestClient); + + GitHubMockInterceptor gitHubMockInterceptor = new GitHubMockInterceptor(); + gitHubMockInterceptor.addMockedResponse( + "https://api.github.com/repos/tomasbjerre/git-changelog-lib/issues?state=all&per_page=100&page=1", + Resources.toString(getResource("github-issues.json"), UTF_8)); + + GitHubServiceFactory.reset(); + GitHubServiceFactory.getGitHubService("https://api.github.com/repos/tomasbjerre/git-changelog-lib", null, + gitHubMockInterceptor); + } + @Test public void testTagsIssuesAuthorsCommits() throws Exception { test("testTagsIssuesAuthorsCommits"); @@ -45,6 +70,16 @@ public void testIssuesCommits() throws Exception { test("testIssuesCommits"); } + @Test + public void testIssueTypesIssuesCommits() throws Exception { + test("testIssueTypesIssuesCommits"); + } + + @Test + public void testIssueTitles() throws Exception { + test("testIssueTitles"); + } + @Test public void testIssuesAuthorsCommits() throws Exception { test("testIssuesAuthorsCommits"); @@ -56,27 +91,6 @@ public void testAuthorsCommits() throws Exception { } private void test(String testcase) throws Exception { - JiraClientFactory.reset(); - - RestClientMock mockedRestClient = new RestClientMock(); - mockedRestClient // - .addMockedResponse("/repos/tomasbjerre/git-changelog-lib/issues?state=all", - Resources.toString(getResource("github-issues.json"), UTF_8)) // - .addMockedResponse("/jira/rest/api/2/issue/JIR-1234?fields=parent,summary", - Resources.toString(getResource("jira-issue-jir-1234.json"), UTF_8)) // - .addMockedResponse("/jira/rest/api/2/issue/JIR-5262?fields=parent,summary", - Resources.toString(getResource("jira-issue-jir-5262.json"), UTF_8)); - mock(mockedRestClient); - - GitHubMockInterceptor gitHubMockInterceptor = new GitHubMockInterceptor(); - gitHubMockInterceptor - .addMockedResponse("https://api.github.com/repos/tomasbjerre/git-changelog-lib/issues?state=all&per_page=100&page=1", - Resources.toString(getResource("github-issues.json"), UTF_8)); - - GitHubServiceFactory.reset(); - GitHubServiceFactory.getGitHubService("https://api.github.com/repos/tomasbjerre/git-changelog-lib", null, - gitHubMockInterceptor); - assertThat(testcase + ".mustache")// .rendersTo(testcase + ".md"); } diff --git a/src/test/java/se/bjurr/gitchangelog/internal/model/TransformerTest.java b/src/test/java/se/bjurr/gitchangelog/internal/model/TransformerTest.java index d745e324..a4b2b81b 100644 --- a/src/test/java/se/bjurr/gitchangelog/internal/model/TransformerTest.java +++ b/src/test/java/se/bjurr/gitchangelog/internal/model/TransformerTest.java @@ -21,7 +21,7 @@ public class TransformerTest { @Before public void before() { noIssues = newArrayList(); - SettingsIssue issue1 = new SettingsIssue("Issue Name", "INC[0-9]*", "http://inc/${PATTERN_GROUP}"); + SettingsIssue issue1 = new SettingsIssue("Issue Name", "INC[0-9]*", "http://inc/${PATTERN_GROUP}", null); oneIssue = newArrayList(issue1); transformer = new Transformer(new Settings()); } diff --git a/src/test/resources/assertions/testIssueTitles.md b/src/test/resources/assertions/testIssueTitles.md new file mode 100644 index 00000000..b6157919 --- /dev/null +++ b/src/test/resources/assertions/testIssueTitles.md @@ -0,0 +1,9 @@ +Bugs Mixed bugs +CQ 1234 +GitHub Strange chars in PULL_REQUEST_URL +GitHub Parameterized Jenkins' job error +GitHub Enable configuration in per-repository hook screen +GitHub +Jira Title of jira 1234 +Jira The Title of jira 5262 +No issue supplied \ No newline at end of file diff --git a/src/test/resources/assertions/testIssueTypesIssuesCommits.md b/src/test/resources/assertions/testIssueTypesIssuesCommits.md new file mode 100644 index 00000000..c76306ad --- /dev/null +++ b/src/test/resources/assertions/testIssueTypesIssuesCommits.md @@ -0,0 +1,118 @@ +# Git Changelog changelog + +Changelog of Git Changelog. + +## No tag +### Bugs + +#### Mixed bugs + + +**More stuff tagged with bug** + + +[8e71933b792a8d2](https://github.com/tomasbjerre/git-changelog-lib/commit/8e71933b792a8d2) Tomas Bjerre *2016-02-15 16:30:35* + +### GitHub +#### [#20](https://github.com/tomasbjerre/pull-request-notifier-for-bitbucket/issues/20) Parameterized Jenkins' job error + + + +**Multiple issues** + + +[51db3e296e979d8](https://github.com/tomasbjerre/git-changelog-lib/commit/51db3e296e979d8) Tomas Bjerre *2016-02-19 21:50:12* + +#### [#25](https://github.com/tomasbjerre/pull-request-notifier-for-bitbucket/issues/25) Enable configuration in per-repository hook screen + + + +**Multiple issues** + + +[51db3e296e979d8](https://github.com/tomasbjerre/git-changelog-lib/commit/51db3e296e979d8) Tomas Bjerre *2016-02-19 21:50:12* + + + + +**Adding stuff** + + * with gh again + +[5607ea23fa8aaf7](https://github.com/tomasbjerre/git-changelog-lib/commit/5607ea23fa8aaf7) Tomas Bjerre *2016-02-15 16:30:35* + +### Jira +#### [JIR-1234](https://jiraserver/jira/browse/) Title of jira 1234 + + + +**Adding stuff with a jira** + + +[cc0fbbd8bc63955](https://github.com/tomasbjerre/git-changelog-lib/commit/cc0fbbd8bc63955) Tomas Bjerre *2016-02-15 16:30:35* + +## test-lightweight-2 +### CQ +#### [CQ1234](http://cq/1234) 1234 + + + +**Adding cq stuff with CQ** + + +[a9bd03b34b255ff](https://github.com/tomasbjerre/git-changelog-lib/commit/a9bd03b34b255ff) Tomas Bjerre *2016-02-15 16:30:35* + +## test-1.0 +### GitHub +#### [#12](https://github.com/tomasbjerre/pull-request-notifier-for-bitbucket/issues/12) Strange chars in PULL_REQUEST_URL + + + +**Adding stuff gh 12** + + +[d50a3e332f9fcba](https://github.com/tomasbjerre/git-changelog-lib/commit/d50a3e332f9fcba) Tomas Bjerre *2016-02-15 16:30:35* + +#### [#20](https://github.com/tomasbjerre/pull-request-notifier-for-bitbucket/issues/20) Parameterized Jenkins' job error + + + +**Adding stuff with gh 20** + + +[326d4d01c0a9415](https://github.com/tomasbjerre/git-changelog-lib/commit/326d4d01c0a9415) T B *2016-02-15 16:11:12* + +### Jira +#### [JIR-5262](https://jiraserver/jira/browse/) The Title of jira 5262 + + + +**Adding stuff with a jira** + + +[071a14f29020758](https://github.com/tomasbjerre/git-changelog-lib/commit/071a14f29020758) Tomas Bjerre *2016-02-15 16:12:02* + +### No issue supplied + + +These commits has no issue. + +**This is 1.0 tagged commit** + + +[3f62b35d1317311](https://github.com/tomasbjerre/git-changelog-lib/commit/3f62b35d1317311) Tomas Bjerre *2016-02-15 16:30:35* + +**Adding stuff, no issue** + + +[71d845c18924504](https://github.com/tomasbjerre/git-changelog-lib/commit/71d845c18924504) T B *2016-02-15 16:30:25* + +**Adding stuff without issue** + + +[7cd30508cecdc5b](https://github.com/tomasbjerre/git-changelog-lib/commit/7cd30508cecdc5b) Tomas Bjerre *2016-02-15 16:09:35* + +**Initial commit** + + +[a1aa5ff5b625e63](https://github.com/tomasbjerre/git-changelog-lib/commit/a1aa5ff5b625e63) Tomas Bjerre *2015-11-12 05:29:31* \ No newline at end of file diff --git a/src/test/resources/assertions/testIssuesAuthorsCommits.md b/src/test/resources/assertions/testIssuesAuthorsCommits.md index f0e89abe..6fc4a0ec 100644 --- a/src/test/resources/assertions/testIssuesAuthorsCommits.md +++ b/src/test/resources/assertions/testIssuesAuthorsCommits.md @@ -2,13 +2,13 @@ Changelog of Git Changelog. -## Bugs +## Bugs Mixed bugs ### Tomas Bjerre 2016-02-15 16:30:35 More stuff tagged with bug -## CQ [CQ1234](http://cq/1234) +## CQ [CQ1234](http://cq/1234) 1234 ### Tomas Bjerre 2016-02-15 16:30:35 Adding cq stuff with CQ diff --git a/src/test/resources/assertions/testIssuesCommits.md b/src/test/resources/assertions/testIssuesCommits.md index 379ba038..fcdeae50 100644 --- a/src/test/resources/assertions/testIssuesCommits.md +++ b/src/test/resources/assertions/testIssuesCommits.md @@ -2,14 +2,14 @@ Changelog of Git Changelog. -## Bugs +## Bugs Mixed bugs ### Tomas Bjerre - 2016-02-15 16:30:35 [8e71933b792a8d2](https://server/8e71933b792a8d2) More stuff tagged with bug -## CQ [CQ1234](http://cq/1234) +## CQ [CQ1234](http://cq/1234) 1234 ### Tomas Bjerre - 2016-02-15 16:30:35 [a9bd03b34b255ff](https://server/a9bd03b34b255ff) diff --git a/src/test/resources/assertions/testTagsIssuesAuthorsCommits.md b/src/test/resources/assertions/testTagsIssuesAuthorsCommits.md index d6988576..7a14fe0c 100644 --- a/src/test/resources/assertions/testTagsIssuesAuthorsCommits.md +++ b/src/test/resources/assertions/testTagsIssuesAuthorsCommits.md @@ -3,7 +3,7 @@ Changelog of Git Changelog. ## No tag -### Bugs +### Bugs Mixed bugs * Tomas Bjerre [8e71933b792a8d2](https://server/8e71933b792a8d2) *2016-02-15 16:30:35* More stuff tagged with bug @@ -35,7 +35,7 @@ Adding stuff with a jira ## test-lightweight-2 -### CQ [CQ1234](http://cq/1234) +### CQ [CQ1234](http://cq/1234) 1234 * Tomas Bjerre [a9bd03b34b255ff](https://server/a9bd03b34b255ff) *2016-02-15 16:30:35* Adding cq stuff with CQ diff --git a/src/test/resources/assertions/testTagsIssuesCommits.md b/src/test/resources/assertions/testTagsIssuesCommits.md index 043a162b..40b046a2 100644 --- a/src/test/resources/assertions/testTagsIssuesCommits.md +++ b/src/test/resources/assertions/testTagsIssuesCommits.md @@ -3,7 +3,7 @@ Changelog of Git Changelog. ## No tag -### Bugs +### Bugs Mixed bugs [8e71933b792a8d2](https://server/8e71933b792a8d2) 2016-02-15 16:30:35 More stuff tagged with bug @@ -25,7 +25,7 @@ Adding stuff Adding stuff with a jira ## test-lightweight-2 -### CQ [CQ1234](http://cq/1234) +### CQ [CQ1234](http://cq/1234) 1234 [a9bd03b34b255ff](https://server/a9bd03b34b255ff) 2016-02-15 16:30:35 Adding cq stuff with CQ diff --git a/src/test/resources/assertions/testThatIssuesCanBeRemoved.md b/src/test/resources/assertions/testThatIssuesCanBeRemoved.md index 379ba038..fcdeae50 100644 --- a/src/test/resources/assertions/testThatIssuesCanBeRemoved.md +++ b/src/test/resources/assertions/testThatIssuesCanBeRemoved.md @@ -2,14 +2,14 @@ Changelog of Git Changelog. -## Bugs +## Bugs Mixed bugs ### Tomas Bjerre - 2016-02-15 16:30:35 [8e71933b792a8d2](https://server/8e71933b792a8d2) More stuff tagged with bug -## CQ [CQ1234](http://cq/1234) +## CQ [CQ1234](http://cq/1234) 1234 ### Tomas Bjerre - 2016-02-15 16:30:35 [a9bd03b34b255ff](https://server/a9bd03b34b255ff) diff --git a/src/test/resources/settings/git-changelog-test-settings.json b/src/test/resources/settings/git-changelog-test-settings.json index 0633b359..1a6c2c04 100644 --- a/src/test/resources/settings/git-changelog-test-settings.json +++ b/src/test/resources/settings/git-changelog-test-settings.json @@ -21,8 +21,8 @@ "gitHubIssuePattern": "#([0-9]+)", "customIssues": [ - { "name": "Incident", "pattern": "INC[0-9]*", "link": "http://inc/${PATTERN_GROUP}" }, - { "name": "CQ", "pattern": "CQ([0-9]+)", "link": "http://cq/${PATTERN_GROUP_1}" }, - { "name": "Bugs", "pattern": "#bug" } + { "name": "Incidents", title: "${PATTERN_GROUP_1}", "pattern": "INC([0-9]*)", "link": "http://inc/${PATTERN_GROUP}" }, + { "name": "CQ", title: "${PATTERN_GROUP_1}", "pattern": "CQ([0-9]+)", "link": "http://cq/${PATTERN_GROUP_1}" }, + { "name": "Bugs", title: "Mixed bugs", "pattern": "#bug" } ] } diff --git a/src/test/resources/templates/testIssueTitles.mustache b/src/test/resources/templates/testIssueTitles.mustache new file mode 100644 index 00000000..61eea25d --- /dev/null +++ b/src/test/resources/templates/testIssueTitles.mustache @@ -0,0 +1,3 @@ +{{#issues}} +{{name}} {{title}} +{{/issues}} diff --git a/src/test/resources/templates/testIssueTypesIssuesCommits.mustache b/src/test/resources/templates/testIssueTypesIssuesCommits.mustache new file mode 100644 index 00000000..600142b7 --- /dev/null +++ b/src/test/resources/templates/testIssueTypesIssuesCommits.mustache @@ -0,0 +1,41 @@ +# Git Changelog changelog + +Changelog of Git Changelog. + +{{#tags}} +## {{name}} + {{#issueTypes}} +### {{name}} + {{#issues}} + {{#hasTitle}} + {{#hasLink}} +#### [{{issue}}]({{link}}) {{title}} + {{/hasLink}} + {{/hasTitle}} + + {{#hasTitle}} + {{^hasLink}} +#### {{title}} + {{/hasLink}} + {{/hasTitle}} + + {{^hasTitle}} + {{^hasIssue}} +These commits has no issue. + {{/hasIssue}} + {{/hasTitle}} + + {{#commits}} +**{{{messageTitle}}}** + + {{#messageBodyItems}} + * {{.}} + {{/messageBodyItems}} + +[{{hash}}](https://github.com/tomasbjerre/git-changelog-lib/commit/{{hash}}) {{authorName}} *{{commitTime}}* + + {{/commits}} + {{/issues}} + {{/issueTypes}} +{{/tags}} + \ No newline at end of file