-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #512 from alfhenrik/repo-deploykeys-client
Implement Repository Deploy Keys client
- Loading branch information
Showing
28 changed files
with
922 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
59 changes: 59 additions & 0 deletions
59
Octokit.Reactive/Clients/IObservableRepositoryDeployKeysClient.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
using System; | ||
using System.Collections.Generic; | ||
using System.Diagnostics.CodeAnalysis; | ||
using System.Linq; | ||
using System.Reactive; | ||
using System.Text; | ||
using System.Threading.Tasks; | ||
|
||
namespace Octokit.Reactive | ||
{ | ||
public interface IObservableRepositoryDeployKeysClient | ||
{ | ||
/// <summary> | ||
/// Get a single deploy key by number for a repository. | ||
/// </summary> | ||
/// <remarks> | ||
/// See the <a href="https://developer.github.com/v3/repos/keys/#get"> API documentation</a> for more information. | ||
/// </remarks> | ||
/// <param name="owner">The owner of the repository.</param> | ||
/// <param name="name">The name of the repository.</param> | ||
/// <param name="number">The id of the deploy key.</param> | ||
[SuppressMessage("Microsoft.Naming", "CA1716:IdentifiersShouldNotMatchKeywords", MessageId = "Get")] | ||
IObservable<DeployKey> Get(string owner, string name, int number); | ||
|
||
/// <summary> | ||
/// Get all deploy keys for a repository. | ||
/// </summary> | ||
/// <remarks> | ||
/// See the <a href="https://developer.github.com/v3/repos/keys/#list"> API documentation</a> for more information. | ||
/// </remarks> | ||
/// <param name="owner">The owner of the repository.</param> | ||
/// <param name="name">The name of the repository.</param> | ||
IObservable<DeployKey> GetAll(string owner, string name); | ||
|
||
/// <summary> | ||
/// Creates a new deploy key for a repository. | ||
/// </summary> | ||
/// <remarks> | ||
/// See the <a href="https://developer.github.com/v3/repos/keys/#create"> API documentation</a> for more information. | ||
/// </remarks> | ||
/// <param name="owner">The owner of the repository.</param> | ||
/// <param name="name">The name of the repository.</param> | ||
/// <param name="newDeployKey">The deploy key to create for the repository.</param> | ||
/// <returns></returns> | ||
IObservable<DeployKey> Create(string owner, string name, NewDeployKey newDeployKey); | ||
|
||
/// <summary> | ||
/// Deletes a deploy key from a repository. | ||
/// </summary> | ||
/// <remarks> | ||
/// See the <a href="https://developer.github.com/v3/repos/keys/#delete"> API documentation</a> for more information. | ||
/// </remarks> | ||
/// <param name="owner">The owner of the repository.</param> | ||
/// <param name="name">The name of the repository.</param> | ||
/// <param name="number">The id of the deploy key to delete.</param> | ||
/// <returns></returns> | ||
IObservable<Unit> Delete(string owner, string name, int number); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
102 changes: 102 additions & 0 deletions
102
Octokit.Reactive/Clients/ObservableRepositoryDeployKeysClient.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,102 @@ | ||
using System; | ||
using System.Collections.Generic; | ||
using System.Linq; | ||
using System.Reactive; | ||
using System.Reactive.Threading.Tasks; | ||
using System.Text; | ||
using System.Threading.Tasks; | ||
using Octokit.Reactive.Internal; | ||
|
||
namespace Octokit.Reactive | ||
{ | ||
public class ObservableRepositoryDeployKeysClient : IObservableRepositoryDeployKeysClient | ||
{ | ||
readonly IRepositoryDeployKeysClient _client; | ||
readonly IConnection _connection; | ||
|
||
public ObservableRepositoryDeployKeysClient(IGitHubClient client) | ||
{ | ||
Ensure.ArgumentNotNull(client, "client"); | ||
|
||
_client = client.Repository.DeployKeys; | ||
_connection = client.Connection; | ||
} | ||
|
||
/// <summary> | ||
/// Get a single deploy key by number for a repository. | ||
/// </summary> | ||
/// <remarks> | ||
/// See the <a href="https://developer.github.com/v3/repos/keys/#get"> API documentation</a> for more information. | ||
/// </remarks> | ||
/// <param name="owner">The owner of the repository.</param> | ||
/// <param name="name">The name of the repository.</param> | ||
/// <param name="number">The id of the deploy key.</param> | ||
public IObservable<DeployKey> Get(string owner, string name, int number) | ||
{ | ||
Ensure.ArgumentNotNullOrEmptyString(owner, "owner"); | ||
Ensure.ArgumentNotNullOrEmptyString(name, "name"); | ||
|
||
return _client.Get(owner, name, number).ToObservable(); | ||
} | ||
|
||
/// <summary> | ||
/// Get all deploy keys for a repository. | ||
/// </summary> | ||
/// <remarks> | ||
/// See the <a href="https://developer.github.com/v3/repos/keys/#list"> API documentation</a> for more information. | ||
/// </remarks> | ||
/// <param name="owner">The owner of the repository.</param> | ||
/// <param name="name">The name of the repository.</param> | ||
public IObservable<DeployKey> GetAll(string owner, string name) | ||
{ | ||
Ensure.ArgumentNotNullOrEmptyString(owner, "owner"); | ||
Ensure.ArgumentNotNullOrEmptyString(name, "name"); | ||
|
||
return _connection.GetAndFlattenAllPages<DeployKey>(ApiUrls.RepositoryDeployKeys(owner, name)); | ||
} | ||
|
||
/// <summary> | ||
/// Creates a new deploy key for a repository. | ||
/// </summary> | ||
/// <remarks> | ||
/// See the <a href="https://developer.github.com/v3/repos/keys/#create"> API documentation</a> for more information. | ||
/// </remarks> | ||
/// <param name="owner">The owner of the repository.</param> | ||
/// <param name="name">The name of the repository.</param> | ||
/// <param name="newDeployKey">The deploy key to create for the repository.</param> | ||
/// <returns></returns> | ||
public IObservable<DeployKey> Create(string owner, string name, NewDeployKey newDeployKey) | ||
{ | ||
Ensure.ArgumentNotNullOrEmptyString(owner, "owner"); | ||
Ensure.ArgumentNotNullOrEmptyString(name, "name"); | ||
Ensure.ArgumentNotNull(newDeployKey, "newDeployKey"); | ||
|
||
|
||
if (string.IsNullOrWhiteSpace(newDeployKey.Title)) | ||
throw new ArgumentException("The new deploy key's title must not be null."); | ||
|
||
if (string.IsNullOrWhiteSpace(newDeployKey.Key)) | ||
throw new ArgumentException("The new deploy key's key must not be null."); | ||
|
||
return _client.Create(owner, name, newDeployKey).ToObservable(); | ||
} | ||
|
||
/// <summary> | ||
/// Deletes a deploy key from a repository. | ||
/// </summary> | ||
/// <remarks> | ||
/// See the <a href="https://developer.github.com/v3/repos/keys/#delete"> API documentation</a> for more information. | ||
/// </remarks> | ||
/// <param name="owner">The owner of the repository.</param> | ||
/// <param name="name">The name of the repository.</param> | ||
/// <param name="number">The id of the deploy key to delete.</param> | ||
/// <returns></returns> | ||
public IObservable<Unit> Delete(string owner, string name, int number) | ||
{ | ||
Ensure.ArgumentNotNullOrEmptyString(owner, "owner"); | ||
Ensure.ArgumentNotNullOrEmptyString(name, "name"); | ||
|
||
return _client.Delete(owner, name, number).ToObservable(); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
109 changes: 109 additions & 0 deletions
109
Octokit.Tests.Integration/Clients/RepositoryDeployKeysClientTests.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,109 @@ | ||
using System; | ||
using System.Threading.Tasks; | ||
using Octokit; | ||
using Octokit.Tests.Integration; | ||
using Xunit; | ||
|
||
public class RepositoryDeployKeysClientTests : IDisposable | ||
{ | ||
const string _key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDB8IE5+RppLpeW+6lqo0fpfvMunKg6W4bhYCfVJIOYbpKoHP95nTUMZPBT++9NLeB4/YsuNTCrrpnpjc4f2IVpGvloRiVXjAzoJk9QIL6uzn1zRFdvaxSJ3Urhe9LcLHcIgccgZgSdWGzaZI3xtMvGC4diwWNsPjvVc/RyDM/MPqAim0X5XVOQwEFsSsUSraezJ+VgYMYzLYBcKWW0B86HVVhL4ZtmcY/RN2544bljnzw2M3aQvXNPTvkuiUoqLOI+5/qzZ8PfkruO55YtweEd0lkY6oZvrBPMD6dLODEqMHb4tD6htx60wSipNqjPwpOMpzp0Bk3G909unVXi6Fw5"; | ||
const string _keyTitle = "octokit@github"; | ||
readonly IGitHubClient _client; | ||
IRepositoryDeployKeysClient _fixture; | ||
Repository _repository; | ||
DeployKey _deployKey; | ||
string _owner; | ||
|
||
public RepositoryDeployKeysClientTests() | ||
{ | ||
_client = new GitHubClient(new ProductHeaderValue("OctokitTests")) | ||
{ | ||
Credentials = Helper.Credentials | ||
}; | ||
|
||
var repoName = Helper.MakeNameWithTimestamp("public-repo"); | ||
_fixture = _client.Repository.DeployKeys; | ||
_repository = _client.Repository.Create(new NewRepository { Name = repoName, AutoInit = true }).Result; | ||
_owner = _repository.Owner.Login; | ||
|
||
} | ||
|
||
[IntegrationTest] | ||
public async Task CanCreateADeployKey() | ||
{ | ||
var deployKey = new NewDeployKey() | ||
{ | ||
Key = _key, | ||
Title = _keyTitle | ||
}; | ||
|
||
var deployKeyResult = await _fixture.Create(_owner, _repository.Name, deployKey); | ||
Assert.NotNull(deployKeyResult); | ||
Assert.Equal(_key, deployKeyResult.Key); | ||
Assert.Equal(_keyTitle, deployKeyResult.Title); | ||
} | ||
|
||
|
||
[IntegrationTest] | ||
public async Task CanRetrieveAllDeployKeys() | ||
{ | ||
var deployKeys = await _fixture.GetAll(_owner, _repository.Name); | ||
Assert.Equal(0, deployKeys.Count); | ||
|
||
var deployKey = new NewDeployKey() | ||
{ | ||
Key = _key, | ||
Title = _keyTitle | ||
}; | ||
|
||
await _fixture.Create(_owner, _repository.Name, deployKey); | ||
|
||
deployKeys = await _fixture.GetAll(_owner, _repository.Name); | ||
Assert.Equal(1, deployKeys.Count); | ||
Assert.Equal(_key, deployKeys[0].Key); | ||
Assert.Equal(_keyTitle, deployKeys[0].Title); | ||
} | ||
|
||
[IntegrationTest] | ||
public async Task CanRetrieveADeployKey() | ||
{ | ||
var newDeployKey = new NewDeployKey() | ||
{ | ||
Key = _key, | ||
Title = _keyTitle | ||
}; | ||
var deployKeyResult = await _fixture.Create(_owner, _repository.Name, newDeployKey); | ||
|
||
var deployKey = await _fixture.Get(_owner, _repository.Name, deployKeyResult.Id); | ||
Assert.NotNull(deployKey); | ||
Assert.Equal(deployKeyResult.Id, deployKey.Id); | ||
Assert.Equal(_key, deployKey.Key); | ||
Assert.Equal(_keyTitle, deployKey.Title); | ||
} | ||
|
||
[IntegrationTest] | ||
public async Task CanRemoveADeployKey() | ||
{ | ||
var newDeployKey = new NewDeployKey() | ||
{ | ||
Key = _key, | ||
Title = _keyTitle | ||
}; | ||
|
||
await _fixture.Create(_owner, _repository.Name, newDeployKey); | ||
|
||
var deployKeys = await _fixture.GetAll(_owner, _repository.Name); | ||
Assert.Equal(1, deployKeys.Count); | ||
Assert.Equal(_key, deployKeys[0].Key); | ||
Assert.Equal(_keyTitle, deployKeys[0].Title); | ||
|
||
await _fixture.Delete(_owner, _repository.Name, deployKeys[0].Id); | ||
deployKeys = await _fixture.GetAll(_owner, _repository.Name); | ||
Assert.Equal(0, deployKeys.Count); | ||
} | ||
|
||
public void Dispose() | ||
{ | ||
Helper.DeleteRepo(_repository); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.