mirror of
https://github.com/zoriya/octokit.net.git
synced 2026-06-05 03:30:34 +00:00
Fixed broken conventions. Wrote a integrationstests that performs an actual merge between two branches.
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using Octokit;
|
||||
using Octokit.Tests.Integration;
|
||||
@@ -10,8 +11,9 @@ public class MergingClientTests : IDisposable
|
||||
readonly Repository _repository;
|
||||
readonly string _owner;
|
||||
readonly IMergingClient _fixture;
|
||||
readonly ICommitsClient _commitsClient;
|
||||
|
||||
|
||||
const string branchName = "my-branch";
|
||||
|
||||
public MergingClientTests()
|
||||
{
|
||||
_client = new GitHubClient(new ProductHeaderValue("OctokitTests"))
|
||||
@@ -20,8 +22,7 @@ public class MergingClientTests : IDisposable
|
||||
};
|
||||
|
||||
var repoName = Helper.MakeNameWithTimestamp("public-repo");
|
||||
_fixture = _client.GitDatabase.Merging;
|
||||
_commitsClient = _client.GitDatabase.Commit;
|
||||
_fixture = _client.Repository.Merging;
|
||||
_repository = _client.Repository.Create(new NewRepository { Name = repoName, AutoInit = true }).Result;
|
||||
_owner = _repository.Owner.Login;
|
||||
}
|
||||
@@ -29,33 +30,70 @@ public class MergingClientTests : IDisposable
|
||||
[IntegrationTest]
|
||||
public async Task CanCreateMerge()
|
||||
{
|
||||
var blob = new NewBlob
|
||||
{
|
||||
Content = "Hello World!",
|
||||
Encoding = EncodingType.Utf8
|
||||
};
|
||||
var blobResult = await _client.GitDatabase.Blob.Create(_owner, _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(_owner, _repository.Name, newTree);
|
||||
|
||||
var newCommit = new NewCommit("test-commit", treeResult.Sha);
|
||||
|
||||
var commit = await _commitsClient.Create(_owner, _repository.Name, newCommit);
|
||||
Assert.NotNull(commit);
|
||||
|
||||
var newMerge = new NewMerge("master", commit.Sha, "merge commit to master from integrationtests");
|
||||
await CreateTheWorld();
|
||||
|
||||
var newMerge = new NewMerge("master", branchName, "merge commit to master from integrationtests");
|
||||
|
||||
var merge = await _fixture.Create(_owner, _repository.Name, newMerge);
|
||||
Assert.NotNull(merge);
|
||||
Assert.NotNull(merge.Commit);
|
||||
Assert.Equal("merge commit to master from integrationtests", merge.Commit.Message);
|
||||
}
|
||||
|
||||
async Task CreateTheWorld()
|
||||
{
|
||||
var master = await _client.GitDatabase.Reference.Get(Helper.UserName, _repository.Name, "heads/master");
|
||||
|
||||
// create new commit for master branch
|
||||
var newMasterTree = await CreateTree(new Dictionary<string, string> { { "README.md", "Hello World! I want to be overwritten by featurebranch!" } });
|
||||
var newMaster = await CreateCommit("baseline for merge", newMasterTree.Sha, master.Object.Sha);
|
||||
|
||||
// update master
|
||||
await _client.GitDatabase.Reference.Update(Helper.UserName, _repository.Name, "heads/master", new ReferenceUpdate(newMaster.Sha));
|
||||
|
||||
// create new commit for feature branch
|
||||
var featureBranchTree = await CreateTree(new Dictionary<string, string> { { "README.md", "I am overwriting this blob with something new" } });
|
||||
var featureBranchCommit = await CreateCommit("this is the commit to merge", featureBranchTree.Sha, newMaster.Sha);
|
||||
|
||||
// create branch
|
||||
await _client.GitDatabase.Reference.Create(Helper.UserName, _repository.Name, new NewReference("refs/heads/my-branch", featureBranchCommit.Sha));
|
||||
}
|
||||
|
||||
async Task<TreeResponse> CreateTree(IEnumerable<KeyValuePair<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();
|
||||
foreach (var item in collection)
|
||||
{
|
||||
newTree.Tree.Add(item);
|
||||
}
|
||||
|
||||
return await _client.GitDatabase.Tree.Create(Helper.UserName, _repository.Name, newTree);
|
||||
}
|
||||
|
||||
async Task<Commit> CreateCommit(string message, string sha, string parent)
|
||||
{
|
||||
var newCommit = new NewCommit(message, sha, parent);
|
||||
return await _client.GitDatabase.Commit.Create(Helper.UserName, _repository.Name, newCommit);
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
|
||||
Reference in New Issue
Block a user