diff --git a/src/WingetCreateCore/Common/GitHub.cs b/src/WingetCreateCore/Common/GitHub.cs index 88246766..831a22c3 100644 --- a/src/WingetCreateCore/Common/GitHub.cs +++ b/src/WingetCreateCore/Common/GitHub.cs @@ -300,7 +300,7 @@ private async Task SubmitPRAsync(string packageId, string version, repo = await this.github.Repository.Get(this.wingetRepoOwner, this.wingetRepo); } - string newBranchName = $"{packageId}-{version}-{Guid.NewGuid()}"; + string newBranchName = $"{packageId}-{version}-{Guid.NewGuid()}".Replace(" ", string.Empty); string newBranchNameHeads = $"heads/{newBranchName}"; if (string.IsNullOrEmpty(prTitle)) diff --git a/src/WingetCreateTests/WingetCreateTests/Resources/TestPublisher.VersionWithWhitespace.yaml b/src/WingetCreateTests/WingetCreateTests/Resources/TestPublisher.VersionWithWhitespace.yaml new file mode 100644 index 00000000..d02c8272 --- /dev/null +++ b/src/WingetCreateTests/WingetCreateTests/Resources/TestPublisher.VersionWithWhitespace.yaml @@ -0,0 +1,15 @@ +PackageIdentifier: TestPublisher.VersionWithWhitespace +PackageVersion: test whitespace version +PackageName: Test app +Publisher: Test publisher +License: MIT +ShortDescription: A manifest used to test the branch name is trimmed of whitespace. +InstallerLocale: en-US +Installers: + - Architecture: x64 + InstallerUrl: https://fakedomain.com/WingetCreateTestExeInstaller.exe + InstallerType: exe + InstallerSha256: A7803233EEDB6A4B59B3024CCF9292A6FFFB94507DC998AA67C5B745D197A5DC +PackageLocale: en-US +ManifestType: singleton +ManifestVersion: 1.0.0 \ No newline at end of file diff --git a/src/WingetCreateTests/WingetCreateTests/UnitTests/GitHubTests.cs b/src/WingetCreateTests/WingetCreateTests/UnitTests/GitHubTests.cs index 8f1e51a8..1d34180b 100644 --- a/src/WingetCreateTests/WingetCreateTests/UnitTests/GitHubTests.cs +++ b/src/WingetCreateTests/WingetCreateTests/UnitTests/GitHubTests.cs @@ -3,6 +3,7 @@ namespace Microsoft.WingetCreateUnitTests { + using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; @@ -77,5 +78,31 @@ public async Task GetLatestManifestAndSubmitPR() await this.gitHub.ClosePullRequest(pullRequest.Number); StringAssert.StartsWith(string.Format(GitHubPullRequestBaseUrl, this.WingetPkgsTestRepoOwner, this.WingetPkgsTestRepo), pullRequest.HtmlUrl, PullRequestFailedToGenerate); } + + /// + /// Verifies that the branch name is trimmed of whitespace when submitting a PR. Successful PR generation verifies that the branch name was trimmed. + /// + /// A representing the asynchronous unit test. + [Test] + public async Task RemoveWhitespaceFromBranchName() + { + string packageId = "TestPublisher.VersionWithWhitespace"; + List manifestContents = TestUtils.GetInitialManifestContent($"{packageId}.yaml"); + Manifests manifests = Serialization.DeserializeManifestContents(manifestContents); + Assert.That(manifests.SingletonManifest.PackageIdentifier, Is.EqualTo(packageId), FailedToRetrieveManifestFromId); + + PullRequest pullRequest = new(); + try + { + pullRequest = await this.gitHub.SubmitPullRequestAsync(manifests, this.SubmitPRToFork); + } + catch (Exception e) + { + Assert.Fail($"Failed to generate pull request. {e.Message}"); + } + + await this.gitHub.ClosePullRequest(pullRequest.Number); + StringAssert.StartsWith(string.Format(GitHubPullRequestBaseUrl, this.WingetPkgsTestRepoOwner, this.WingetPkgsTestRepo), pullRequest.HtmlUrl, PullRequestFailedToGenerate); + } } } diff --git a/src/WingetCreateTests/WingetCreateTests/WingetCreateTests.csproj b/src/WingetCreateTests/WingetCreateTests/WingetCreateTests.csproj index fd6434bd..66da4bb8 100644 --- a/src/WingetCreateTests/WingetCreateTests/WingetCreateTests.csproj +++ b/src/WingetCreateTests/WingetCreateTests/WingetCreateTests.csproj @@ -36,6 +36,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest