diff --git a/Octokit.Tests/Octokit.Tests.csproj b/Octokit.Tests/Octokit.Tests.csproj
index cff9ef07..7220fc92 100644
--- a/Octokit.Tests/Octokit.Tests.csproj
+++ b/Octokit.Tests/Octokit.Tests.csproj
@@ -123,6 +123,7 @@
+
diff --git a/Octokit.Tests/Reactive/ObservableStarredClientTests.cs b/Octokit.Tests/Reactive/ObservableStarredClientTests.cs
new file mode 100644
index 00000000..6b1c7dfd
--- /dev/null
+++ b/Octokit.Tests/Reactive/ObservableStarredClientTests.cs
@@ -0,0 +1,146 @@
+using System;
+using System.Collections.Generic;
+using System.Reactive.Linq;
+using System.Threading.Tasks;
+using NSubstitute;
+using Octokit;
+using Octokit.Internal;
+using Octokit.Reactive.Clients;
+using Octokit.Reactive.Internal;
+using Octokit.Tests.Helpers;
+using Xunit;
+using Xunit.Extensions;
+
+namespace Octokit.Tests.Reactive
+{
+ public class ObservableStarredClientTests
+ {
+ public class TheGetAllStargazersMethod
+ {
+ [Fact]
+ public async Task EnsuresArguments()
+ {
+ var client = new ObservableStarredClient(Substitute.For());
+
+ await AssertEx.Throws(async () => await client.GetAllStargazers(null, "name"));
+ await AssertEx.Throws(async () => await client.GetAllStargazers("owner", null));
+ }
+
+ [Fact]
+ public void GetsStargazersFromClient()
+ {
+ var connection = Substitute.For();
+ var gitHubClient = Substitute.For();
+ gitHubClient.Connection.Returns(connection);
+ var client = new ObservableStarredClient(gitHubClient);
+
+ client.GetAllStargazers("jugglingnutcase", "katiejamie");
+ connection.Received().GetAsync>(ApiUrls.Stargazers("jugglingnutcase", "katiejamie"), null, null);
+ }
+ }
+
+ public class TheGetAllForCurrentMethod
+ {
+ [Fact]
+ public void GetsStarsForCurrent()
+ {
+ var connection = Substitute.For();
+ var gitHubClient = Substitute.For();
+ gitHubClient.Connection.Returns(connection);
+ var client = new ObservableStarredClient(gitHubClient);
+
+ client.GetAllForCurrent();
+ connection.Received().GetAsync>(ApiUrls.Starred(), null, null);
+ }
+ }
+
+ public class TheGetAllForUserMethod
+ {
+ [Fact]
+ public async Task EnsuresArguments()
+ {
+ var client = new ObservableStarredClient(Substitute.For());
+
+ await AssertEx.Throws(async () => await client.GetAllForUser(null));
+ }
+
+ [Fact]
+ public void GetsStarsForUser()
+ {
+ var connection = Substitute.For();
+ var gitHubClient = Substitute.For();
+ gitHubClient.Connection.Returns(connection);
+ var client = new ObservableStarredClient(gitHubClient);
+
+ client.GetAllForUser("jugglingnutcase");
+ connection.Received().GetAsync>(ApiUrls.StarredByUser("jugglingnutcase"), null, null);
+ }
+ }
+
+ public class TheCheckStarredMethod
+ {
+ [Fact]
+ public async Task EnsuresArguments()
+ {
+ var client = new ObservableStarredClient(Substitute.For());
+
+ await AssertEx.Throws(async () => await client.CheckStarred(null, "james"));
+ await AssertEx.Throws(async () => await client.CheckStarred("james", null));
+ }
+
+ [Fact]
+ public async Task ChecksStarredForUser()
+ {
+ var gitHubClient = Substitute.For();
+ var client = new ObservableStarredClient(gitHubClient);
+
+ client.CheckStarred("jugglingnutcase", "katiejamie");
+ gitHubClient.Activity.Starring.Received().CheckStarred("jugglingnutcase", "katiejamie");
+ }
+ }
+
+ public class TheStarRepoMethod
+ {
+ [Fact]
+ public async Task EnsuresArguments()
+ {
+ var client = new ObservableStarredClient(Substitute.For());
+
+ await AssertEx.Throws(async () => await client.StarRepo(null, "james"));
+ await AssertEx.Throws(async () => await client.StarRepo("james", null));
+ }
+
+ [Fact]
+ public async Task ChecksStarredForUser()
+ {
+ var gitHubClient = Substitute.For();
+ var client = new ObservableStarredClient(gitHubClient);
+
+ client.StarRepo("jugglingnutcase", "katiejamie");
+ gitHubClient.Activity.Starring.Received().StarRepo("jugglingnutcase", "katiejamie");
+ }
+ }
+
+ public class TheRemoveStarFromRepoMethod
+ {
+ [Fact]
+ public async Task EnsuresArguments()
+ {
+ var client = new ObservableStarredClient(Substitute.For());
+
+ await AssertEx.Throws(async () => await client.RemoveStarFromRepo(null, "james"));
+ await AssertEx.Throws(async () => await client.RemoveStarFromRepo("james", null));
+ }
+
+ [Fact]
+ public async Task ChecksStarredForUser()
+ {
+ var gitHubClient = Substitute.For();
+ var client = new ObservableStarredClient(gitHubClient);
+
+ client.RemoveStarFromRepo("jugglingnutcase", "katiejamie");
+ gitHubClient.Activity.Starring.Received().RemoveStarFromRepo("jugglingnutcase", "katiejamie");
+ }
+ }
+ }
+}
\ No newline at end of file