mirror of
https://github.com/zoriya/octokit.net.git
synced 2025-12-05 23:06:10 +00:00
* created the interface and models for the repository secrets client * created a repository actions client to sit between repository and secrets for future extensibility * created the repository secret client and supporting objects to enable data transfer * created object for create or update secret body and made fixes to pass unit tests * created repository action unit tests * created unit tests for RepositorySecretsClient * removed set from secrets interface * fixed docs and added observable actions client * added Actions to repository client * created IObservable repository secrets client * fixed property in wrong interface fixed wrong Ctor unit test * created repository decrets reactive tests and clients * created organization actions and scerets classes and made them available through the oprganizations client * fixed intellisense text * removed uneeded getall call after return type change * created organization secret client and classes to support it * created the observable org secrets client and fixed a typo in a method name * added more ensure checks * removed unused xml doc setting * created the unit tests for the organization secrets client fixed broken unit test for repository secrets client * created observable organization actions and secrets client unit tests * added sodium.core to the integration tests to test secret creation * fixed keyid type * added actions client integration test classes (empty since the class currently doesn't have any native methods) * fixed deserialization issue * changed property name for deserialization issues * added doc for repoid on orginzation secrets url generator * created integration tests for repository and organization secrets * changed how return occurs for setting list of repos for secret * fixed some names and removed reset org name * created integration tests for observable org secrets client * removed default org value * created the integration tests for the observable repository secrets client * removed default owner project value * fixed unit tests * Update links to new docs site * Update doc links to new docs site * Update docs links to new docs site * Fix doc link to point to new docs site * Update links to new docs site * Update doc links to new docs site * Update docs links * Update docs * Update docs * Update doc links * Update docs * Update doc links * Update doc links * Update doc links * updated documentation links in actions and secrets clients * Update Octokit/Models/Response/SecretsPublicKey.cs Removing line for consistency. Co-authored-by: Thomas Hughes <iamhughes@github.com> * Update Octokit/Models/Response/RepositorySecret.cs Removing line for consistency. Co-authored-by: Thomas Hughes <iamhughes@github.com> * set default owner and repo * switched to using the Helper.Organization from a ORG constant set at the top of the file * swapped out variable at top of file for the Helper.Organization property * switched to helper method to create new repositories * Protected setters --> private setters in response models * RepositorySecret needs protected setters Co-authored-by: Mike Tolly <mike.tolly@takeda.com> Co-authored-by: Thomas Hughes <iamhughes@github.com> Co-authored-by: mptolly-takeda <61791994+mptolly-takeda@users.noreply.github.com>
283 lines
12 KiB
C#
283 lines
12 KiB
C#
using NSubstitute;
|
|
using Octokit.Reactive;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Reactive.Linq;
|
|
using System.Reactive.Threading.Tasks;
|
|
using System.Threading.Tasks;
|
|
using Xunit;
|
|
|
|
namespace Octokit.Tests.Reactive
|
|
{
|
|
public class ObservableOrganizationSecretsClientTests
|
|
{
|
|
public class TheCtor
|
|
{
|
|
[Fact]
|
|
public void EnsuresNonNullArguments()
|
|
{
|
|
Assert.Throws<ArgumentNullException>(() => new ObservableOrganizationSecretsClient(null));
|
|
}
|
|
}
|
|
|
|
public class GetPublicKeyMethod
|
|
{
|
|
[Fact]
|
|
public async Task RequestsTheCorrectUrl()
|
|
{
|
|
var gitHubClient = Substitute.For<IGitHubClient>();
|
|
var client = new ObservableOrganizationSecretsClient(gitHubClient);
|
|
|
|
await client.GetPublicKey("org");
|
|
|
|
gitHubClient.Received().Organization.Actions.Secrets.GetPublicKey("org");
|
|
}
|
|
|
|
[Fact]
|
|
public async Task EnsuresNonNullArguments()
|
|
{
|
|
var client = new ObservableOrganizationSecretsClient(Substitute.For<IGitHubClient>());
|
|
|
|
await Assert.ThrowsAsync<ArgumentNullException>(() => client.GetPublicKey(null).ToTask());
|
|
await Assert.ThrowsAsync<ArgumentException>(() => client.GetPublicKey("").ToTask());
|
|
}
|
|
}
|
|
|
|
public class GetAllMethod
|
|
{
|
|
[Fact]
|
|
public async Task RequestsTheCorrectUrl()
|
|
{
|
|
var gitHubClient = Substitute.For<IGitHubClient>();
|
|
var client = new ObservableOrganizationSecretsClient(gitHubClient);
|
|
|
|
await client.GetAll("org");
|
|
|
|
gitHubClient.Received().Organization.Actions.Secrets.GetAll("org");
|
|
}
|
|
|
|
[Fact]
|
|
public async Task EnsuresNonNullArguments()
|
|
{
|
|
var client = new ObservableOrganizationSecretsClient(Substitute.For<IGitHubClient>());
|
|
|
|
await Assert.ThrowsAsync<ArgumentNullException>(() => client.GetAll(null).ToTask());
|
|
await Assert.ThrowsAsync<ArgumentException>(() => client.GetAll("").ToTask());
|
|
}
|
|
}
|
|
|
|
public class GetMethod
|
|
{
|
|
[Fact]
|
|
public async Task RequestsTheCorrectUrl()
|
|
{
|
|
var gitHubClient = Substitute.For<IGitHubClient>();
|
|
var client = new ObservableOrganizationSecretsClient(gitHubClient);
|
|
|
|
await client.Get("org", "secret");
|
|
|
|
gitHubClient.Received().Organization.Actions.Secrets.Get("org", "secret");
|
|
}
|
|
|
|
[Fact]
|
|
public async Task EnsuresNonNullArguments()
|
|
{
|
|
var client = new ObservableOrganizationSecretsClient(Substitute.For<IGitHubClient>());
|
|
|
|
await Assert.ThrowsAsync<ArgumentNullException>(() => client.Get(null, "secret").ToTask());
|
|
await Assert.ThrowsAsync<ArgumentNullException>(() => client.Get("org", null).ToTask());
|
|
|
|
await Assert.ThrowsAsync<ArgumentException>(() => client.Get("", "secret").ToTask());
|
|
await Assert.ThrowsAsync<ArgumentException>(() => client.Get("org", "").ToTask());
|
|
}
|
|
}
|
|
|
|
public class CreateOrUpdateMethod
|
|
{
|
|
[Fact]
|
|
public async Task PostsTheCorrectUrl()
|
|
{
|
|
var gitHubClient = Substitute.For<IGitHubClient>();
|
|
var client = new ObservableOrganizationSecretsClient(gitHubClient);
|
|
var upsertSecret = new UpsertOrganizationSecret
|
|
{
|
|
EncryptedValue = "encryptedValue",
|
|
KeyId = "keyId",
|
|
Visibility = "private"
|
|
};
|
|
|
|
await client.CreateOrUpdate("org", "secret", upsertSecret);
|
|
|
|
gitHubClient.Received().Organization.Actions.Secrets.CreateOrUpdate("org", "secret", upsertSecret);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task EnsuresNonNullArguments()
|
|
{
|
|
var client = new ObservableOrganizationSecretsClient(Substitute.For<IGitHubClient>());
|
|
|
|
var upsertSecret = new UpsertOrganizationSecret
|
|
{
|
|
EncryptedValue = "encryptedValue",
|
|
KeyId = "keyId"
|
|
};
|
|
|
|
await Assert.ThrowsAsync<ArgumentNullException>(() => client.CreateOrUpdate(null, "secret", upsertSecret).ToTask());
|
|
await Assert.ThrowsAsync<ArgumentNullException>(() => client.CreateOrUpdate("owner", null, upsertSecret).ToTask());
|
|
await Assert.ThrowsAsync<ArgumentNullException>(() => client.CreateOrUpdate("owner", "secret", null).ToTask());
|
|
await Assert.ThrowsAsync<ArgumentNullException>(() => client.CreateOrUpdate("owner", "secret", new UpsertOrganizationSecret()).ToTask());
|
|
|
|
await Assert.ThrowsAsync<ArgumentException>(() => client.CreateOrUpdate("", "secret", upsertSecret).ToTask());
|
|
await Assert.ThrowsAsync<ArgumentException>(() => client.CreateOrUpdate("owner", "", upsertSecret).ToTask());
|
|
}
|
|
}
|
|
|
|
public class DeleteMethod
|
|
{
|
|
[Fact]
|
|
public async Task DeletesTheCorrectUrl()
|
|
{
|
|
var gitHubClient = Substitute.For<IGitHubClient>();
|
|
var client = new ObservableOrganizationSecretsClient(gitHubClient);
|
|
|
|
await client.Delete("org", "secret");
|
|
|
|
gitHubClient.Received().Organization.Actions.Secrets.Delete("org", "secret");
|
|
}
|
|
|
|
[Fact]
|
|
public async Task EnsuresNonNullArguments()
|
|
{
|
|
var client = new ObservableOrganizationSecretsClient(Substitute.For<IGitHubClient>());
|
|
|
|
await Assert.ThrowsAsync<ArgumentNullException>(() => client.Delete(null, "secret").ToTask());
|
|
await Assert.ThrowsAsync<ArgumentNullException>(() => client.Delete("owner", null).ToTask());
|
|
|
|
await Assert.ThrowsAsync<ArgumentException>(() => client.Delete("", "secret").ToTask());
|
|
await Assert.ThrowsAsync<ArgumentException>(() => client.Delete("owner", "").ToTask());
|
|
}
|
|
}
|
|
|
|
public class GetSelectedRepositoriesForSecretMethod
|
|
{
|
|
[Fact]
|
|
public async Task RequestsTheCorrectUrl()
|
|
{
|
|
var gitHubClient = Substitute.For<IGitHubClient>();
|
|
var client = new ObservableOrganizationSecretsClient(gitHubClient);
|
|
|
|
await client.GetSelectedRepositoriesForSecret("org", "secret");
|
|
|
|
gitHubClient.Received().Organization.Actions.Secrets.GetSelectedRepositoriesForSecret("org", "secret");
|
|
}
|
|
|
|
[Fact]
|
|
public async Task EnsuresNonNullArguments()
|
|
{
|
|
var client = new ObservableOrganizationSecretsClient(Substitute.For<IGitHubClient>());
|
|
|
|
await Assert.ThrowsAsync<ArgumentNullException>(() => client.GetSelectedRepositoriesForSecret(null, "secret").ToTask());
|
|
await Assert.ThrowsAsync<ArgumentNullException>(() => client.GetSelectedRepositoriesForSecret("org", null).ToTask());
|
|
await Assert.ThrowsAsync<ArgumentException>(() => client.GetSelectedRepositoriesForSecret("", "secret").ToTask());
|
|
await Assert.ThrowsAsync<ArgumentException>(() => client.GetSelectedRepositoriesForSecret("org", "").ToTask());
|
|
}
|
|
}
|
|
|
|
public class SetSelectedRepositoriesForSecretMethod
|
|
{
|
|
[Fact]
|
|
public async Task RequestsTheCorrectUrl()
|
|
{
|
|
var connection = Substitute.For<IApiConnection>();
|
|
var client = new OrganizationSecretsClient(connection);
|
|
|
|
var repoIds = new List<long>
|
|
{
|
|
1,
|
|
2,
|
|
3
|
|
};
|
|
var repos = new SelectedRepositoryCollection(repoIds);
|
|
|
|
await client.SetSelectedRepositoriesForSecret("org", "secret", repos);
|
|
|
|
connection.Received()
|
|
.Put<SelectedRepositoryCollection>(Arg.Is<Uri>(u => u.ToString() == "orgs/org/actions/secrets/secret/repositories"), repos);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task EnsuresNonNullArguments()
|
|
{
|
|
var client = new OrganizationSecretsClient(Substitute.For<IApiConnection>());
|
|
|
|
var repoIds = new List<long>
|
|
{
|
|
1,
|
|
2,
|
|
3
|
|
};
|
|
var repos = new SelectedRepositoryCollection(repoIds);
|
|
|
|
await Assert.ThrowsAsync<ArgumentNullException>(() => client.SetSelectedRepositoriesForSecret(null, "secret", repos));
|
|
await Assert.ThrowsAsync<ArgumentNullException>(() => client.SetSelectedRepositoriesForSecret("org", null, repos));
|
|
await Assert.ThrowsAsync<ArgumentNullException>(() => client.SetSelectedRepositoriesForSecret("org", "secret", null));
|
|
await Assert.ThrowsAsync<ArgumentNullException>(() => client.SetSelectedRepositoriesForSecret("org", "secret", new SelectedRepositoryCollection()));
|
|
await Assert.ThrowsAsync<ArgumentException>(() => client.SetSelectedRepositoriesForSecret("", "secret", repos));
|
|
await Assert.ThrowsAsync<ArgumentException>(() => client.SetSelectedRepositoriesForSecret("org", "", repos));
|
|
}
|
|
}
|
|
|
|
public class AddRepoToOrganizationSecretMethod
|
|
{
|
|
[Fact]
|
|
public async Task RequestsTheCorrectUrl()
|
|
{
|
|
var connection = Substitute.For<IApiConnection>();
|
|
var client = new OrganizationSecretsClient(connection);
|
|
|
|
await client.AddRepoToOrganizationSecret("org", "secret", 1);
|
|
|
|
connection.Received()
|
|
.Put(Arg.Is<Uri>(u => u.ToString() == "orgs/org/actions/secrets/secret/repositories/1"));
|
|
}
|
|
|
|
[Fact]
|
|
public async Task EnsuresNonNullArguments()
|
|
{
|
|
var client = new OrganizationSecretsClient(Substitute.For<IApiConnection>());
|
|
|
|
await Assert.ThrowsAsync<ArgumentNullException>(() => client.AddRepoToOrganizationSecret(null, "secret", 1));
|
|
await Assert.ThrowsAsync<ArgumentNullException>(() => client.AddRepoToOrganizationSecret("org", null, 1));
|
|
await Assert.ThrowsAsync<ArgumentException>(() => client.AddRepoToOrganizationSecret("", "secret", 1));
|
|
await Assert.ThrowsAsync<ArgumentException>(() => client.AddRepoToOrganizationSecret("org", "", 1));
|
|
}
|
|
}
|
|
|
|
public class RemoveRepoFromOrganizationSecretMethod
|
|
{
|
|
[Fact]
|
|
public async Task RequestsTheCorrectUrl()
|
|
{
|
|
var connection = Substitute.For<IApiConnection>();
|
|
var client = new OrganizationSecretsClient(connection);
|
|
|
|
await client.RemoveRepoFromOrganizationSecret("org", "secret", 1);
|
|
|
|
connection.Received()
|
|
.Delete(Arg.Is<Uri>(u => u.ToString() == "orgs/org/actions/secrets/secret/repositories/1"));
|
|
}
|
|
|
|
[Fact]
|
|
public async Task EnsuresNonNullArguments()
|
|
{
|
|
var client = new OrganizationSecretsClient(Substitute.For<IApiConnection>());
|
|
|
|
await Assert.ThrowsAsync<ArgumentNullException>(() => client.RemoveRepoFromOrganizationSecret(null, "secret", 1));
|
|
await Assert.ThrowsAsync<ArgumentNullException>(() => client.RemoveRepoFromOrganizationSecret("org", null, 1));
|
|
await Assert.ThrowsAsync<ArgumentException>(() => client.RemoveRepoFromOrganizationSecret("", "secret", 1));
|
|
await Assert.ThrowsAsync<ArgumentException>(() => client.RemoveRepoFromOrganizationSecret("org", "", 1));
|
|
}
|
|
}
|
|
}
|
|
}
|