diff --git a/dotnet-gitchanges.Tests/Readers/GitReaderTests.cs b/dotnet-gitchanges.Tests/Readers/GitReaderTests.cs index 61d1cae..68088e6 100644 --- a/dotnet-gitchanges.Tests/Readers/GitReaderTests.cs +++ b/dotnet-gitchanges.Tests/Readers/GitReaderTests.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using dotnet_gitchanges.Configuration; using LibGit2Sharp; using Moq; @@ -34,6 +35,65 @@ public void VerifyCacheIsLoadedFromRepository() repoMock.VerifyAll(); } + [Test] + public void VerifyUnreleasedCommitsHaveUnreleasedVersion() + { + var patterns = new ParsingPatterns + { + Reference = "reference:(.*)[\n]?", + Version = "version:(.*)[\n]?", + Tag = "tag:(.*)[\n]?" + }; + var expectedChanges = new List + { + new GitChange("Unreleased", "Added", "Some Unreleased Summary", DateTimeOffset.Now), + new GitChange("0.2.0", "Added", "Some Summary", DateTimeOffset.Now.AddDays(-1)), + new GitChange("0.1.0", "Removed", "Another Summary", DateTimeOffset.Now.AddDays(-2)) + }; + var repoMock = new Mock(); + var commitLog = Mock.Of(cl => cl.GetEnumerator() == MockCommitEnumerator(expectedChanges)); + var reader = new GitReader(repoMock.Object, patterns); + + repoMock.Setup(r => r.Commits).Returns(commitLog); + + Assert.That(reader.Changes(), Is.EquivalentTo(expectedChanges)); + repoMock.VerifyAll(); + } + + [Test] + public void VerifyReleasedCommitsWithUnreleasedInVersionHaveCorrectVersion() + { + var patterns = new ParsingPatterns + { + Reference = "reference:(.*)[\n]?", + Version = "version:(.*)[\n]?", + Tag = "tag:(.*)[\n]?" + }; + var today = DateTimeOffset.Now; + var yesterday = DateTimeOffset.Now.AddDays(-1); + var twoDaysAgo = DateTimeOffset.Now.AddDays(-2); + var changes = new List + { + new GitChange("0.2.0", "Added", "Some Summary", today), + new GitChange("Unreleased", "Added", "Some now released Summary", yesterday), + new GitChange("0.1.0", "Removed", "Another Summary", twoDaysAgo) + }; + var expectedChanges = new List + { + new GitChange("0.2.0", "Added", "Some Summary", today), + new GitChange("0.2.0", "Added", "Some now released Summary", yesterday), + new GitChange("0.1.0", "Removed", "Another Summary", twoDaysAgo) + }; + var repoMock = new Mock(); + var commitLog = Mock.Of(cl => cl.GetEnumerator() == MockCommitEnumerator(changes)); + var reader = new GitReader(repoMock.Object, patterns); + + repoMock.Setup(r => r.Commits).Returns(commitLog); + var actualChanges = reader.Changes().ToList(); + Assert.That(actualChanges, Is.EquivalentTo(expectedChanges)); + repoMock.VerifyAll(); + } + private static IEnumerator MockCommitEnumerator(IEnumerable expectedChanges) { foreach (var expectedChange in expectedChanges) diff --git a/dotnet-gitchanges/Readers/GitReader.cs b/dotnet-gitchanges/Readers/GitReader.cs index bac92b6..f4333ce 100644 --- a/dotnet-gitchanges/Readers/GitReader.cs +++ b/dotnet-gitchanges/Readers/GitReader.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; using dotnet_gitchanges.Configuration; @@ -8,8 +9,10 @@ namespace dotnet_gitchanges { public class GitReader : IRepositoryReader { + private const string Unreleased = "Unreleased"; private readonly IRepository _repository; private readonly ParsingPatterns _patterns; + private string _lastVersion = Unreleased; public GitReader(IRepository repository, ParsingPatterns patterns) { @@ -26,6 +29,15 @@ public IEnumerable Changes() var reference = GetMatchOrDefault(Regex.Match(commit.Message, _patterns.Reference)); var version = GetMatchOrDefault(Regex.Match(commit.Message, _patterns.Version)); var tag = GetMatchOrDefault(Regex.Match(commit.Message, _patterns.Tag)); + + if (string.Equals(version, Unreleased, StringComparison.CurrentCultureIgnoreCase)) + { + version = _lastVersion; + } + else + { + _lastVersion = version; + } yield return new GitChange(version, tag, commit.MessageShort, commit.Author.When, reference); } diff --git a/version.txt b/version.txt index b1e80bb..845639e 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.1.3 +0.1.4