using System.Collections.Generic; using System.Threading.Tasks; namespace Octokit.Tests.Integration.Helpers { public static class RepositorySetupHelper { public static async Task CreateTree(this IGitHubClient client, Repository repository, IEnumerable> treeContents) { var collection = new List(); foreach (var c in treeContents) { var baselineBlob = new NewBlob { Content = c.Value, Encoding = EncodingType.Utf8 }; var baselineBlobResult = await client.Git.Blob.Create(repository.Owner.Login, repository.Name, baselineBlob); collection.Add(new NewTreeItem { Type = TreeType.Blob, Mode = FileMode.File, Path = c.Key, Sha = baselineBlobResult.Sha }); } var newTree = new NewTree(); foreach (var item in collection) { newTree.Tree.Add(item); } return await client.Git.Tree.Create(repository.Owner.Login, repository.Name, newTree); } public static async Task CreateCommit(this IGitHubClient client, Repository repository, string message, string sha, string parent) { var newCommit = new NewCommit(message, sha, parent); return await client.Git.Commit.Create(repository.Owner.Login, repository.Name, newCommit); } public static async Task CreateTheWorld(this IGitHubClient client, Repository repository) { var master = await client.Git.Reference.Get(repository.Owner.Login, repository.Name, "heads/master"); // create new commit for master branch var newMasterTree = await client.CreateTree(repository, new Dictionary { { "README.md", "Hello World!" } }); var newMaster = await client.CreateCommit(repository, "baseline for pull request", newMasterTree.Sha, master.Object.Sha); // update master await client.Git.Reference.Update(repository.Owner.Login, repository.Name, "heads/master", new ReferenceUpdate(newMaster.Sha)); // create new commit for feature branch var featureBranchTree = await client.CreateTree(repository, new Dictionary { { "README.md", "I am overwriting this blob with something new\nand a second line too" } }); var featureBranchCommit = await client.CreateCommit(repository, "this is the commit to merge into the pull request", featureBranchTree.Sha, newMaster.Sha); // create branch return await client.Git.Reference.Create(repository.Owner.Login, repository.Name, new NewReference("refs/heads/my-branch", featureBranchCommit.Sha)); } public static async Task CreatePullRequest(this IGitHubClient client, Repository repository, string branch = "my-branch") { var pullRequest = new NewPullRequest("Nice title for the pull request", branch, "master"); var createdPullRequest = await client.PullRequest.Create(repository.Owner.Login, repository.Name, pullRequest); return createdPullRequest; } public static async Task CreatePullRequestReview(this IGitHubClient client, Repository repository, int number, string body, PullRequestReviewEvent? @event = null, string commitId = null, List comments = null) { var review = new PullRequestReviewCreate() { CommitId = commitId, Body = body, Event = @event, Comments = comments }; var createdReview = await client.PullRequest.Review.Create(repository.Owner.Login, repository.Name, number, review); return createdReview; } } }