From 01ef445a40cc27bf54be01189be4cce01943bcdc Mon Sep 17 00:00:00 2001 From: Ryan Gribble Date: Sun, 31 Jan 2016 14:10:43 +1000 Subject: [PATCH] Add Reactive versions of organization API and unit/integration tests --- .../Enterprise/IObservableEnterpriseClient.cs | 8 ++++ ...IObservableEnterpriseOrganizationClient.cs | 26 +++++++++++++ .../Enterprise/ObservableEnterpriseClient.cs | 9 +++++ .../ObservableEnterpriseOrganizationClient.cs | 38 +++++++++++++++++++ Octokit.Reactive/Octokit.Reactive.csproj | 2 + .../Octokit.Tests.Integration.csproj | 3 +- ...rvableEnterpriseOrganizationClientTests.cs | 36 ++++++++++++++++++ Octokit.Tests/Octokit.Tests.csproj | 1 + ...rvableEnterpriseOrganizationClientTests.cs | 28 ++++++++++++++ 9 files changed, 150 insertions(+), 1 deletion(-) create mode 100644 Octokit.Reactive/Clients/Enterprise/IObservableEnterpriseOrganizationClient.cs create mode 100644 Octokit.Reactive/Clients/Enterprise/ObservableEnterpriseOrganizationClient.cs create mode 100644 Octokit.Tests.Integration/Reactive/Enterprise/ObservableEnterpriseOrganizationClientTests.cs create mode 100644 Octokit.Tests/Reactive/Enterprise/ObservableEnterpriseOrganizationClientTests.cs diff --git a/Octokit.Reactive/Clients/Enterprise/IObservableEnterpriseClient.cs b/Octokit.Reactive/Clients/Enterprise/IObservableEnterpriseClient.cs index d47859f9..72e2d25e 100644 --- a/Octokit.Reactive/Clients/Enterprise/IObservableEnterpriseClient.cs +++ b/Octokit.Reactive/Clients/Enterprise/IObservableEnterpriseClient.cs @@ -23,5 +23,13 @@ /// See the Enterprise License API documentation for more information. /// IObservableEnterpriseLicenseClient License { get; } + + /// + /// A client for GitHub's Enterprise Organization API + /// + /// + /// See the Enterprise Organization API documentation for more information. + /// + IObservableEnterpriseOrganizationClient Organization { get; } } } diff --git a/Octokit.Reactive/Clients/Enterprise/IObservableEnterpriseOrganizationClient.cs b/Octokit.Reactive/Clients/Enterprise/IObservableEnterpriseOrganizationClient.cs new file mode 100644 index 00000000..ebb39eb9 --- /dev/null +++ b/Octokit.Reactive/Clients/Enterprise/IObservableEnterpriseOrganizationClient.cs @@ -0,0 +1,26 @@ +using System; +using System.Diagnostics.CodeAnalysis; +using System.Reactive.Threading.Tasks; + +namespace Octokit.Reactive +{ + /// + /// A client for GitHub's Enterprise Organization API + /// + /// + /// See the Enterprise Organization API documentation for more information. + /// + public interface IObservableEnterpriseOrganizationClient + { + /// + /// Creates an Organization on a GitHub Enterprise appliance (must be Site Admin user). + /// + /// + /// https://developer.github.com/v3/enterprise/orgs/#create-an-organization + /// + /// A instance describing the organization to be created + /// The created. + IObservable Create(NewOrganization newOrganization); + } +} + \ No newline at end of file diff --git a/Octokit.Reactive/Clients/Enterprise/ObservableEnterpriseClient.cs b/Octokit.Reactive/Clients/Enterprise/ObservableEnterpriseClient.cs index 2b13f505..7a52afcd 100644 --- a/Octokit.Reactive/Clients/Enterprise/ObservableEnterpriseClient.cs +++ b/Octokit.Reactive/Clients/Enterprise/ObservableEnterpriseClient.cs @@ -14,6 +14,7 @@ AdminStats = new ObservableEnterpriseAdminStatsClient(client); License = new ObservableEnterpriseLicenseClient(client); + Organization = new ObservableEnterpriseOrganizationClient(client); } /// @@ -31,5 +32,13 @@ /// See the Enterprise License API documentation for more information. /// public IObservableEnterpriseLicenseClient License { get; private set; } + + /// + /// A client for GitHub's Enterprise Organization API + /// + /// + /// See the Enterprise Organization API documentation for more information. + /// + public IObservableEnterpriseOrganizationClient Organization { get; private set; } } } diff --git a/Octokit.Reactive/Clients/Enterprise/ObservableEnterpriseOrganizationClient.cs b/Octokit.Reactive/Clients/Enterprise/ObservableEnterpriseOrganizationClient.cs new file mode 100644 index 00000000..1f78574c --- /dev/null +++ b/Octokit.Reactive/Clients/Enterprise/ObservableEnterpriseOrganizationClient.cs @@ -0,0 +1,38 @@ +using System; +using System.Reactive.Threading.Tasks; +using Octokit; + + +namespace Octokit.Reactive +{ + /// + /// A client for GitHub's Enterprise Organization API + /// + /// + /// See the Enterprise Organization API documentation for more information. + /// + public class ObservableEnterpriseOrganizationClient : IObservableEnterpriseOrganizationClient + { + readonly IEnterpriseOrganizationClient _client; + + public ObservableEnterpriseOrganizationClient(IGitHubClient client) + { + Ensure.ArgumentNotNull(client, "client"); + + _client = client.Enterprise.Organization; + } + + /// + /// Creates an Organization on a GitHub Enterprise appliance (must be Site Admin user). + /// + /// + /// https://developer.github.com/v3/enterprise/orgs/#create-an-organization + /// + /// A instance describing the organization to be created + /// The created. + public IObservable Create(NewOrganization newOrganization) + { + return _client.Create(newOrganization).ToObservable(); + } + } +} diff --git a/Octokit.Reactive/Octokit.Reactive.csproj b/Octokit.Reactive/Octokit.Reactive.csproj index e81bfe42..0ffdc200 100644 --- a/Octokit.Reactive/Octokit.Reactive.csproj +++ b/Octokit.Reactive/Octokit.Reactive.csproj @@ -75,11 +75,13 @@ Properties\SolutionInfo.cs + + diff --git a/Octokit.Tests.Integration/Octokit.Tests.Integration.csproj b/Octokit.Tests.Integration/Octokit.Tests.Integration.csproj index e5a117d5..7781ebbc 100644 --- a/Octokit.Tests.Integration/Octokit.Tests.Integration.csproj +++ b/Octokit.Tests.Integration/Octokit.Tests.Integration.csproj @@ -124,8 +124,9 @@ - + + diff --git a/Octokit.Tests.Integration/Reactive/Enterprise/ObservableEnterpriseOrganizationClientTests.cs b/Octokit.Tests.Integration/Reactive/Enterprise/ObservableEnterpriseOrganizationClientTests.cs new file mode 100644 index 00000000..c0816f68 --- /dev/null +++ b/Octokit.Tests.Integration/Reactive/Enterprise/ObservableEnterpriseOrganizationClientTests.cs @@ -0,0 +1,36 @@ +using System; +using System.Reactive.Linq; +using System.Threading.Tasks; +using Octokit.Reactive; +using Xunit; + +namespace Octokit.Tests.Integration +{ + public class ObservableEnterpriseOrganizationClientTests + { + readonly IObservableGitHubClient _github; + + public ObservableEnterpriseOrganizationClientTests() + { + _github = new ObservableGitHubClient(EnterpriseHelper.GetAuthenticatedClient()); + } + + [GitHubEnterpriseTest] + public async Task CanCreateOrganization() + { + string orgLogin = Helper.MakeNameWithTimestamp("MyOrganization"); + string orgName = String.Concat(orgLogin, " Display Name"); + + var newOrganization = new NewOrganization(orgLogin, EnterpriseHelper.GHEUserName, orgName); + var observable = _github.Enterprise.Organization.Create(newOrganization); + var organization = await observable; + + Assert.NotNull(organization); + + // Get organization and check login/name + var checkOrg = await _github.Organization.Get(orgLogin); + Assert.Equal(checkOrg.Login, orgLogin); + Assert.Equal(checkOrg.Name, orgName); + } + } +} \ No newline at end of file diff --git a/Octokit.Tests/Octokit.Tests.csproj b/Octokit.Tests/Octokit.Tests.csproj index f6a0b24a..a5ab2071 100644 --- a/Octokit.Tests/Octokit.Tests.csproj +++ b/Octokit.Tests/Octokit.Tests.csproj @@ -189,6 +189,7 @@ + diff --git a/Octokit.Tests/Reactive/Enterprise/ObservableEnterpriseOrganizationClientTests.cs b/Octokit.Tests/Reactive/Enterprise/ObservableEnterpriseOrganizationClientTests.cs new file mode 100644 index 00000000..5c1867c4 --- /dev/null +++ b/Octokit.Tests/Reactive/Enterprise/ObservableEnterpriseOrganizationClientTests.cs @@ -0,0 +1,28 @@ +using System; +using NSubstitute; +using Octokit.Reactive; +using Xunit; + +namespace Octokit.Tests +{ + public class ObservableEnterpriseOrganizationClientTests + { + public class TheCreateMethod + { + [Fact] + public void CallsIntoClient() + { + + var github = Substitute.For(); + var client = new ObservableEnterpriseOrganizationClient(github); + + client.Create(new NewOrganization("org", "admin", "org name")); + github.Enterprise.Organization.Received(1).Create( + Arg.Is(a => + a.Login == "org" + && a.Admin == "admin" + && a.ProfileName == "org name")); + } + } + } +}