mirror of
https://github.com/zoriya/octokit.net.git
synced 2026-06-07 20:30:41 +00:00
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:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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";
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user