diff --git a/Octokit.Tests/Octokit.Tests.csproj b/Octokit.Tests/Octokit.Tests.csproj
index 6f2f5ee2..c29287f3 100644
--- a/Octokit.Tests/Octokit.Tests.csproj
+++ b/Octokit.Tests/Octokit.Tests.csproj
@@ -116,6 +116,7 @@
+
diff --git a/Octokit.Tests/Reactive/ObservableOrganizationMembersClientTests.cs b/Octokit.Tests/Reactive/ObservableOrganizationMembersClientTests.cs
new file mode 100644
index 00000000..9b27ea7f
--- /dev/null
+++ b/Octokit.Tests/Reactive/ObservableOrganizationMembersClientTests.cs
@@ -0,0 +1,189 @@
+using NSubstitute;
+using Octokit;
+using Octokit.Internal;
+using Octokit.Reactive;
+using Octokit.Tests.Helpers;
+using System;
+using System.Collections.Generic;
+using System.Reactive.Linq;
+using System.Threading.Tasks;
+using Xunit;
+
+namespace Octokit.Tests.Reactive
+{
+ public class ObservableOrganizationMembersClientTests
+ {
+ public class TheGetAllMethod
+ {
+ [Fact]
+ public void RequestsCorrectUrl()
+ {
+ var gitHubClient = Substitute.For();
+ var client = new ObservableOrganizationMembersClient(gitHubClient);
+
+ client.GetAll("org");
+
+ gitHubClient.Connection.GetAsync>(
+ new Uri("orgs/org/members", UriKind.Relative), null, null);
+ }
+
+ [Fact]
+ public async Task EnsuresNonNullArguments()
+ {
+ var client = new ObservableOrganizationMembersClient(Substitute.For());
+
+ await AssertEx.Throws(async () => await client.GetAll(null));
+ await AssertEx.Throws(async () => await client.GetAll(""));
+ }
+ }
+
+ public class TheGetPublicMethod
+ {
+ [Fact]
+ public void RequestsTheCorrectUrl()
+ {
+ var gitHubClient = Substitute.For();
+ var client = new ObservableOrganizationMembersClient(gitHubClient);
+
+ client.GetPublic("org");
+
+ gitHubClient.Connection.GetAsync>(
+ new Uri("orgs/org/public_members", UriKind.Relative), null, null);
+ }
+
+ [Fact]
+ public async Task EnsuresNonNullArguments()
+ {
+ var client = new ObservableOrganizationMembersClient(Substitute.For());
+
+ await AssertEx.Throws(async () => await client.GetPublic(null));
+ await AssertEx.Throws(async () => await client.GetPublic(""));
+ }
+ }
+
+ public class TheCheckMemberMethod
+ {
+ [Fact]
+ public void ChecksMemberFromClientOrganizationMember()
+ {
+ var gitHubClient = Substitute.For();
+ var client = new ObservableOrganizationMembersClient(gitHubClient);
+
+ client.CheckMember("org", "user");
+
+ gitHubClient.Organization.Member.Received().CheckMember("org", "user");
+ }
+
+ [Fact]
+ public async Task EnsuresNonNullArguments()
+ {
+ var client = new ObservableOrganizationMembersClient(Substitute.For());
+
+ await AssertEx.Throws(async () => await client.CheckMember(null, "username"));
+ await AssertEx.Throws(async () => await client.CheckMember("", "username"));
+ await AssertEx.Throws(async () => await client.CheckMember("org", null));
+ await AssertEx.Throws(async () => await client.CheckMember("org", ""));
+ }
+ }
+
+ public class TheCheckMemberPublicMethod
+ {
+ [Fact]
+ public void ChecksMemberPublicFromClientOrganizationMember()
+ {
+ var gitHubClient = Substitute.For();
+ var client = new ObservableOrganizationMembersClient(gitHubClient);
+
+ client.CheckMemberPublic("org", "user");
+
+ gitHubClient.Organization.Member.Received().CheckMemberPublic("org", "user");
+ }
+
+ [Fact]
+ public async Task EnsuresNonNullArguments()
+ {
+ var client = new ObservableOrganizationMembersClient(Substitute.For());
+
+ await AssertEx.Throws(async () => await client.CheckMemberPublic(null, "username"));
+ await AssertEx.Throws(async () => await client.CheckMemberPublic("", "username"));
+ await AssertEx.Throws(async () => await client.CheckMemberPublic("org", null));
+ await AssertEx.Throws(async () => await client.CheckMemberPublic("org", ""));
+ }
+ }
+
+ public class TheDeleteMethod
+ {
+ [Fact]
+ public void DeletesFromClientOrganizationMember()
+ {
+ var gitHubClient = Substitute.For();
+ var client = new ObservableOrganizationMembersClient(gitHubClient);
+
+ client.Delete("org", "user");
+
+ gitHubClient.Organization.Member.Received().Delete("org", "user");
+ }
+
+ [Fact]
+ public async Task EnsuresNonNullArguments()
+ {
+ var client = new ObservableOrganizationMembersClient(Substitute.For());
+
+ await AssertEx.Throws(async () => await client.Delete(null, "username"));
+ await AssertEx.Throws(async () => await client.Delete("", "username"));
+ await AssertEx.Throws(async () => await client.Delete("org", null));
+ await AssertEx.Throws(async () => await client.Delete("org", ""));
+ }
+ }
+
+ public class ThePublicizeMethod
+ {
+ [Fact]
+ public void PublicizeFromClientOrganizationMember()
+ {
+ var gitHubClient = Substitute.For();
+ var client = new ObservableOrganizationMembersClient(gitHubClient);
+
+ client.Publicize("org", "user");
+
+ gitHubClient.Organization.Member.Received().Publicize("org", "user");
+ }
+
+ [Fact]
+ public async Task EnsuresNonNullArguments()
+ {
+ var client = new ObservableOrganizationMembersClient(Substitute.For());
+
+ await AssertEx.Throws(async () => await client.Publicize(null, "username"));
+ await AssertEx.Throws(async () => await client.Publicize("", "username"));
+ await AssertEx.Throws(async () => await client.Publicize("org", null));
+ await AssertEx.Throws(async () => await client.Publicize("org", ""));
+ }
+ }
+
+ public class TheConcealMethod
+ {
+ [Fact]
+ public void ConcealFromClientOrganizationMember()
+ {
+ var gitHubClient = Substitute.For();
+ var client = new ObservableOrganizationMembersClient(gitHubClient);
+
+ client.Conceal("org", "user");
+
+ gitHubClient.Organization.Member.Received().Conceal("org", "user");
+ }
+
+ [Fact]
+ public async Task EnsuresNonNullArguments()
+ {
+ var client = new ObservableOrganizationMembersClient(Substitute.For());
+
+ await AssertEx.Throws(async () => await client.Conceal(null, "username"));
+ await AssertEx.Throws(async () => await client.Conceal("", "username"));
+ await AssertEx.Throws(async () => await client.Conceal("org", null));
+ await AssertEx.Throws(async () => await client.Conceal("org", ""));
+ }
+ }
+ }
+}