refactoring for reuse in test suite

This commit is contained in:
Brendan Forster
2014-02-18 16:02:47 +11:00
parent dfc36a9a78
commit af9e8a2f78
@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using System.Net.Http.Headers;
using System.Threading.Tasks;
using Octokit;
@@ -26,68 +27,62 @@ public class PullRequestsClientTests : IDisposable
}
[IntegrationTest]
public async Task CanRetrieveOnePullRequest()
public async Task CanCreate()
{
// create new commit for master branch
var baselineBlob = new NewBlob
{
Content = "Hello World!",
Encoding = EncodingType.Utf8
};
var baselineBlobResult = await _client.GitDatabase.Blob.Create(Helper.UserName, _repository.Name, baselineBlob);
var baselineNewTree = new NewTree();
baselineNewTree.Tree.Add(new NewTreeItem
{
Type = TreeType.Blob,
Mode = FileMode.File,
Path = "README.md",
Sha = baselineBlobResult.Sha
});
var baselineTreeResult = await _client.GitDatabase.Tree.Create(Helper.UserName, _repository.Name, baselineNewTree);
var baselineNewCommit = new NewCommit("baseline for pull request", baselineTreeResult.Sha);
var baselineCommit = await _client.GitDatabase.Commit.Create(Helper.UserName, _repository.Name, baselineNewCommit);
var newMasterTree = await CreateTree(new Dictionary<string, string> { { "README.md", "Hello World!" } });
var newMaster = await CreateCommit("baseline for pull request", newMasterTree.Sha);
// update master
await _client.GitDatabase.Reference.Update(Helper.UserName, _repository.Name, "heads/master", new ReferenceUpdate(baselineCommit.Sha, true));
await _client.GitDatabase.Reference.Update(Helper.UserName, _repository.Name, "heads/master", new ReferenceUpdate(newMaster.Sha, true));
// create new commit for feature branch
var blob = new NewBlob
{
Content = "I am overwriting this blob with something new",
Encoding = EncodingType.Utf8
};
var blobResult = await _client.GitDatabase.Blob.Create(Helper.UserName, _repository.Name, blob);
var newTree = new NewTree();
newTree.Tree.Add(new NewTreeItem
{
Type = TreeType.Blob,
Mode = FileMode.File,
Path = "README.md",
Sha = blobResult.Sha
});
var treeResult = await _client.GitDatabase.Tree.Create(Helper.UserName, _repository.Name, newTree);
var newCommit = new NewCommit("this is the commit to merge into the pull request", treeResult.Sha, baselineCommit.Sha);
var commit = await _client.GitDatabase.Commit.Create(Helper.UserName, _repository.Name, newCommit);
var featureBranchTree = await CreateTree(new Dictionary<string, string> { { "README.md", "I am overwriting this blob with something new" } });
var newFeature = await CreateCommit("this is the commit to merge into the pull request", featureBranchTree.Sha);
// create branch
await _client.GitDatabase.Reference.Create(Helper.UserName, _repository.Name, new NewReference("refs/heads/my-branch", commit.Sha));
await _client.GitDatabase.Reference.Create(Helper.UserName, _repository.Name, new NewReference("refs/heads/my-branch", newFeature.Sha));
// create pull request
var head = Helper.UserName + ":my-branch";
var newPullRequest = new NewPullRequest("a pull request", head, "master");
var result = await _pullRequestsClient.Create(Helper.UserName, _repository.Name, newPullRequest);
Assert.Equal("a pull request", result.Title);
}
async Task<TreeResponse> CreateTree(IDictionary<string,string> treeContents)
{
var collection = new List<NewTreeItem>();
foreach (var c in treeContents)
{
var baselineBlob = new NewBlob
{
Content = c.Value,
Encoding = EncodingType.Utf8
};
var baselineBlobResult = await _client.GitDatabase.Blob.Create(Helper.UserName, _repository.Name, baselineBlob);
collection.Add(new NewTreeItem
{
Type = TreeType.Blob,
Mode = FileMode.File,
Path = c.Key,
Sha = baselineBlobResult.Sha
});
}
var newTree = new NewTree { Tree = collection };
return await _client.GitDatabase.Tree.Create(Helper.UserName, _repository.Name, newTree);
}
async Task<Commit> CreateCommit(string message, string sha)
{
var newCommit = new NewCommit(message, sha);
return await _client.GitDatabase.Commit.Create(Helper.UserName, _repository.Name, newCommit);
}
public void Dispose()
{
Helper.DeleteRepo(_repository);