Merge pull request #1195 from rogertinsley/issue-1189

New method on RepositoryCommits client - Get the sha1 of a commit reference
This commit is contained in:
Ryan Gribble
2016-03-22 22:12:18 +10:00
9 changed files with 167 additions and 2 deletions
@@ -43,5 +43,14 @@ namespace Octokit.Reactive
/// <param name="request">Used to filter list of commits returned</param>
/// <returns></returns>
IObservable<GitHubCommit> GetAll(string owner, string name, CommitRequest request);
/// <summary>
/// Get the SHA-1 of a commit reference
/// </summary>
/// <param name="owner">The owner of the repository</param>
/// <param name="name">The name of the repository</param>
/// <param name="reference">The repository reference</param>
/// <returns></returns>
IObservable<string> GetSha1(string owner, string name, string reference);
}
}
@@ -73,5 +73,21 @@ namespace Octokit.Reactive
return _connection.GetAndFlattenAllPages<GitHubCommit>(ApiUrls.RepositoryCommits(owner, name),
request.ToParametersDictionary());
}
/// <summary>
/// Get the SHA-1 of a commit reference
/// </summary>
/// <param name="owner">The owner of the repository</param>
/// <param name="name">The name of the repository</param>
/// <param name="reference">The repository reference</param>
/// <returns></returns>
public IObservable<string> GetSha1(string owner, string name, string reference)
{
Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
Ensure.ArgumentNotNullOrEmptyString(name, "name");
Ensure.ArgumentNotNullOrEmptyString(reference, "reference");
return _commit.GetSha1(owner, name, reference).ToObservable();
}
}
}
@@ -87,6 +87,14 @@ public class RepositoryCommitsClientTests
.Where(file => file.Status == "renamed")
.All(file => string.IsNullOrEmpty(file.PreviousFileName) == false));
}
[IntegrationTest]
public async Task CanGetSha1()
{
var sha1 = await _fixture.GetSha1("octokit", "octokit.net", "master");
Assert.NotNull(sha1);
}
}
public class TestsWithNewRepository : IDisposable
@@ -158,7 +166,17 @@ public class RepositoryCommitsClientTests
Assert.Equal(0, result.BehindBy);
}
async Task CreateTheWorld()
[IntegrationTest]
public async Task GetSha1FromRepository()
{
var reference = await CreateTheWorld();
var sha1 = await _fixture.GetSha1(Helper.UserName, _context.RepositoryName, "master");
Assert.Equal(reference.Object.Sha, sha1);
}
async Task<Reference> CreateTheWorld()
{
var master = await _github.Git.Reference.Get(Helper.UserName, _context.RepositoryName, "heads/master");
@@ -174,7 +192,7 @@ public class RepositoryCommitsClientTests
var newFeature = await CreateCommit("this is the commit to merge into the pull request", featureBranchTree.Sha, newMaster.Sha);
// create branch
await _github.Git.Reference.Create(Helper.UserName, _context.RepositoryName, new NewReference("refs/heads/my-branch", newFeature.Sha));
return await _github.Git.Reference.Create(Helper.UserName, _context.RepositoryName, new NewReference("refs/heads/my-branch", newFeature.Sha));
}
async Task<TreeResponse> CreateTree(IDictionary<string, string> treeContents)
@@ -789,5 +789,40 @@ namespace Octokit.Tests.Clients
await Assert.ThrowsAsync<ArgumentException>(() => client.EditBranch("owner", "repo", "", update));
}
}
public class TheGetSha1Method
{
[Fact]
public void EnsuresNonNullArguments()
{
var client = new RepositoryCommitsClient(Substitute.For<IApiConnection>());
Assert.ThrowsAsync<ArgumentException>(() => client.GetSha1("", "name", "reference"));
Assert.ThrowsAsync<ArgumentException>(() => client.GetSha1("owner", "", "reference"));
Assert.ThrowsAsync<ArgumentException>(() => client.GetSha1("owner", "name", ""));
}
[Fact]
public async Task EnsuresNonEmptyArguments()
{
var client = new RepositoryCommitsClient(Substitute.For<IApiConnection>());
await Assert.ThrowsAsync<ArgumentNullException>(() => client.GetSha1(null, "name", "reference"));
await Assert.ThrowsAsync<ArgumentNullException>(() => client.GetSha1("owner", null, "reference"));
await Assert.ThrowsAsync<ArgumentNullException>(() => client.GetSha1("owner", "name", null));
}
[Fact]
public void GetsCorrectUrl()
{
var connection = Substitute.For<IApiConnection>();
var client = new RepositoryCommitsClient(connection);
client.GetSha1("owner", "name", "reference");
connection.Received()
.Get<string>(Arg.Is<Uri>(u => u.ToString() == "repos/owner/name/commits/reference"), null, AcceptHeaders.CommitReferenceSha1Preview);
}
}
}
}
+1
View File
@@ -213,6 +213,7 @@
<Compile Include="Reactive\ObservableReleasesClientTests.cs" />
<Compile Include="Reactive\ObservablePullRequestReviewCommentsClientTests.cs" />
<Compile Include="Reactive\ObservableRepositoriesClientTests.cs" />
<Compile Include="Reactive\ObservableRepositoryCommitsClientTests.cs" />
<Compile Include="Reactive\ObservableRepositoryDeployKeysClientTests.cs" />
<Compile Include="Reactive\ObservableGistsTests.cs" />
<Compile Include="Reactive\ObservableStarredClientTests.cs" />
@@ -0,0 +1,59 @@
using System;
using System.Reactive.Threading.Tasks;
using System.Threading.Tasks;
using NSubstitute;
using Octokit.Reactive;
using Xunit;
namespace Octokit.Tests.Reactive
{
public class ObservableRepositoryCommitsClientTests
{
public class TheCtor
{
[Fact]
public void EnsuresArgument()
{
Assert.Throws<ArgumentNullException>(() => new ObservableRepositoryCommitsClient(null));
}
}
public class TheGetSha1Method
{
[Fact]
public void EnsuresNonEmptyArguments()
{
var client = new ObservableRepositoryCommitsClient(Substitute.For<IGitHubClient>());
Assert.ThrowsAsync<ArgumentException>(() => client.GetSha1("", "name", "reference").ToTask());
Assert.ThrowsAsync<ArgumentException>(() => client.GetSha1("owner", "", "reference").ToTask());
Assert.ThrowsAsync<ArgumentException>(() => client.GetSha1("owner", "name", "").ToTask());
}
[Fact]
public async Task EnsuresNonNullArguments()
{
var client = new ObservableRepositoryCommitsClient(Substitute.For<IGitHubClient>());
await Assert.ThrowsAsync<ArgumentNullException>(() => client.GetSha1(null, "name", "reference").ToTask());
await Assert.ThrowsAsync<ArgumentNullException>(() => client.GetSha1("owner", null, "reference").ToTask());
await Assert.ThrowsAsync<ArgumentNullException>(() => client.GetSha1("owner", "name", null).ToTask());
}
[Fact]
public void GetsCorrectUrl()
{
var gitHubClient = Substitute.For<IGitHubClient>();
var client = new ObservableRepositoryCommitsClient(gitHubClient);
client.GetSha1("owner", "name", "reference");
gitHubClient
.Received()
.Repository
.Commit
.GetSha1("owner", "name", "reference");
}
}
}
}
@@ -50,5 +50,14 @@ namespace Octokit
/// <param name="request">Used to filter list of commits returned</param>
/// <returns></returns>
Task<IReadOnlyList<GitHubCommit>> GetAll(string owner, string name, CommitRequest request);
/// <summary>
/// Get the SHA-1 of a commit reference
/// </summary>
/// <param name="owner">The owner of the repository</param>
/// <param name="name">The name of the repository</param>
/// <param name="reference">The repository reference</param>
/// <returns></returns>
Task<string> GetSha1(string owner, string name, string reference);
}
}
@@ -79,5 +79,21 @@ namespace Octokit
return _apiConnection.GetAll<GitHubCommit>(ApiUrls.RepositoryCommits(owner, name),
request.ToParametersDictionary());
}
/// <summary>
/// Get the SHA-1 of a commit reference
/// </summary>
/// <param name="owner">The owner of the repository</param>
/// <param name="name">The name of the repository</param>
/// <param name="reference">The repository reference</param>
/// <returns></returns>
public Task<string> GetSha1(string owner, string name, string reference)
{
Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
Ensure.ArgumentNotNullOrEmptyString(name, "name");
Ensure.ArgumentNotNullOrEmptyString(reference, "reference");
return _apiConnection.Get<string>(ApiUrls.RepositoryCommit(owner, name, reference), null, AcceptHeaders.CommitReferenceSha1Preview);
}
}
}
+2
View File
@@ -13,5 +13,7 @@
public const string ProtectedBranchesApiPreview = "application/vnd.github.loki-preview+json";
public const string StarCreationTimestamps = "application/vnd.github.v3.star+json";
public const string CommitReferenceSha1Preview = "application/vnd.github.chitauri-preview+sha";
}
}