Skip to content

Commit 997c53e

Browse files
committed
Merge branch 'master' into feature/netstandard2
2 parents f347761 + 5b04e97 commit 997c53e

File tree

1 file changed

+222
-0
lines changed

1 file changed

+222
-0
lines changed
Lines changed: 222 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,222 @@
1+
using GitVersion;
2+
using NUnit.Framework;
3+
using Shouldly;
4+
using System;
5+
6+
namespace GitVersionCore.Tests
7+
{
8+
[TestFixture]
9+
public class MergeMessageTests : TestBase
10+
{
11+
private readonly Config _config = new Config { TagPrefix = "[vV]" };
12+
13+
[Test]
14+
public void NullMessageStringThrows()
15+
{
16+
// Act / Assert
17+
Should.Throw<NullReferenceException>(() => new MergeMessage(null, _config));
18+
}
19+
20+
[TestCase("")]
21+
[TestCase("\t\t ")]
22+
public void EmptyMessageString(string message)
23+
{
24+
// Act
25+
var sut = new MergeMessage(message, _config);
26+
27+
// Assert
28+
sut.TargetBranch.ShouldBeNull();
29+
sut.MergedBranch.ShouldBeEmpty();
30+
sut.IsMergedPullRequest.ShouldBeFalse();
31+
sut.PullRequestNumber.ShouldBeNull();
32+
sut.Version.ShouldBeNull();
33+
}
34+
35+
[TestCase("")]
36+
[TestCase("\t\t ")]
37+
[TestCase(null)]
38+
public void EmptyTagPrefix(string prefix)
39+
{
40+
// Arrange
41+
var message = "Updated some code.";
42+
var config = new Config { TagPrefix = prefix };
43+
44+
// Act
45+
var sut = new MergeMessage(message, config);
46+
47+
// Assert
48+
sut.TargetBranch.ShouldBeNull();
49+
sut.MergedBranch.ShouldBeEmpty();
50+
sut.IsMergedPullRequest.ShouldBeFalse();
51+
sut.PullRequestNumber.ShouldBeNull();
52+
sut.Version.ShouldBeNull();
53+
}
54+
55+
private static readonly object[] MergeMessages =
56+
{
57+
new object[] { "Merge branch 'feature/one'", "feature/one", null, null },
58+
new object[] { "Merge branch 'origin/feature/one'", "origin/feature/one", null, null },
59+
new object[] { "Merge tag 'v4.0.0' into master", "v4.0.0", "master", new SemanticVersion(4) },
60+
new object[] { "Merge tag 'V4.0.0' into master", "V4.0.0", "master", new SemanticVersion(4) },
61+
new object[] { "Merge branch 'feature/4.1/one'", "feature/4.1/one", null, new SemanticVersion(4, 1) },
62+
new object[] { "Merge branch 'origin/4.1/feature/one'", "origin/4.1/feature/one", null, new SemanticVersion(4, 1) },
63+
new object[] { "Merge tag 'v://10.10.10.10' into master", "v://10.10.10.10", "master", null }
64+
65+
};
66+
67+
[TestCaseSource(nameof(MergeMessages))]
68+
public void ParsesMergeMessage(
69+
string message,
70+
string expectedMergedBranch,
71+
string expectedTargetBranch,
72+
SemanticVersion expectedVersion)
73+
{
74+
// Act
75+
var sut = new MergeMessage(message, _config);
76+
77+
// Assert
78+
sut.TargetBranch.ShouldBe(expectedTargetBranch);
79+
sut.MergedBranch.ShouldBe(expectedMergedBranch);
80+
sut.IsMergedPullRequest.ShouldBeFalse();
81+
sut.PullRequestNumber.ShouldBeNull();
82+
sut.Version.ShouldBe(expectedVersion);
83+
}
84+
85+
private static readonly object[] GitHubPullPullMergeMessages =
86+
{
87+
new object[] { "Merge pull request #1234 from feature/one", "feature/one", null, null, 1234 },
88+
new object[] { "Merge pull request #1234 in feature/one", "feature/one", null, null, 1234 },
89+
new object[] { "Merge pull request #1234 in v4.0.0", "v4.0.0", null, new SemanticVersion(4), 1234 },
90+
new object[] { "Merge pull request #1234 in V4.0.0", "V4.0.0", null, new SemanticVersion(4), 1234 },
91+
new object[] { "Merge pull request #1234 from origin/feature/one", "origin/feature/one", null, null, 1234 },
92+
new object[] { "Merge pull request #1234 in feature/4.1/one", "feature/4.1/one", null, new SemanticVersion(4,1), 1234 },
93+
new object[] { "Merge pull request #1234 in V://10.10.10.10", "V://10.10.10.10", null, null, 1234 },
94+
95+
96+
//TODO: Investigate successful github merge messages that may be invalid
97+
// Should an empty PR number be valid?
98+
new object[] { "Merge pull request # from feature/one", "feature/one", null, null, 0 },
99+
// The branch name appears to be incorrect
100+
new object[] { "Merge pull request #1234 from feature/one into dev", "feature/one into dev", "dev", null, 1234 },
101+
};
102+
103+
[TestCaseSource(nameof(GitHubPullPullMergeMessages))]
104+
public void ParsesGitHubPullMergeMessage(
105+
string message,
106+
string expectedMergedBranch,
107+
string expectedTargetBranch,
108+
SemanticVersion expectedVersion,
109+
int? expectedPullRequestNumber)
110+
{
111+
// Act
112+
var sut = new MergeMessage(message, _config);
113+
114+
// Assert
115+
sut.TargetBranch.ShouldBe(expectedTargetBranch);
116+
sut.MergedBranch.ShouldBe(expectedMergedBranch);
117+
sut.IsMergedPullRequest.ShouldBeTrue();
118+
sut.PullRequestNumber.ShouldBe(expectedPullRequestNumber);
119+
sut.Version.ShouldBe(expectedVersion);
120+
}
121+
122+
private static readonly object[] BitBucketPullMergeMessages =
123+
{
124+
new object[] { "Merge pull request #1234 from feature/one from feature/two to dev", "feature/two", null, null, 1234 },
125+
new object[] { "Merge pull request #1234 in feature/one from feature/two to dev", "feature/two", null, null, 1234 },
126+
new object[] { "Merge pull request #1234 in v4.0.0 from v4.1.0 to dev", "v4.1.0", null, new SemanticVersion(4,1), 1234 },
127+
new object[] { "Merge pull request #1234 in V4.0.0 from V4.1.0 to dev", "V4.1.0", null, new SemanticVersion(4,1), 1234 },
128+
new object[] { "Merge pull request #1234 from origin/feature/one from origin/feature/4.2/two to dev", "origin/feature/4.2/two", null, new SemanticVersion(4,2), 1234 },
129+
new object[] { "Merge pull request #1234 in feature/4.1/one from feature/4.2/two to dev", "feature/4.2/two", null, new SemanticVersion(4,2), 1234 },
130+
new object[] { "Merge pull request #1234 in feature/4.1/one from feature/4.2/two to dev into master", "feature/4.2/two", "master", new SemanticVersion(4,2), 1234 },
131+
new object[] { "Merge pull request #1234 in V4.1.0 from V://10.10.10.10 to dev", "V://10.10.10.10", null, null, 1234 },
132+
//TODO: Investigate successful bitbucket merge messages that may be invalid
133+
// Regex has double 'from/in from' section. Is that correct?
134+
new object[] { "Merge pull request #1234 in feature/4.1/one from feature/4.2/two to dev", "feature/4.2/two", null, new SemanticVersion(4,2), 1234 },
135+
new object[] { "Merge pull request #1234 from feature/one from v4.0.0 to master", "v4.0.0", null, new SemanticVersion(4), 1234 },
136+
// target branch is not resolved from targetbranch group
137+
new object[] { "Merge pull request #1234 from feature/one from feature/two to master" , "feature/two", null, null, 1234 },
138+
// Should an empty PR number be valid?
139+
new object[] { "Merge pull request # in feature/one from feature/two to master" , "feature/two", null, null, 0 }
140+
};
141+
142+
[TestCaseSource(nameof(BitBucketPullMergeMessages))]
143+
public void ParsesBitBucketPullMergeMessage(
144+
string message,
145+
string expectedMergedBranch,
146+
string expectedTargetBranch,
147+
SemanticVersion expectedVersion,
148+
int? expectedPullRequestNumber)
149+
{
150+
// Act
151+
var sut = new MergeMessage(message, _config);
152+
153+
// Assert
154+
sut.TargetBranch.ShouldBe(expectedTargetBranch);
155+
sut.MergedBranch.ShouldBe(expectedMergedBranch);
156+
sut.IsMergedPullRequest.ShouldBeTrue();
157+
sut.PullRequestNumber.ShouldBe(expectedPullRequestNumber);
158+
sut.Version.ShouldBe(expectedVersion);
159+
}
160+
161+
private static readonly object[] SmartGitMergeMessages =
162+
{
163+
new object[] { "Finish feature/one", "feature/one", null, null },
164+
new object[] { "Finish origin/feature/one", "origin/feature/one", null, null },
165+
new object[] { "Finish v4.0.0", "v4.0.0", null, new SemanticVersion(4) },
166+
new object[] { "Finish feature/4.1/one", "feature/4.1/one", null, new SemanticVersion(4, 1) },
167+
new object[] { "Finish origin/4.1/feature/one", "origin/4.1/feature/one", null, new SemanticVersion(4, 1) },
168+
new object[] { "Finish V://10.10.10.10", "V://10.10.10.10", null, null },
169+
170+
//TODO: Investigate successful smart git merge messages that may be invalid
171+
// The branch name appears to be incorrect
172+
new object[] { "Finish V4.0.0 into master", "V4.0.0 into master", "master", new SemanticVersion(4) }
173+
};
174+
175+
[TestCaseSource(nameof(SmartGitMergeMessages))]
176+
public void ParsesSmartGitMergeMessage(
177+
string message,
178+
string expectedMergedBranch,
179+
string expectedTargetBranch,
180+
SemanticVersion expectedVersion)
181+
{
182+
// Act
183+
var sut = new MergeMessage(message, _config);
184+
185+
// Assert
186+
sut.TargetBranch.ShouldBe(expectedTargetBranch);
187+
sut.MergedBranch.ShouldBe(expectedMergedBranch);
188+
sut.IsMergedPullRequest.ShouldBeFalse();
189+
sut.PullRequestNumber.ShouldBeNull();
190+
sut.Version.ShouldBe(expectedVersion);
191+
}
192+
193+
private static readonly object[] RemoteTrackingMergeMessages =
194+
{
195+
new object[] { "Merge remote-tracking branch 'feature/one' into master", "feature/one", "master", null },
196+
new object[] { "Merge remote-tracking branch 'origin/feature/one' into dev", "origin/feature/one", "dev", null },
197+
new object[] { "Merge remote-tracking branch 'v4.0.0' into master", "v4.0.0", "master", new SemanticVersion(4) },
198+
new object[] { "Merge remote-tracking branch 'V4.0.0' into master", "V4.0.0", "master", new SemanticVersion(4) },
199+
new object[] { "Merge remote-tracking branch 'feature/4.1/one' into dev", "feature/4.1/one", "dev", new SemanticVersion(4, 1) },
200+
new object[] { "Merge remote-tracking branch 'origin/4.1/feature/one' into master", "origin/4.1/feature/one", "master", new SemanticVersion(4, 1) },
201+
new object[] { "Merge remote-tracking branch 'v://10.10.10.10' into master", "v://10.10.10.10", "master", null }
202+
};
203+
204+
[TestCaseSource(nameof(RemoteTrackingMergeMessages))]
205+
public void ParsesRemoteTrackingMergeMessage(
206+
string message,
207+
string expectedMergedBranch,
208+
string expectedTargetBranch,
209+
SemanticVersion expectedVersion)
210+
{
211+
// Act
212+
var sut = new MergeMessage(message, _config);
213+
214+
// Assert
215+
sut.TargetBranch.ShouldBe(expectedTargetBranch);
216+
sut.MergedBranch.ShouldBe(expectedMergedBranch);
217+
sut.IsMergedPullRequest.ShouldBeFalse();
218+
sut.PullRequestNumber.ShouldBeNull();
219+
sut.Version.ShouldBe(expectedVersion);
220+
}
221+
}
222+
}

0 commit comments

Comments
 (0)