From 9ba53775999fc46cf26a60927cbf3249870576e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lars=20Tabro=20S=C3=B8rensen?= Date: Wed, 5 Nov 2014 09:13:06 +0100 Subject: [PATCH] Initial integration tests - needs to create a branch to check mergin between branches --- .../Clients/MergingClientTests.cs | 65 +++++++++++++++++++ .../Octokit.Tests.Integration.csproj | 1 + Octokit.Tests/Clients/MargeClientTests.cs | 54 +++++++++++++++ Octokit/Clients/GitDatabaseClient.cs | 2 + Octokit/Clients/IGitDatabaseClient.cs | 1 + Octokit/Helpers/ApiUrls.cs | 2 +- Octokit/Models/Response/Merge.cs | 16 +++++ 7 files changed, 140 insertions(+), 1 deletion(-) create mode 100644 Octokit.Tests.Integration/Clients/MergingClientTests.cs create mode 100644 Octokit.Tests/Clients/MargeClientTests.cs create mode 100644 Octokit/Models/Response/Merge.cs diff --git a/Octokit.Tests.Integration/Clients/MergingClientTests.cs b/Octokit.Tests.Integration/Clients/MergingClientTests.cs new file mode 100644 index 00000000..a5d9d258 --- /dev/null +++ b/Octokit.Tests.Integration/Clients/MergingClientTests.cs @@ -0,0 +1,65 @@ +using System; +using System.Threading.Tasks; +using Octokit; +using Octokit.Tests.Integration; +using Xunit; + +public class MergingClientTests : IDisposable +{ + readonly IGitHubClient _client; + readonly Repository _repository; + readonly string _owner; + readonly IMergingClient _fixture; + readonly ICommitsClient _commitsClient; + + public MergingClientTests() + { + _client = new GitHubClient(new ProductHeaderValue("OctokitTests")) + { + Credentials = Helper.Credentials + }; + + var repoName = Helper.MakeNameWithTimestamp("public-repo"); + _fixture = _client.GitDatabase.Merging; + _commitsClient = _client.GitDatabase.Commit; + _repository = _client.Repository.Create(new NewRepository { Name = repoName, AutoInit = true }).Result; + _owner = _repository.Owner.Login; + } + + [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"); + + var merge = await _fixture.Create(_owner, _repository.Name, newMerge); + Assert.NotNull(merge); + } + + public void Dispose() + { + Helper.DeleteRepo(_repository); + } +} diff --git a/Octokit.Tests.Integration/Octokit.Tests.Integration.csproj b/Octokit.Tests.Integration/Octokit.Tests.Integration.csproj index 2c11df59..ba5c7c37 100644 --- a/Octokit.Tests.Integration/Octokit.Tests.Integration.csproj +++ b/Octokit.Tests.Integration/Octokit.Tests.Integration.csproj @@ -63,6 +63,7 @@ + diff --git a/Octokit.Tests/Clients/MargeClientTests.cs b/Octokit.Tests/Clients/MargeClientTests.cs new file mode 100644 index 00000000..4cac3deb --- /dev/null +++ b/Octokit.Tests/Clients/MargeClientTests.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using NSubstitute; +using Octokit.Tests.Helpers; +using Xunit; + +namespace Octokit.Tests.Clients +{ + public class MargeClientTests + { + public class TheCreateMethod + { + [Fact] + public void PostsToTheCorrectUrl() + { + var connection = Substitute.For(); + var client = new MergingClient(connection); + + var newMerge = new NewMerge("baseBranch", "shaToMerge", "some mergingMessage"); + client.Create("owner", "repo", newMerge); + + connection.Received().Post(Arg.Is(u => u.ToString() == "repos/owner/repo/git/merges"), + Arg.Is(nm => nm.Base == "baseBranch" + && nm.Head == "shaToMerge" + && nm.CommitMessage == "some mergingMessage")); + } + + [Fact] + public async Task EnsuresNonNullArguments() + { + var client = new MergingClient(Substitute.For()); + + var newMerge = new NewMerge("baseBranch", "shaToMerge", "some mergingMessage"); + await AssertEx.Throws(async () => await client.Create(null, "name", newMerge)); + await AssertEx.Throws(async () => await client.Create("owner", null, newMerge)); + await AssertEx.Throws(async () => await client.Create("owner", "name", null)); + await AssertEx.Throws(async () => await client.Create("", "name", newMerge)); + await AssertEx.Throws(async () => await client.Create("owner", "", newMerge)); + await AssertEx.Throws(async () => await client.Create("owner", "", null)); + } + } + + public class TheCtor + { + [Fact] + public void EnsuresArgument() + { + Assert.Throws(() => new CommitsClient(null)); + } + } + } +} diff --git a/Octokit/Clients/GitDatabaseClient.cs b/Octokit/Clients/GitDatabaseClient.cs index 4265df77..fe1be7c8 100644 --- a/Octokit/Clients/GitDatabaseClient.cs +++ b/Octokit/Clients/GitDatabaseClient.cs @@ -19,6 +19,7 @@ Tree = new TreesClient(apiConnection); Tag = new TagsClient(apiConnection); Commit = new CommitsClient(apiConnection); + Merging = new MergingClient(apiConnection); Reference = new ReferencesClient(apiConnection); } @@ -26,6 +27,7 @@ public ITreesClient Tree { get; private set; } public ITagsClient Tag { get; private set; } public ICommitsClient Commit { get; private set; } + public IMergingClient Merging { get; private set; } public IReferencesClient Reference { get; private set; } } } \ No newline at end of file diff --git a/Octokit/Clients/IGitDatabaseClient.cs b/Octokit/Clients/IGitDatabaseClient.cs index 328fde5f..0ff1306d 100644 --- a/Octokit/Clients/IGitDatabaseClient.cs +++ b/Octokit/Clients/IGitDatabaseClient.cs @@ -12,6 +12,7 @@ ITagsClient Tag { get; } ITreesClient Tree { get; } ICommitsClient Commit { get; } + IMergingClient Merging { get; } IReferencesClient Reference { get; } } } \ No newline at end of file diff --git a/Octokit/Helpers/ApiUrls.cs b/Octokit/Helpers/ApiUrls.cs index 7a980458..0927bba3 100644 --- a/Octokit/Helpers/ApiUrls.cs +++ b/Octokit/Helpers/ApiUrls.cs @@ -799,7 +799,7 @@ namespace Octokit /// public static Uri CreateMerge(string owner, string name) { - return "repos/{0}/{1}/git/merges".FormatUri(owner, name); + return "repos/{0}/{1}/merges".FormatUri(owner, name); } /// diff --git a/Octokit/Models/Response/Merge.cs b/Octokit/Models/Response/Merge.cs new file mode 100644 index 00000000..91a150b5 --- /dev/null +++ b/Octokit/Models/Response/Merge.cs @@ -0,0 +1,16 @@ +using System.Collections.Generic; +using System.Diagnostics; + +namespace Octokit +{ + [DebuggerDisplay("{DebuggerDisplay,nq}")] + public class Merge : GitReference + { + public string Message { get; set; } + public Signature Author { get; set; } + public Signature Committer { get; set; } + public GitReference Tree { get; set; } + public IEnumerable Parents { get; set; } + public int CommentCount { get; set; } + } +} \ No newline at end of file