Implemented Merged? functionality / tests

Bugfix for building the merge api url, as well.
This commit is contained in:
Josh Sullivan
2013-11-12 01:34:00 -05:00
committed by Brendan Forster
parent a2f3de45b8
commit 9d3f7581e7
14 changed files with 126 additions and 49 deletions
@@ -74,5 +74,15 @@ namespace Octokit
/// <param name="mergePullRequest">A <see cref="MergePullRequest"/> instance describing a pull request merge</param>
/// <returns></returns>
IObservable<PullRequestMerge> Merge(string owner, string name, int number, MergePullRequest mergePullRequest);
/// <summary>
/// Gets the pull request merge status.
/// </summary>
/// <remarks>http://developer.github.com/v3/pulls/#get-if-a-pull-request-has-been-merged</remarks>
/// <param name="owner">The owner of the repository</param>
/// <param name="name">The name of the repository</param>
/// <param name="number">The pull request number</param>
/// <returns></returns>
IObservable<PullRequestMerge> Merged(string owner, string name, int number);
}
}
@@ -1,6 +1,7 @@
using System;
using System.Reactive;
using System.Reactive.Threading.Tasks;
using System.Threading.Tasks;
using Octokit.Reactive.Internal;
namespace Octokit.Reactive.Clients
@@ -120,5 +121,21 @@ namespace Octokit.Reactive.Clients
return _client.Merge(owner, name, number, mergePullRequest).ToObservable();
}
/// <summary>
/// Merges a pull request.
/// </summary>
/// <remarks>http://developer.github.com/v3/pulls/#merge-a-pull-request-merge-buttontrade</remarks>
/// <param name="owner">The owner of the repository</param>
/// <param name="name">The name of the repository</param>
/// <param name="number">The pull request number</param>
/// <returns></returns>
public IObservable<PullRequestMerge> Merged(string owner, string name, int number)
{
Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
Ensure.ArgumentNotNullOrEmptyString(name, "name");
return _client.Merged(owner, name, number).ToObservable();
}
}
}
@@ -122,6 +122,8 @@
<Compile Include="Clients\ObservableWatchedClient.cs" />
<Compile Include="Clients\IObservableFollowersClient.cs" />
<Compile Include="Clients\ObservableFollowersClient.cs" />
<Compile Include="Clients\IObservablePullRequestsClient.cs" />
<Compile Include="Clients\ObservablePullRequestsClient.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup>
@@ -131,6 +131,8 @@
<Compile Include="Clients\ObservableWatchedClient.cs" />
<Compile Include="Clients\IObservableFollowersClient.cs" />
<Compile Include="Clients\ObservableFollowersClient.cs" />
<Compile Include="Clients\IObservablePullRequestsClient.cs" />
<Compile Include="Clients\ObservablePullRequestsClient.cs" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Novell\Novell.MonoDroid.CSharp.targets" />
<ItemGroup>
@@ -126,6 +126,8 @@
<Compile Include="Clients\ObservableWatchedClient.cs" />
<Compile Include="Clients\IObservableFollowersClient.cs" />
<Compile Include="Clients\ObservableFollowersClient.cs" />
<Compile Include="Clients\IObservablePullRequestsClient.cs" />
<Compile Include="Clients\ObservablePullRequestsClient.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup>
@@ -145,7 +145,7 @@ namespace Octokit.Tests.Clients
client.Merge("fake", "repo", 42, mergePullRequest);
connection.Received().Put<PullRequestMerge>(Arg.Is<Uri>(u => u.ToString() == "repos/fake/repo/pulls/42"),
connection.Received().Put<PullRequestMerge>(Arg.Is<Uri>(u => u.ToString() == "repos/fake/repo/pulls/42/merge"),
mergePullRequest);
}
@@ -164,6 +164,32 @@ namespace Octokit.Tests.Clients
}
}
public class TheMergedMethod
{
[Fact]
public void PutsToCorrectUrl()
{
var connection = Substitute.For<IApiConnection>();
var client = new PullRequestsClient(connection);
client.Merged("fake", "repo", 42);
connection.Received().Get<PullRequestMerge>(Arg.Is<Uri>(u => u.ToString() == "repos/fake/repo/pulls/42/merge"), null);
}
[Fact]
public async Task EnsuresArgumentsNotNull()
{
var connection = Substitute.For<IApiConnection>();
var client = new PullRequestsClient(connection);
AssertEx.Throws<ArgumentNullException>(async () => await
client.Merge(null, "name", 42, new MergePullRequest("message")));
AssertEx.Throws<ArgumentException>(async () => await
client.Merge("owner", null, 42, new MergePullRequest("message")));
}
}
public class TheCtor
{
[Fact]
+10
View File
@@ -72,5 +72,15 @@ namespace Octokit
/// <param name="mergePullRequest">A <see cref="MergePullRequest"/> instance describing a pull request merge</param>
/// <returns></returns>
Task<PullRequestMerge> Merge(string owner, string name, int number, MergePullRequest mergePullRequest);
/// <summary>
/// Gets the pull request merge status.
/// </summary>
/// <remarks>http://developer.github.com/v3/pulls/#get-if-a-pull-request-has-been-merged</remarks>
/// <param name="owner">The owner of the repository</param>
/// <param name="name">The name of the repository</param>
/// <param name="number">The pull request number</param>
/// <returns></returns>
Task<PullRequestMerge> Merged(string owner, string name, int number);
}
}
+18 -1
View File
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Net;
using System.Threading.Tasks;
namespace Octokit
@@ -111,7 +112,23 @@ namespace Octokit
Ensure.ArgumentNotNullOrEmptyString(name, "name");
Ensure.ArgumentNotNull(mergePullRequest, "mergePullRequest");
return ApiConnection.Put<PullRequestMerge>(ApiUrls.PullRequest(owner, name, number), mergePullRequest);
return ApiConnection.Put<PullRequestMerge>(ApiUrls.MergePullRequest(owner, name, number), mergePullRequest);
}
/// <summary>
/// Gets the pull request merge status.
/// </summary>
/// <remarks>http://developer.github.com/v3/pulls/#get-if-a-pull-request-has-been-merged</remarks>
/// <param name="owner">The owner of the repository</param>
/// <param name="name">The name of the repository</param>
/// <param name="number">The pull request number</param>
/// <returns></returns>
public Task<PullRequestMerge> Merged(string owner, string name, int number)
{
Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
Ensure.ArgumentNotNullOrEmptyString(name, "name");
return ApiConnection.Get<PullRequestMerge>(ApiUrls.MergePullRequest(owner, name, number));
}
}
}
+34 -23
View File
@@ -564,6 +564,40 @@ namespace Octokit
{
return "gists/{0}/comments".FormatUri(gistId);
}
/// <summary>
/// Returns the <see cref="Uri"/> that returns the specified pull request.
/// </summary>
/// <param name="owner">The owner of the repository</param>
/// <param name="name">The name of the repository</param>
/// /// <param name="number">The pull request number</param>
/// <returns></returns>
public static Uri PullRequest(string owner, string name, int number)
{
return "repos/{0}/{1}/pulls/{2}".FormatUri(owner, name, number);
}
/// <summary>
/// Returns the <see cref="Uri"/> that lists the pull requests for a repository.
/// </summary>
/// <param name="owner">The owner of the repository</param>
/// <param name="name">The name of the repository</param>
/// <returns></returns>
public static Uri PullRequests(string owner, string name)
{
return "repos/{0}/{1}/pulls".FormatUri(owner, name);
}
/// <summary>
/// Returns the <see cref="Uri"/> that returns the pull request merge state.
/// </summary>
/// <param name="owner">The owner of the repository</param>
/// <param name="name">The name of the repository</param>
/// /// <param name="number">The pull request number</param>
public static Uri MergePullRequest(string owner, string name, int number)
{
return "repos/{0}/{1}/pulls/{2}/merge".FormatUri(owner, name, number);
}
/// <summary>
/// Returns the <see cref="Uri"/> for a spesific comment for the specified commit.
@@ -895,28 +929,5 @@ namespace Octokit
{
return "users/{0}/following/{1}".FormatUri(login, following);
}
/// <summary>
/// Returns the <see cref="Uri"/> that lists the pull requests for a repository.
/// </summary>
/// <param name="owner">The owner of the repository</param>
/// <param name="name">The name of the repository</param>
/// <returns></returns>
public static Uri PullRequests(string owner, string name)
{
return "repos/{0}/{1}/pulls".FormatUri(owner, name);
}
/// <summary>
/// Returns the <see cref="Uri"/> that returns the specified pull request.
/// </summary>
/// <param name="owner">The owner of the repository</param>
/// <param name="name">The name of the repository</param>
/// /// <param name="number">The pull request number</param>
/// <returns></returns>
public static Uri PullRequest(string owner, string name, int number)
{
return "repos/{0}/{1}/pulls/{2}".FormatUri(owner, name, number);
}
}
}
-6
View File
@@ -102,7 +102,6 @@
<Compile Include="Models\Request\Permission.cs" />
<Compile Include="Models\Request\ReferenceUpdate.cs" />
<Compile Include="Models\Request\NewPullRequest.cs" />
<Compile Include="Models\Request\NewTag.cs" />
<Compile Include="Models\Request\PullRequestRequest.cs" />
<Compile Include="Models\Request\PullRequestUpdate.cs" />
<Compile Include="Models\Request\RequestParameters.cs" />
@@ -263,11 +262,6 @@
<Compile Include="Models\Response\Emoji.cs" />
<Compile Include="Clients\FollowersClient.cs" />
<Compile Include="Clients\IFollowersClient.cs" />
<Compile Include="Clients\IPullRequestsClient.cs" />
<Compile Include="Clients\PullRequestsClient.cs" />
<Compile Include="Models\Request\NewPullRequest.cs" />
<Compile Include="Models\Request\PullRequestRequest.cs" />
<Compile Include="Models\Request\PullRequestUpdate.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
</Project>
+2 -6
View File
@@ -272,11 +272,7 @@
<Compile Include="Models\Response\Emoji.cs" />
<Compile Include="Clients\FollowersClient.cs" />
<Compile Include="Clients\IFollowersClient.cs" />
<Compile Include="Clients\IPullRequestsClient.cs" />
<Compile Include="Clients\PullRequestsClient.cs" />
<Compile Include="Models\Request\NewPullRequest.cs" />
<Compile Include="Models\Request\PullRequestRequest.cs" />
<Compile Include="Models\Request\PullRequestUpdate.cs" />
<Compile Include="Models\Response\TeamItem.cs" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Novell\Novell.MonoDroid.CSharp.targets" />
</Project>
</Project>
+2 -6
View File
@@ -267,11 +267,7 @@
<Compile Include="Models\Response\Emoji.cs" />
<Compile Include="Clients\FollowersClient.cs" />
<Compile Include="Clients\IFollowersClient.cs" />
<Compile Include="Clients\IPullRequestsClient.cs" />
<Compile Include="Clients\PullRequestsClient.cs" />
<Compile Include="Models\Request\NewPullRequest.cs" />
<Compile Include="Models\Request\PullRequestRequest.cs" />
<Compile Include="Models\Request\PullRequestUpdate.cs" />
<Compile Include="Models\Response\TeamItem.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
</Project>
</Project>
-5
View File
@@ -260,11 +260,6 @@
<Compile Include="Models\Request\BodyWrapper.cs" />
<Compile Include="Models\Request\BaseSearchRequest.cs" />
<Compile Include="Models\Response\Emoji.cs" />
<Compile Include="Clients\IPullRequestsClient.cs" />
<Compile Include="Clients\PullRequestsClient.cs" />
<Compile Include="Models\Request\NewPullRequest.cs" />
<Compile Include="Models\Request\PullRequestRequest.cs" />
<Compile Include="Models\Request\PullRequestUpdate.cs" />
</ItemGroup>
<ItemGroup>
<CodeAnalysisDictionary Include="..\CustomDictionary.xml">
-1
View File
@@ -156,7 +156,6 @@
<Compile Include="Models\Response\GistFork.cs" />
<Compile Include="Models\Response\GistHistory.cs" />
<Compile Include="Models\Response\PullRequestMerge.cs" />
<Compile Include="Models\Response\TeamItem.cs" />
<Compile Include="Models\Response\Team.cs" />
<Compile Include="Models\Response\EventInfo.cs" />
<Compile Include="Models\Response\GitReference.cs" />