Skip to content

Commit c9dbf82

Browse files
committed
(GH-140) Add integration to cover GRM cake aliases
Exercised the create and discard commands in GRM
1 parent aee0e8a commit c9dbf82

File tree

8 files changed

+336
-1
lines changed

8 files changed

+336
-1
lines changed

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,3 +323,7 @@ BuildArtifacts/*
323323
config.wyam.dll
324324
config.wyam.hash
325325
config.wyam.packages.xml
326+
327+
# Integration Tests
328+
tests/integration/tools
329+
tests/integration/output

recipe.cake

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@ BuildParameters.SetParameters(context: Context,
1111
repositoryName: "GitReleaseManager",
1212
appVeyorAccountName: "GitTools",
1313
shouldRunGitVersion: true,
14-
shouldRunDotNetCorePack: true);
14+
shouldRunDotNetCorePack: true,
15+
shouldRunIntegrationTests: true,
16+
integrationTestScriptPath: "./tests/integration/tests.cake");
1517

1618
BuildParameters.PackageSources.Add(new PackageSourceData(Context, "GPR", "https://nuget.pkg.github.com/GitTools/index.json", FeedType.NuGet, false));
1719

tests/integration/buildData.cake

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
public class BuildData
2+
{
3+
public string GitHubUsername { get; }
4+
public string GitHubPassword { get; }
5+
public string GitHubToken { get; }
6+
public string GitHubOwner { get; }
7+
public string GitHubRepository { get; }
8+
public string GrmMilestone { get; }
9+
10+
public BuildData(ICakeContext context)
11+
{
12+
if (context == null)
13+
{
14+
throw new ArgumentException(nameof(context));
15+
}
16+
17+
GitHubUsername = context.EnvironmentVariable("GITTOOLS_GITHUB_USERNAME");
18+
GitHubPassword = context.EnvironmentVariable("GITTOOLS_GITHUB_PASSWORD");
19+
GitHubToken = context.EnvironmentVariable("GITTOOLS_GITHUB_TOKEN");
20+
GitHubOwner = "gep13";
21+
GitHubRepository = "FakeRepository";
22+
GrmMilestone = "v0.1.2";
23+
}
24+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
## v0.1.2
2+
3+
4+
As part of this release we had [8 commits](https://github.com/gep13/FakeRepository/compare/v0.1.1...v0.1.2) which resulted in [1 issue](https://github.com/GitTools/FakeRepository/milestone/2?closed=1) being closed.
5+
6+
7+
__Bug__
8+
9+
- [__#3__](https://github.com/GitTools/FakeRepository/issues/3) Test
10+
11+
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
## v0.1.2
2+
3+
4+
As part of this release we had [8 commits](https://github.com/gep13/FakeRepository/compare/v0.1.1...v0.1.2) which resulted in [1 issue](https://github.com/GitTools/FakeRepository/milestone/2?closed=1) being closed.
5+
6+
7+
__Bug__
8+
9+
- [__#3__](https://github.com/GitTools/FakeRepository/issues/3) Test
10+
11+

tests/integration/tests.cake

Lines changed: 247 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,247 @@
1+
#load "buildData.cake"
2+
#load "xunit.cake"
3+
#load "utilities.cake"
4+
5+
var target = Argument<string>("target", "Run-All-Tests");
6+
7+
Setup<BuildData>(ctx =>
8+
{
9+
var buildDir = "../../BuildArtifacts/temp/_PublishedApplications";
10+
var grmExecutable = ctx.GetFiles(buildDir + "/**/*.exe").First();
11+
12+
ctx.Information("Registering Built GRM executable...");
13+
ctx.Tools.RegisterFile(grmExecutable);
14+
15+
CleanDirectory("./output");
16+
17+
return new BuildData(ctx);
18+
});
19+
20+
Task("Create-Release-With-Username-Password")
21+
.Does<BuildData>((data) =>
22+
{
23+
GitReleaseManagerCreate(
24+
data.GitHubUsername,
25+
data.GitHubPassword,
26+
data.GitHubOwner,
27+
data.GitHubRepository,
28+
new GitReleaseManagerCreateSettings {
29+
Milestone = data.GrmMilestone,
30+
TargetCommitish = "master"
31+
});
32+
});
33+
34+
Task("Create-Release-With-Token")
35+
.Does<BuildData>((data) =>
36+
{
37+
GitReleaseManagerCreate(
38+
data.GitHubToken,
39+
data.GitHubOwner,
40+
data.GitHubRepository,
41+
new GitReleaseManagerCreateSettings {
42+
Milestone = data.GrmMilestone,
43+
TargetCommitish = "master"
44+
});
45+
});
46+
47+
Task("Add-Asset-To-Release-With-Username-Password")
48+
.Does(() =>
49+
{
50+
// Without running something like Octokit directly against the draft release,
51+
// not sure how to verify that the assets get added as expected.
52+
});
53+
54+
Task("Add-Asset-To-Release-With-Token")
55+
.Does(() =>
56+
{
57+
// Without running something like Octokit directly against the draft release,
58+
// not sure how to verify that the assets get added as expected.
59+
});
60+
61+
Task("Export-Release-With-Username-Password")
62+
.Does<BuildData>((data) =>
63+
{
64+
GitReleaseManagerExport(
65+
data.GitHubToken,
66+
data.GitHubOwner,
67+
data.GitHubRepository,
68+
"./output/releasenotes-with-username-password.md",
69+
new GitReleaseManagerExportSettings {
70+
TagName = data.GrmMilestone
71+
});
72+
73+
// Then
74+
Assert.True(FileExists("./output/releasenotes-with-username-password.md"));
75+
Assert.True(FileHashEquals("./expected/releasenotes-with-username-password.md", "./output/releasenotes-with-username-password.md"));
76+
});
77+
78+
Task("Export-Release-With-Token")
79+
.Does<BuildData>((data) =>
80+
{
81+
GitReleaseManagerExport(
82+
data.GitHubUsername,
83+
data.GitHubPassword,
84+
data.GitHubOwner,
85+
data.GitHubRepository,
86+
"./output/releasenotes-with-token.md",
87+
new GitReleaseManagerExportSettings {
88+
TagName = data.GrmMilestone
89+
});
90+
91+
// Then
92+
Assert.True(FileExists("./output/releasenotes-with-token.md"));
93+
Assert.True(FileHashEquals("./expected/releasenotes-with-token.md", "./output/releasenotes-with-token.md"));
94+
});
95+
96+
Task("Close-Milestone-With-Username-Password")
97+
.Does<BuildData>((data) =>
98+
{
99+
GitReleaseManagerClose(
100+
data.GitHubUsername,
101+
data.GitHubPassword,
102+
data.GitHubOwner,
103+
data.GitHubRepository,
104+
data.GrmMilestone
105+
);
106+
});
107+
108+
Task("Close-Milestone-With-Token")
109+
.Does<BuildData>((data) =>
110+
{
111+
GitReleaseManagerClose(
112+
data.GitHubToken,
113+
data.GitHubOwner,
114+
data.GitHubRepository,
115+
data.GrmMilestone
116+
);
117+
});
118+
119+
Task("Discard-Release-With-Username-Password")
120+
.Does<BuildData>((data) =>
121+
{
122+
var settings = new GitReleaseManagerCreateSettings();
123+
settings.Milestone = data.GrmMilestone;
124+
125+
// TODO: This can be replaced when a discard alias is added to Cake
126+
settings.ArgumentCustomization = args => {
127+
var newArgs = new ProcessArgumentBuilder()
128+
.Append("discard");
129+
130+
Array.ForEach(
131+
args.Skip(1).ToArray(),
132+
newArgs.Append
133+
);
134+
135+
return newArgs;
136+
};
137+
138+
GitReleaseManagerCreate(
139+
data.GitHubUsername,
140+
data.GitHubPassword,
141+
data.GitHubOwner,
142+
data.GitHubRepository,
143+
settings);
144+
});
145+
146+
Task("Discard-Release-With-Token")
147+
.Does<BuildData>((data) =>
148+
{
149+
var settings = new GitReleaseManagerCreateSettings();
150+
settings.Milestone = data.GrmMilestone;
151+
152+
// TODO: This can be replaced when a discard alias is added to Cake
153+
settings.ArgumentCustomization = args => {
154+
var newArgs = new ProcessArgumentBuilder()
155+
.Append("discard");
156+
157+
Array.ForEach(
158+
args.Skip(1).ToArray(),
159+
newArgs.Append
160+
);
161+
162+
return newArgs;
163+
};
164+
165+
GitReleaseManagerCreate(
166+
data.GitHubToken,
167+
data.GitHubOwner,
168+
data.GitHubRepository,
169+
settings);
170+
});
171+
172+
Task("Open-Milestone-With-Username-Password")
173+
.Does<BuildData>((data) =>
174+
{
175+
var settings = new GitReleaseManagerCloseMilestoneSettings();
176+
177+
// TODO: This can be replaced when a open alias is added to Cake
178+
settings.ArgumentCustomization = args => {
179+
var newArgs = new ProcessArgumentBuilder()
180+
.Append("open");
181+
182+
Array.ForEach(
183+
args.Skip(1).ToArray(),
184+
newArgs.Append
185+
);
186+
187+
return newArgs;
188+
};
189+
190+
GitReleaseManagerClose(
191+
data.GitHubUsername,
192+
data.GitHubPassword,
193+
data.GitHubOwner,
194+
data.GitHubRepository,
195+
data.GrmMilestone,
196+
settings);
197+
});
198+
199+
Task("Open-Milestone-With-Token")
200+
.Does<BuildData>((data) =>
201+
{
202+
var settings = new GitReleaseManagerCloseMilestoneSettings();
203+
204+
// TODO: This can be replaced when a open alias is added to Cake
205+
settings.ArgumentCustomization = args => {
206+
var newArgs = new ProcessArgumentBuilder()
207+
.Append("open");
208+
209+
Array.ForEach(
210+
args.Skip(1).ToArray(),
211+
newArgs.Append
212+
);
213+
214+
return newArgs;
215+
};
216+
217+
GitReleaseManagerClose(
218+
data.GitHubToken,
219+
data.GitHubOwner,
220+
data.GitHubRepository,
221+
data.GrmMilestone,
222+
settings);
223+
});
224+
225+
Task("Run-All-Tests")
226+
.IsDependentOn("Create-Release-With-Username-Password")
227+
.IsDependentOn("Add-Asset-To-Release-With-Username-Password")
228+
.IsDependentOn("Export-Release-With-Username-Password")
229+
.IsDependentOn("Close-Milestone-With-Username-Password")
230+
.IsDependentOn("Discard-Release-With-Username-Password")
231+
.IsDependentOn("Open-Milestone-With-Username-Password")
232+
.IsDependentOn("Create-Release-With-Token")
233+
.IsDependentOn("Add-Asset-To-Release-With-Token")
234+
.IsDependentOn("Export-Release-With-Token")
235+
.IsDependentOn("Close-Milestone-With-Token")
236+
.IsDependentOn("Discard-Release-With-Token")
237+
.IsDependentOn("Open-Milestone-With-Token");
238+
239+
RunTarget(target);
240+
241+
// Things that still need to be tested further
242+
// - Exporting with configuration file for footer, replacements, etc
243+
// - Creating with configuration file for including hashes, etc.
244+
245+
// Aliases which are not currently tested
246+
// - GitReleaseManagerLabel
247+
// - GitReleaseManagerPublish

tests/integration/utilities.cake

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
public bool FileHashEquals(FilePath y, FilePath x)
2+
{
3+
using (var sha512 = System.Security.Cryptography.SHA512.Create())
4+
using (System.IO.Stream
5+
yStream = System.IO.File.OpenRead(y.FullPath),
6+
xStream = System.IO.File.OpenRead(x.FullPath))
7+
{
8+
var yHash = sha512.ComputeHash(yStream);
9+
var xHash = sha512.ComputeHash(xStream);
10+
return Enumerable.SequenceEqual(yHash, xHash);
11+
}
12+
}

tests/integration/xunit.cake

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#addin "nuget:?package=xunit.assert&version=2.4.1"
2+
3+
using Xunit;
4+
5+
public class Record
6+
{
7+
public static Exception Exception(Action action)
8+
{
9+
if (action == null)
10+
{
11+
throw new ArgumentNullException("action");
12+
}
13+
14+
try
15+
{
16+
action();
17+
return null;
18+
}
19+
catch (Exception ex)
20+
{
21+
return ex;
22+
}
23+
}
24+
}

0 commit comments

Comments
 (0)