diff --git a/Octokit.Reactive/Clients/ObservableAssigneesClient.cs b/Octokit.Reactive/Clients/ObservableAssigneesClient.cs
index beabc06d..de7eb9c9 100644
--- a/Octokit.Reactive/Clients/ObservableAssigneesClient.cs
+++ b/Octokit.Reactive/Clients/ObservableAssigneesClient.cs
@@ -25,6 +25,9 @@ namespace Octokit.Reactive
///
public IObservable GetAllForRepository(string owner, string name)
{
+ Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
+ Ensure.ArgumentNotNullOrEmptyString(name, "name");
+
return GetAllForRepository(owner, name, ApiOptions.None);
}
diff --git a/Octokit.Tests/Octokit.Tests.csproj b/Octokit.Tests/Octokit.Tests.csproj
index 8fd268a0..842cb3bc 100644
--- a/Octokit.Tests/Octokit.Tests.csproj
+++ b/Octokit.Tests/Octokit.Tests.csproj
@@ -198,6 +198,7 @@
+
diff --git a/Octokit.Tests/Reactive/ObservableAssigneesClientTests.cs b/Octokit.Tests/Reactive/ObservableAssigneesClientTests.cs
new file mode 100644
index 00000000..92c75485
--- /dev/null
+++ b/Octokit.Tests/Reactive/ObservableAssigneesClientTests.cs
@@ -0,0 +1,123 @@
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using NSubstitute;
+using Octokit.Reactive;
+using Xunit;
+
+namespace Octokit.Tests.Reactive
+{
+ public class ObservableAssigneesClientTests
+ {
+ private const string owner = "owner";
+ private const string name = "name";
+ private const string assignee = "assignee";
+
+ public class TheGetAllMethod
+ {
+ private readonly Uri _expectedUri;
+
+ public TheGetAllMethod()
+ {
+ var uri = string.Format("repos/{0}/{1}/assignees", owner, name);
+ _expectedUri = new Uri(uri, UriKind.Relative);
+ }
+
+ [Fact]
+ public void RequestsCorrectUrl()
+ {
+ var github = Substitute.For();
+ var client = new ObservableAssigneesClient(github);
+
+ client.GetAllForRepository(owner, name);
+
+ github.Connection.Received(1).Get>(_expectedUri,
+ Arg.Is>(dictionary => dictionary.Count == 0), null);
+ }
+
+ [Fact]
+ public void RequestsCorrectUrlWithApiOption()
+ {
+ var github = Substitute.For();
+ var client = new ObservableAssigneesClient(github);
+
+ client.GetAllForRepository(owner, name, new ApiOptions {PageSize = 1, StartPage = 1});
+
+ github.Connection.Received(1).Get>(_expectedUri,
+ Arg.Is>(dictionary => dictionary.Count == 2), null);
+ }
+
+ [Fact]
+ public async Task EnsuresNonNullArguments()
+ {
+ var github = Substitute.For();
+ var client = new ObservableAssigneesClient(github);
+
+ Assert.Throws(() => client.GetAllForRepository(null, name));
+ Assert.Throws(() => client.GetAllForRepository(owner, null));
+ Assert.Throws(() => client.GetAllForRepository(owner, name, null));
+ }
+
+ [Fact]
+ public void EnsuresNonEmptyArguments()
+ {
+ var client = CreateFixtureWithNonReactiveClient();
+
+ Assert.Throws(() => client.GetAllForRepository(string.Empty, name));
+ Assert.Throws(() => client.GetAllForRepository(owner, string.Empty));
+ }
+ }
+
+ private static ObservableAssigneesClient CreateFixtureWithNonReactiveClient()
+ {
+ var nonreactiveClient = new AssigneesClient(Substitute.For());
+ var github = Substitute.For();
+ github.Issue.Assignee.Returns(nonreactiveClient);
+ return new ObservableAssigneesClient(github);
+ }
+
+ public class TheCheckAssigneeMethod
+ {
+ [Fact]
+ public void CallsCheckAssigneeOnClient()
+ {
+ var github = Substitute.For();
+ var client = new ObservableAssigneesClient(github);
+
+ client.CheckAssignee(owner, name, assignee);
+
+ github.Issue.Assignee.Received(1).CheckAssignee(Arg.Is(owner), Arg.Is(name), Arg.Is(assignee));
+ }
+
+ [Fact]
+ public void EnsuresNonNullArguments()
+ {
+ var client = CreateFixtureWithNonReactiveClient();
+
+ Assert.Throws(() => client.CheckAssignee(null, name, assignee));
+ Assert.Throws(() => client.CheckAssignee(owner, null, assignee));
+ Assert.Throws(() => client.CheckAssignee(owner, name, null));
+ }
+
+ [Fact]
+ public void EnsuresNonEmptyArguments()
+ {
+ var client = CreateFixtureWithNonReactiveClient();
+
+ Assert.Throws(() => client.CheckAssignee(string.Empty, name, assignee));
+ Assert.Throws(() => client.CheckAssignee(owner, string.Empty, assignee));
+ Assert.Throws(() => client.CheckAssignee(owner, name, string.Empty));
+ }
+ }
+
+ public class TheCtor
+ {
+ [Fact]
+ public void EnsuresNonNullArguments()
+ {
+ Assert.Throws(
+ () => new ObservableAssigneesClient(null));
+ }
+ }
+ }
+}
\ No newline at end of file