Skip to content

Commit 114cd43

Browse files
Merge pull request #11763 from dependabot/dev/brettfo/nuget-pr-text
add simple title, commit message, and body text generation
2 parents 8ef3430 + ad52297 commit 114cd43

File tree

5 files changed

+232
-39
lines changed

5 files changed

+232
-39
lines changed

nuget/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/PullRequestMessageTests.cs

+11-11
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ public void GetPullRequestApiMessage(Job job, DependencyFile[] updatedFiles, Rep
1818
actualMessage = actualMessage switch
1919
{
2020
// this isn't the place to verify the generated text
21-
CreatePullRequest create => create with { CommitMessage = "test commit message", PrTitle = "test pr title", PrBody = "test pr body" },
22-
UpdatePullRequest update => update with { CommitMessage = "test commit message", PrTitle = "test pr title", PrBody = "test pr body" },
21+
CreatePullRequest create => create with { CommitMessage = RunWorkerTests.TestPullRequestCommitMessage, PrTitle = RunWorkerTests.TestPullRequestTitle, PrBody = RunWorkerTests.TestPullRequestBody },
22+
UpdatePullRequest update => update with { CommitMessage = RunWorkerTests.TestPullRequestCommitMessage, PrTitle = RunWorkerTests.TestPullRequestTitle, PrBody = RunWorkerTests.TestPullRequestBody },
2323
_ => actualMessage,
2424
};
2525
Assert.Equal(expectedMessage.GetType(), actualMessage.GetType());
@@ -68,9 +68,9 @@ public static IEnumerable<object[]> GetPullRequestApiMessageData()
6868
Dependencies = [new ReportedDependency() { Name = "Some.Dependency", Version = "1.0.1", Requirements = [] }],
6969
UpdatedDependencyFiles = [new DependencyFile() { Directory = "/src/", Name = "project.csproj", Content = "project contents irrelevant" } ],
7070
BaseCommitSha = "TEST-COMMIT-SHA",
71-
CommitMessage = "test commit message",
72-
PrTitle = "test pr title",
73-
PrBody = "test pr body",
71+
CommitMessage = RunWorkerTests.TestPullRequestCommitMessage,
72+
PrTitle = RunWorkerTests.TestPullRequestTitle,
73+
PrBody = RunWorkerTests.TestPullRequestBody,
7474
}
7575
];
7676

@@ -190,9 +190,9 @@ public static IEnumerable<object[]> GetPullRequestApiMessageData()
190190
DependencyNames = ["Some.Dependency"],
191191
UpdatedDependencyFiles = [new DependencyFile() { Directory = "/src/", Name = "project.csproj", Content = "project contents irrelevant" } ],
192192
BaseCommitSha = "TEST-COMMIT-SHA",
193-
CommitMessage = "test commit message",
194-
PrTitle = "test pr title",
195-
PrBody = "test pr body",
193+
CommitMessage = RunWorkerTests.TestPullRequestCommitMessage,
194+
PrTitle = RunWorkerTests.TestPullRequestTitle,
195+
PrBody = RunWorkerTests.TestPullRequestBody,
196196
}
197197
];
198198

@@ -243,9 +243,9 @@ public static IEnumerable<object[]> GetPullRequestApiMessageData()
243243
DependencyNames = ["Some.Dependency"],
244244
UpdatedDependencyFiles = [new DependencyFile() { Directory = "/src/", Name = "project.csproj", Content = "project contents irrelevant" } ],
245245
BaseCommitSha = "TEST-COMMIT-SHA",
246-
CommitMessage = "test commit message",
247-
PrTitle = "test pr title",
248-
PrBody = "test pr body",
246+
CommitMessage = RunWorkerTests.TestPullRequestCommitMessage,
247+
PrTitle = RunWorkerTests.TestPullRequestTitle,
248+
PrBody = RunWorkerTests.TestPullRequestBody,
249249
}
250250
];
251251
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
using NuGetUpdater.Core.Run;
2+
using NuGetUpdater.Core.Run.ApiModel;
3+
4+
using Xunit;
5+
6+
namespace NuGetUpdater.Core.Test.Run;
7+
8+
public class PullRequestTextTests
9+
{
10+
[Theory]
11+
[MemberData(nameof(GetPullRequestTextTestData))]
12+
public void PullRequestText(Job job, ReportedDependency[] updatedDependencies, DependencyFile[] updatedFiles, string? dependencyGroupName, string expectedTitle, string expectedCommitMessage, string expectedBody)
13+
{
14+
var actualTitle = PullRequestTextGenerator.GetPullRequestTitle(job, updatedDependencies, updatedFiles, dependencyGroupName);
15+
var actualCommitMessage = PullRequestTextGenerator.GetPullRequestCommitMessage(job, updatedDependencies, updatedFiles, dependencyGroupName);
16+
var actualBody = PullRequestTextGenerator.GetPullRequestBody(job, updatedDependencies, updatedFiles, dependencyGroupName);
17+
Assert.Equal(expectedTitle, actualTitle);
18+
Assert.Equal(expectedCommitMessage, actualCommitMessage);
19+
Assert.Equal(expectedBody, actualBody);
20+
}
21+
22+
public static IEnumerable<object?[]> GetPullRequestTextTestData()
23+
{
24+
// single dependency, no optional values
25+
yield return
26+
[
27+
// job
28+
FromCommitOptions(null),
29+
// updatedDependencies
30+
new []
31+
{
32+
new ReportedDependency()
33+
{
34+
Name = "Some.Package",
35+
Version = "1.2.3",
36+
Requirements = []
37+
}
38+
},
39+
// updatedFiles
40+
Array.Empty<DependencyFile>(),
41+
// dependencyGroupName
42+
null,
43+
// expectedTitle
44+
"Update Some.Package to 1.2.3",
45+
// expectedCommitMessage
46+
"Update Some.Package to 1.2.3",
47+
// expectedBody
48+
"Update Some.Package to 1.2.3"
49+
];
50+
51+
// single dependency, prefix given
52+
yield return
53+
[
54+
// job
55+
FromCommitOptions(new(){ Prefix = "[SECURITY] " }),
56+
// updatedDependencies
57+
new []
58+
{
59+
new ReportedDependency()
60+
{
61+
Name = "Some.Package",
62+
Version = "1.2.3",
63+
Requirements = []
64+
}
65+
},
66+
// updatedFiles
67+
Array.Empty<DependencyFile>(),
68+
// dependencyGroupName
69+
null,
70+
// expectedTitle
71+
"[SECURITY] Update Some.Package to 1.2.3",
72+
// expectedCommitMessage
73+
"[SECURITY] Update Some.Package to 1.2.3",
74+
// expectedBody
75+
"[SECURITY] Update Some.Package to 1.2.3"
76+
];
77+
78+
// multiple dependencies, multiple versions
79+
yield return
80+
[
81+
// job
82+
FromCommitOptions(null),
83+
// updatedDependencies
84+
new[]
85+
{
86+
new ReportedDependency()
87+
{
88+
Name = "Package.A",
89+
Version = "1.0.0",
90+
Requirements = []
91+
},
92+
new ReportedDependency()
93+
{
94+
Name = "Package.A",
95+
Version = "2.0.0",
96+
Requirements = []
97+
},
98+
new ReportedDependency()
99+
{
100+
Name = "Package.B",
101+
Version = "3.0.0",
102+
Requirements = []
103+
},
104+
new ReportedDependency()
105+
{
106+
Name = "Package.B",
107+
Version = "4.0.0",
108+
Requirements = []
109+
},
110+
},
111+
// updatedFiles
112+
Array.Empty<DependencyFile>(),
113+
// dependencyGroupName
114+
null,
115+
// expectedTitle
116+
"Update Package.A to 1.0.0, 2.0.0; Package.B to 3.0.0, 4.0.0",
117+
// expectedCommitMessage
118+
"Update Package.A to 1.0.0, 2.0.0; Package.B to 3.0.0, 4.0.0",
119+
// expectedBody
120+
"Update Package.A to 1.0.0, 2.0.0; Package.B to 3.0.0, 4.0.0"
121+
];
122+
}
123+
124+
private static Job FromCommitOptions(CommitOptions? commitOptions)
125+
{
126+
return new Job()
127+
{
128+
Source = new()
129+
{
130+
Provider = "github",
131+
Repo = "test/repo"
132+
},
133+
CommitMessageOptions = commitOptions,
134+
};
135+
}
136+
}

nuget/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/RunWorkerTests.cs

+35-22
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ namespace NuGetUpdater.Core.Test.Run;
2222

2323
public class RunWorkerTests
2424
{
25+
public const string TestPullRequestCommitMessage = "test-pull-request-commit-message";
26+
public const string TestPullRequestTitle = "test-pull-request-title";
27+
public const string TestPullRequestBody = "test-pull-request-body";
28+
2529
[Theory]
2630
[InlineData(EOLType.CR)]
2731
[InlineData(EOLType.LF)]
@@ -210,9 +214,9 @@ await File.WriteAllTextAsync(projectPath, """
210214
},
211215
],
212216
BaseCommitSha = "TEST-COMMIT-SHA",
213-
CommitMessage = "TODO: message",
214-
PrTitle = "TODO: title",
215-
PrBody = "TODO: body",
217+
CommitMessage = TestPullRequestCommitMessage,
218+
PrTitle = TestPullRequestTitle,
219+
PrBody = TestPullRequestBody,
216220
},
217221
new MarkAsProcessed("TEST-COMMIT-SHA")
218222
]
@@ -462,9 +466,9 @@ await File.WriteAllTextAsync(projectPath, """
462466

463467
],
464468
BaseCommitSha = "TEST-COMMIT-SHA",
465-
CommitMessage = "TODO: message",
466-
PrTitle = "TODO: title",
467-
PrBody = "TODO: body",
469+
CommitMessage = TestPullRequestCommitMessage,
470+
PrTitle = TestPullRequestTitle,
471+
PrBody = TestPullRequestBody,
468472
},
469473
new MarkAsProcessed("TEST-COMMIT-SHA")
470474
]
@@ -856,9 +860,9 @@ await File.WriteAllTextAsync(packagesConfigPath, """
856860
},
857861
],
858862
BaseCommitSha = "TEST-COMMIT-SHA",
859-
CommitMessage = "TODO: message",
860-
PrTitle = "TODO: title",
861-
PrBody = "TODO: body",
863+
CommitMessage = TestPullRequestCommitMessage,
864+
PrTitle = TestPullRequestTitle,
865+
PrBody = TestPullRequestBody,
862866
},
863867
new MarkAsProcessed("TEST-COMMIT-SHA")
864868
]
@@ -1416,9 +1420,9 @@ await File.WriteAllTextAsync(packagesConfigPath, """
14161420
},
14171421
],
14181422
BaseCommitSha = "TEST-COMMIT-SHA",
1419-
CommitMessage = "TODO: message",
1420-
PrTitle = "TODO: title",
1421-
PrBody = "TODO: body",
1423+
CommitMessage = TestPullRequestCommitMessage,
1424+
PrTitle = TestPullRequestTitle,
1425+
PrBody = TestPullRequestBody,
14221426
},
14231427
new MarkAsProcessed("TEST-COMMIT-SHA")
14241428
]
@@ -1724,9 +1728,9 @@ await File.WriteAllTextAsync(directoryBuildPropsPath, """
17241728
}
17251729
],
17261730
BaseCommitSha = "TEST-COMMIT-SHA",
1727-
CommitMessage = "TODO: message",
1728-
PrTitle = "TODO: title",
1729-
PrBody = "TODO: body",
1731+
CommitMessage = TestPullRequestCommitMessage,
1732+
PrTitle = TestPullRequestTitle,
1733+
PrBody = TestPullRequestBody,
17301734
},
17311735
new MarkAsProcessed("TEST-COMMIT-SHA")
17321736
]
@@ -2065,9 +2069,9 @@ await RunAsync(
20652069
}
20662070
],
20672071
BaseCommitSha = "TEST-COMMIT-SHA",
2068-
CommitMessage = "TODO: message",
2069-
PrTitle = "TODO: title",
2070-
PrBody = "TODO: body"
2072+
CommitMessage = TestPullRequestCommitMessage,
2073+
PrTitle = TestPullRequestTitle,
2074+
PrBody = TestPullRequestBody
20712075
},
20722076
new MarkAsProcessed("TEST-COMMIT-SHA")
20732077
]
@@ -2450,9 +2454,9 @@ await RunAsync(
24502454
},
24512455
],
24522456
BaseCommitSha = "TEST-COMMIT-SHA",
2453-
CommitMessage = "TODO: message",
2454-
PrTitle = "TODO: title",
2455-
PrBody = "TODO: body",
2457+
CommitMessage = TestPullRequestCommitMessage,
2458+
PrTitle = TestPullRequestTitle,
2459+
PrBody = TestPullRequestBody,
24562460
},
24572461
new MarkAsProcessed("TEST-COMMIT-SHA"),
24582462
]
@@ -2593,7 +2597,16 @@ private static async Task RunAsync(Job job, TestFile[] files, IDiscoveryWorker?
25932597
var worker = new RunWorker(jobId, testApiHandler, discoveryWorker, analyzeWorker, updaterWorker, logger);
25942598
var repoContentsPathDirectoryInfo = new DirectoryInfo(tempDirectory.DirectoryPath);
25952599
var actualResult = await worker.RunAsync(job, repoContentsPathDirectoryInfo, "TEST-COMMIT-SHA");
2596-
var actualApiMessages = testApiHandler.ReceivedMessages.ToArray();
2600+
var actualApiMessages = testApiHandler.ReceivedMessages
2601+
.Select(m =>
2602+
m.Object switch
2603+
{
2604+
// this isn't the place to verify the generated text
2605+
CreatePullRequest create => (m.Type, create with { CommitMessage = TestPullRequestCommitMessage, PrTitle = TestPullRequestTitle, PrBody = TestPullRequestBody }),
2606+
UpdatePullRequest update => (m.Type, update with { CommitMessage = TestPullRequestCommitMessage, PrTitle = TestPullRequestTitle, PrBody = TestPullRequestBody }),
2607+
_ => m,
2608+
}
2609+
).ToArray();
25972610

25982611
// assert
25992612
var actualRunResultJson = JsonSerializer.Serialize(actualResult);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
using NuGet.Versioning;
2+
3+
using NuGetUpdater.Core.Run.ApiModel;
4+
5+
namespace NuGetUpdater.Core.Run;
6+
7+
public class PullRequestTextGenerator
8+
{
9+
public static string GetPullRequestTitle(Job job, ReportedDependency[] updatedDependencies, DependencyFile[] updatedFiles, string? dependencyGroupName = null)
10+
{
11+
// simple version looks like
12+
// Update Some.Package to 1.2.3
13+
// if multiple packages are updated to multiple versions, result looks like:
14+
// Update Package.A to 1.0.0, 2.0.0; Package.B to 3.0.0, 4.0.0
15+
var dependencySets = updatedDependencies
16+
.GroupBy(d => d.Name, StringComparer.OrdinalIgnoreCase)
17+
.OrderBy(g => g.Key, StringComparer.OrdinalIgnoreCase)
18+
.Select(g => new
19+
{
20+
Name = g.Key,
21+
Versions = g
22+
.Where(d => d.Version is not null)
23+
.Select(d => d.Version!)
24+
.OrderBy(d => NuGetVersion.Parse(d))
25+
.ToArray()
26+
})
27+
.ToArray();
28+
var updatedPartTitles = dependencySets
29+
.Select(d => $"{d.Name} to {string.Join(", ", d.Versions)}")
30+
.ToArray();
31+
var title = $"{job.CommitMessageOptions?.Prefix}Update {string.Join("; ", updatedPartTitles)}";
32+
return title;
33+
}
34+
35+
public static string GetPullRequestCommitMessage(Job job, ReportedDependency[] updatedDependencies, DependencyFile[] updatedFiles, string? dependencyGroupName = null)
36+
{
37+
return GetPullRequestTitle(job, updatedDependencies, updatedFiles, dependencyGroupName);
38+
}
39+
40+
public static string GetPullRequestBody(Job job, ReportedDependency[] updatedDependencies, DependencyFile[] updatedFiles, string? dependencyGroupName = null)
41+
{
42+
return GetPullRequestTitle(job, updatedDependencies, updatedFiles, dependencyGroupName);
43+
}
44+
}

nuget/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/RunWorker.cs

+6-6
Original file line numberDiff line numberDiff line change
@@ -385,9 +385,9 @@ private async Task SendApiMessage(MessageBase? message)
385385
DependencyNames = updatedDependencies.Select(d => d.Name).ToImmutableArray(),
386386
UpdatedDependencyFiles = updatedFiles,
387387
BaseCommitSha = baseCommitSha,
388-
CommitMessage = "TODO: message",
389-
PrTitle = "TODO: title",
390-
PrBody = "TODO: body",
388+
CommitMessage = PullRequestTextGenerator.GetPullRequestCommitMessage(job, updatedDependencies, updatedFiles, existingPullRequest.Item1),
389+
PrTitle = PullRequestTextGenerator.GetPullRequestTitle(job, updatedDependencies, updatedFiles, existingPullRequest.Item1),
390+
PrBody = PullRequestTextGenerator.GetPullRequestBody(job, updatedDependencies, updatedFiles, existingPullRequest.Item1),
391391
};
392392
}
393393
else
@@ -421,9 +421,9 @@ private async Task SendApiMessage(MessageBase? message)
421421
Dependencies = updatedDependencies,
422422
UpdatedDependencyFiles = updatedFiles,
423423
BaseCommitSha = baseCommitSha,
424-
CommitMessage = "TODO: message",
425-
PrTitle = "TODO: title",
426-
PrBody = "TODO: body",
424+
CommitMessage = PullRequestTextGenerator.GetPullRequestCommitMessage(job, updatedDependencies, updatedFiles),
425+
PrTitle = PullRequestTextGenerator.GetPullRequestTitle(job, updatedDependencies, updatedFiles),
426+
PrBody = PullRequestTextGenerator.GetPullRequestBody(job, updatedDependencies, updatedFiles),
427427
};
428428
}
429429
}

0 commit comments

Comments
 (0)