From f196631b8997d32ccfdc94ff350eee559f2e9445 Mon Sep 17 00:00:00 2001 From: Ryan Gribble Date: Sat, 26 Dec 2015 23:49:26 +1000 Subject: [PATCH] Add Enterprise and EnterpriseAdminStats to Reactive project and tests --- .../IObservableEnterpriseAdminStatsClient.cs | 25 ++++++++++++ .../Enterprise/IObservableEnterpriseClient.cs | 22 +++++++++++ .../ObservableEnterpriseAdminStatsClient.cs | 37 ++++++++++++++++++ .../Enterprise/ObservableEnterpriseClient.cs | 29 ++++++++++++++ Octokit.Reactive/Octokit.Reactive.csproj | 4 ++ Octokit.Tests/Octokit.Tests.csproj | 1 + ...servableEnterpriseAdminStatsClientTests.cs | 39 +++++++++++++++++++ 7 files changed, 157 insertions(+) create mode 100644 Octokit.Reactive/Clients/Enterprise/IObservableEnterpriseAdminStatsClient.cs create mode 100644 Octokit.Reactive/Clients/Enterprise/IObservableEnterpriseClient.cs create mode 100644 Octokit.Reactive/Clients/Enterprise/ObservableEnterpriseAdminStatsClient.cs create mode 100644 Octokit.Reactive/Clients/Enterprise/ObservableEnterpriseClient.cs create mode 100644 Octokit.Tests/Reactive/Enterprise/ObservableEnterpriseAdminStatsClientTests.cs diff --git a/Octokit.Reactive/Clients/Enterprise/IObservableEnterpriseAdminStatsClient.cs b/Octokit.Reactive/Clients/Enterprise/IObservableEnterpriseAdminStatsClient.cs new file mode 100644 index 00000000..bee75601 --- /dev/null +++ b/Octokit.Reactive/Clients/Enterprise/IObservableEnterpriseAdminStatsClient.cs @@ -0,0 +1,25 @@ +using System; +using System.Diagnostics.CodeAnalysis; +using System.Reactive; + +namespace Octokit.Reactive +{ + /// + /// A client for GitHub's Enterprise Admin Stats API + /// + /// + /// See the Enterprise Admin Stats API documentation for more information. + /// + public interface IObservableEnterpriseAdminStatsClient + { + /// + /// Gets GitHub Enterprise statistics (must be Site Admin user). + /// + /// + ///https://developer.github.com/v3/enterprise/admin_stats/#get-statistics + /// + /// The collection for the requested type. + [SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")] + IObservable GetStatistics(AdminStatsType type); + } +} diff --git a/Octokit.Reactive/Clients/Enterprise/IObservableEnterpriseClient.cs b/Octokit.Reactive/Clients/Enterprise/IObservableEnterpriseClient.cs new file mode 100644 index 00000000..25bf89a8 --- /dev/null +++ b/Octokit.Reactive/Clients/Enterprise/IObservableEnterpriseClient.cs @@ -0,0 +1,22 @@ +using System; +using System.Diagnostics.CodeAnalysis; + +namespace Octokit.Reactive +{ + /// + /// A client for GitHub's Enterprise API. + /// + /// + /// See the Enterprise API documentation for more information. + /// + public interface IObservableEnterpriseClient + { + /// + /// A client for GitHub's Enterprise Admin Stats API + /// + /// + /// See the Enterprise Admin Stats API documentation for more information. + /// + IObservableEnterpriseAdminStatsClient AdminStats { get; } + } +} diff --git a/Octokit.Reactive/Clients/Enterprise/ObservableEnterpriseAdminStatsClient.cs b/Octokit.Reactive/Clients/Enterprise/ObservableEnterpriseAdminStatsClient.cs new file mode 100644 index 00000000..59c13f03 --- /dev/null +++ b/Octokit.Reactive/Clients/Enterprise/ObservableEnterpriseAdminStatsClient.cs @@ -0,0 +1,37 @@ +using System; +using System.Diagnostics.CodeAnalysis; +using System.Reactive; +using System.Reactive.Threading.Tasks; + +namespace Octokit.Reactive +{ + /// + /// A client for GitHub's Enterprise Admin Stats API + /// + /// + /// See the Enterprise Admin Stats API documentation for more information. + /// + public class ObservableEnterpriseAdminStatsClient : IObservableEnterpriseAdminStatsClient + { + readonly IEnterpriseAdminStatsClient _client; + + public ObservableEnterpriseAdminStatsClient(IGitHubClient client) + { + Ensure.ArgumentNotNull(client, "client"); + + _client = client.Enterprise.AdminStats; + } + + /// + /// Gets GitHub Enterprise statistics (must be Site Admin user). + /// + /// + ///https://developer.github.com/v3/enterprise/admin_stats/#get-statistics + /// + /// The collection for the requested type. + public IObservable GetStatistics(AdminStatsType type) + { + return _client.GetStatistics(type).ToObservable(); + } + } +} diff --git a/Octokit.Reactive/Clients/Enterprise/ObservableEnterpriseClient.cs b/Octokit.Reactive/Clients/Enterprise/ObservableEnterpriseClient.cs new file mode 100644 index 00000000..5f9067f4 --- /dev/null +++ b/Octokit.Reactive/Clients/Enterprise/ObservableEnterpriseClient.cs @@ -0,0 +1,29 @@ +using System; +using System.Diagnostics.CodeAnalysis; + +namespace Octokit.Reactive +{ + /// + /// A client for GitHub's Enterprise API. + /// + /// + /// See the Enterprise API documentation for more information. + /// + public class ObservableEnterpriseClient : IObservableEnterpriseClient + { + public ObservableEnterpriseClient(IGitHubClient client) + { + Ensure.ArgumentNotNull(client, "client"); + + AdminStats = new ObservableEnterpriseAdminStatsClient(client); + } + + /// + /// A client for GitHub's Enterprise Admin Stats API + /// + /// + /// See the Enterprise Admin Stats API documentation for more information. + /// + public IObservableEnterpriseAdminStatsClient AdminStats { get; private set; } + } +} diff --git a/Octokit.Reactive/Octokit.Reactive.csproj b/Octokit.Reactive/Octokit.Reactive.csproj index d25d860a..cf5dca1e 100644 --- a/Octokit.Reactive/Octokit.Reactive.csproj +++ b/Octokit.Reactive/Octokit.Reactive.csproj @@ -75,6 +75,10 @@ Properties\SolutionInfo.cs + + + + diff --git a/Octokit.Tests/Octokit.Tests.csproj b/Octokit.Tests/Octokit.Tests.csproj index aacc1e36..1a475c6c 100644 --- a/Octokit.Tests/Octokit.Tests.csproj +++ b/Octokit.Tests/Octokit.Tests.csproj @@ -206,6 +206,7 @@ + diff --git a/Octokit.Tests/Reactive/Enterprise/ObservableEnterpriseAdminStatsClientTests.cs b/Octokit.Tests/Reactive/Enterprise/ObservableEnterpriseAdminStatsClientTests.cs new file mode 100644 index 00000000..4786faa0 --- /dev/null +++ b/Octokit.Tests/Reactive/Enterprise/ObservableEnterpriseAdminStatsClientTests.cs @@ -0,0 +1,39 @@ +using NSubstitute; +using Octokit.Reactive; +using System; +using System.Collections.Generic; +using Xunit; + +namespace Octokit.Tests +{ + public class ObservableEnterpriseAdminStatsClientTests + { + public class TheGetStatisticsMethod + { + [Fact] + public void CallsIntoClient() + { + var github = Substitute.For(); + var client = new ObservableEnterpriseAdminStatsClient(github); + + foreach (AdminStatsType type in Enum.GetValues(typeof(AdminStatsType))) + { + var expectedUri = "enterprise/stats/{0}".FormatUri(type.ToString().ToLowerInvariant()); + client.GetStatistics(type); + + github.Enterprise.AdminStats.Received(1).GetStatistics(type); + } + } + } + + public class TheCtor + { + [Fact] + public void EnsuresNonNullArguments() + { + Assert.Throws( + () => new ObservableEnterpriseAdminStatsClient(null)); + } + } + } +}