From 46787d2cb87498d9a970de966c5ff3d2c2094e05 Mon Sep 17 00:00:00 2001 From: Sam Cackett Date: Sat, 13 Feb 2021 20:29:09 +0000 Subject: [PATCH] Add DeleteBranchOnMerge option for repositories (#2268) --- .../Clients/RepositoriesClientTests.cs | 81 +++++++++++++++++++ Octokit/Models/Request/NewRepository.cs | 2 + Octokit/Models/Request/RepositoryUpdate.cs | 2 + Octokit/Models/Response/Repository.cs | 5 +- 4 files changed, 89 insertions(+), 1 deletion(-) diff --git a/Octokit.Tests.Integration/Clients/RepositoriesClientTests.cs b/Octokit.Tests.Integration/Clients/RepositoriesClientTests.cs index a3257649..7b048cce 100644 --- a/Octokit.Tests.Integration/Clients/RepositoriesClientTests.cs +++ b/Octokit.Tests.Integration/Clients/RepositoriesClientTests.cs @@ -219,6 +219,21 @@ public class RepositoriesClientTests } } + [IntegrationTest] + public async Task CreatesARepositoryWithDeleteBranchOnMergeEnabled() + { + var github = Helper.GetAuthenticatedClient(); + var repoName = Helper.MakeNameWithTimestamp("repo-with-delete-branch-on-merge"); + + using (var context = await github.CreateRepositoryContext(new NewRepository(repoName) { DeleteBranchOnMerge = true })) + { + var createdRepository = context.Repository; + + Assert.True(createdRepository.DeleteBranchOnMerge); + var repository = await github.Repository.Get(Helper.UserName, repoName); + Assert.True(repository.DeleteBranchOnMerge); + } + } [IntegrationTest] public async Task ThrowsInvalidGitIgnoreExceptionForInvalidTemplateNames() @@ -612,6 +627,46 @@ public class RepositoriesClientTests Assert.False(repository.AllowRebaseMerge); } } + + [IntegrationTest] + public async Task UpdatesDeleteBranchOnMergeMethod() + { + var github = Helper.GetAuthenticatedClient(); + + using (var context = await github.CreateRepositoryContext("public-repo")) + { + var updateRepository = new RepositoryUpdate(context.RepositoryName) + { + DeleteBranchOnMerge = true + }; + + var editedRepository = await github.Repository.Edit(context.RepositoryOwner, context.RepositoryName, updateRepository); + Assert.True(editedRepository.DeleteBranchOnMerge); + + var repository = await github.Repository.Get(context.RepositoryOwner, context.RepositoryName); + Assert.True(repository.DeleteBranchOnMerge); + } + } + + [IntegrationTest] + public async Task UpdatesDeleteBranchOnMergeMethodWithRepositoryId() + { + var github = Helper.GetAuthenticatedClient(); + + using (var context = await github.CreateRepositoryContext("public-repo")) + { + var updateRepository = new RepositoryUpdate(context.RepositoryName) + { + DeleteBranchOnMerge = true + }; + + var editedRepository = await github.Repository.Edit(context.RepositoryId, updateRepository); + Assert.True(editedRepository.DeleteBranchOnMerge); + + var repository = await github.Repository.Get(context.RepositoryId); + Assert.True(repository.DeleteBranchOnMerge); + } + } public void Dispose() { @@ -790,6 +845,32 @@ public class RepositoriesClientTests Assert.Equal("mit", repository.License.Key); Assert.Equal("MIT License", repository.License.Name); } + + [IntegrationTest] + public async Task ReturnsRepositoryDeleteBranchOnMergeOptions() + { + var github = Helper.GetAuthenticatedClient(); + + using (var context = await github.CreateRepositoryContext(Helper.MakeNameWithTimestamp("public-repo"))) + { + var repository = await github.Repository.Get(context.RepositoryOwner, context.RepositoryName); + + Assert.NotNull(repository.DeleteBranchOnMerge); + } + } + + [IntegrationTest] + public async Task ReturnsRepositoryDeleteBranchOnMergeOptionsWithRepositoryId() + { + var github = Helper.GetAuthenticatedClient(); + + using (var context = await github.CreateRepositoryContext(Helper.MakeNameWithTimestamp("public-repo"))) + { + var repository = await github.Repository.Get(context.RepositoryId); + + Assert.NotNull(repository.DeleteBranchOnMerge); + } + } } public class TheGetAllPublicMethod diff --git a/Octokit/Models/Request/NewRepository.cs b/Octokit/Models/Request/NewRepository.cs index a081fd4e..5c7da588 100644 --- a/Octokit/Models/Request/NewRepository.cs +++ b/Octokit/Models/Request/NewRepository.cs @@ -81,6 +81,8 @@ namespace Octokit /// Optional. Gets or sets the Id of the team to grant access to this repository. This is only valid when creating a repository for an organization. /// public int? TeamId { get; set; } + + public bool? DeleteBranchOnMerge { get; set; } internal string DebuggerDisplay { diff --git a/Octokit/Models/Request/RepositoryUpdate.cs b/Octokit/Models/Request/RepositoryUpdate.cs index 1ee0dd74..86abfe52 100644 --- a/Octokit/Models/Request/RepositoryUpdate.cs +++ b/Octokit/Models/Request/RepositoryUpdate.cs @@ -77,6 +77,8 @@ namespace Octokit /// Optional. Allows the "Create a merge commit" merge method to be used. /// public bool? AllowMergeCommit { get; set; } + + public bool? DeleteBranchOnMerge { get; set; } /// /// Optional. True to archive this repository. Note: you cannot unarchive repositories through the API. diff --git a/Octokit/Models/Response/Repository.cs b/Octokit/Models/Response/Repository.cs index 7b6836c9..f288a6d8 100644 --- a/Octokit/Models/Response/Repository.cs +++ b/Octokit/Models/Response/Repository.cs @@ -14,7 +14,7 @@ namespace Octokit Id = id; } - public Repository(string url, string htmlUrl, string cloneUrl, string gitUrl, string sshUrl, string svnUrl, string mirrorUrl, long id, string nodeId, User owner, string name, string fullName, bool isTemplate, string description, string homepage, string language, bool @private, bool fork, int forksCount, int stargazersCount, string defaultBranch, int openIssuesCount, DateTimeOffset? pushedAt, DateTimeOffset createdAt, DateTimeOffset updatedAt, RepositoryPermissions permissions, Repository parent, Repository source, LicenseMetadata license, bool hasIssues, bool hasWiki, bool hasDownloads, bool hasPages, int subscribersCount, long size, bool? allowRebaseMerge, bool? allowSquashMerge, bool? allowMergeCommit, bool archived, int watchersCount) + public Repository(string url, string htmlUrl, string cloneUrl, string gitUrl, string sshUrl, string svnUrl, string mirrorUrl, long id, string nodeId, User owner, string name, string fullName, bool isTemplate, string description, string homepage, string language, bool @private, bool fork, int forksCount, int stargazersCount, string defaultBranch, int openIssuesCount, DateTimeOffset? pushedAt, DateTimeOffset createdAt, DateTimeOffset updatedAt, RepositoryPermissions permissions, Repository parent, Repository source, LicenseMetadata license, bool hasIssues, bool hasWiki, bool hasDownloads, bool hasPages, int subscribersCount, long size, bool? allowRebaseMerge, bool? allowSquashMerge, bool? allowMergeCommit, bool archived, int watchersCount, bool? deleteBranchOnMerge) { Url = url; HtmlUrl = htmlUrl; @@ -56,6 +56,7 @@ namespace Octokit AllowMergeCommit = allowMergeCommit; Archived = archived; WatchersCount = watchersCount; + DeleteBranchOnMerge = deleteBranchOnMerge; } public string Url { get; protected set; } @@ -142,6 +143,8 @@ namespace Octokit public bool Archived { get; protected set; } + public bool? DeleteBranchOnMerge { get; protected set; } + internal string DebuggerDisplay { get