diff --git a/Octokit.Reactive/Clients/ObservableRepositoryCommitsClients.cs b/Octokit.Reactive/Clients/ObservableRepositoryCommitsClients.cs
index 1689fe35..977a07f5 100644
--- a/Octokit.Reactive/Clients/ObservableRepositoryCommitsClients.cs
+++ b/Octokit.Reactive/Clients/ObservableRepositoryCommitsClients.cs
@@ -33,6 +33,11 @@ namespace Octokit.Reactive
/// A of for the specified references.
public IObservable Compare(string owner, string name, string @base, string head)
{
+ Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
+ Ensure.ArgumentNotNullOrEmptyString(name, "name");
+ Ensure.ArgumentNotNullOrEmptyString(@base, "base");
+ Ensure.ArgumentNotNullOrEmptyString(head, "head");
+
return _commit.Compare(owner, name, @base, head).ToObservable();
}
@@ -45,6 +50,9 @@ namespace Octokit.Reactive
/// A of for the specified references.
public IObservable Compare(int repositoryId, string @base, string head)
{
+ Ensure.ArgumentNotNullOrEmptyString(@base, "base");
+ Ensure.ArgumentNotNullOrEmptyString(head, "head");
+
return _commit.Compare(repositoryId, @base, head).ToObservable();
}
diff --git a/Octokit.Tests/Clients/RespositoryCommitsClientTests.cs b/Octokit.Tests/Clients/RespositoryCommitsClientTests.cs
index 6bd02632..f27ba20d 100644
--- a/Octokit.Tests/Clients/RespositoryCommitsClientTests.cs
+++ b/Octokit.Tests/Clients/RespositoryCommitsClientTests.cs
@@ -14,7 +14,7 @@ namespace Octokit.Tests.Clients
public void EnsuresNonNullArguments()
{
Assert.Throws(
- () => new RepositoryCommitsClient(null));
+ () => new RepositoryCommitsClient(null));
}
}
diff --git a/Octokit.Tests/Octokit.Tests.csproj b/Octokit.Tests/Octokit.Tests.csproj
index dea83aef..ba16b864 100644
--- a/Octokit.Tests/Octokit.Tests.csproj
+++ b/Octokit.Tests/Octokit.Tests.csproj
@@ -247,6 +247,7 @@
+
diff --git a/Octokit.Tests/Reactive/ObservableRespositoryCommitsClientTests.cs b/Octokit.Tests/Reactive/ObservableRespositoryCommitsClientTests.cs
new file mode 100644
index 00000000..21ad5b41
--- /dev/null
+++ b/Octokit.Tests/Reactive/ObservableRespositoryCommitsClientTests.cs
@@ -0,0 +1,347 @@
+using System;
+using NSubstitute;
+using Octokit.Reactive;
+using Xunit;
+
+namespace Octokit.Tests.Reactive
+{
+ public class RespositoryCommitsClientTests
+ {
+ public class TheCtor
+ {
+ [Fact]
+ public void EnsuresNonNullArguments()
+ {
+ Assert.Throws(
+ () => new ObservableRepositoryCommitsClient(null));
+ }
+ }
+
+ public class TheCompareMethod
+ {
+ [Fact]
+ public void RequestsCorrectUrl()
+ {
+ var gitHubClient = Substitute.For();
+ var client = new ObservableRepositoryCommitsClient(gitHubClient);
+
+ client.Compare("fake", "repo", "base", "head");
+
+ gitHubClient.Received().Repository.Commit.Compare("fake", "repo", "base", "head");
+ }
+
+ [Fact]
+ public void RequestsCorrectUrlByRepositoryId()
+ {
+ var gitHubClient = Substitute.For();
+ var client = new ObservableRepositoryCommitsClient(gitHubClient);
+
+ client.Compare(1, "base", "head");
+
+ gitHubClient.Received().Repository.Commit.Compare(1, "base", "head");
+ }
+
+ [Fact]
+ public void EnsuresNonNullArguments()
+ {
+ var gitHubClient = Substitute.For();
+ var client = new ObservableRepositoryCommitsClient(gitHubClient);
+
+ Assert.Throws(() => client.Compare(null, "name", "base", "head"));
+ Assert.Throws(() => client.Compare("owner", null, "base", "head"));
+ Assert.Throws(() => client.Compare("owner", "name", null, "head"));
+ Assert.Throws(() => client.Compare("owner", "name", "base", null));
+
+ Assert.Throws(() => client.Compare(1, null, "head"));
+ Assert.Throws(() => client.Compare(1, "base", null));
+
+ Assert.Throws(() => client.Compare("", "name", "base", "head"));
+ Assert.Throws(() => client.Compare("owner", "", "base", "head"));
+ Assert.Throws(() => client.Compare("owner", "name", "", "head"));
+ Assert.Throws(() => client.Compare("owner", "name", "base", ""));
+ Assert.Throws(() => client.Compare(1, "", "head"));
+ Assert.Throws(() => client.Compare(1, "base", ""));
+ }
+ }
+
+ public class TheGetMethod
+ {
+ [Fact]
+ public void RequestsCorrectUrl()
+ {
+ var gitHubClient = Substitute.For();
+ var client = new ObservableRepositoryCommitsClient(gitHubClient);
+
+ client.Get("fake", "repo", "reference");
+
+ gitHubClient.Received().Repository.Commit.Get("fake", "repo", "reference");
+ }
+
+ [Fact]
+ public void RequestsCorrectUrlByRepositoryId()
+ {
+ var gitHubClient = Substitute.For();
+ var client = new ObservableRepositoryCommitsClient(gitHubClient);
+
+ client.Get(1, "reference");
+
+ gitHubClient.Received().Repository.Commit.Get(1, "reference");
+ }
+
+ [Fact]
+ public void EnsuresNonNullArguments()
+ {
+ var gitHubClient = Substitute.For();
+ var client = new ObservableRepositoryCommitsClient(gitHubClient);
+
+ Assert.Throws(() => client.Get(null, "name", "reference"));
+ Assert.Throws(() => client.Get("owner", null, "reference"));
+ Assert.Throws(() => client.Get("owner", "name", null));
+
+ Assert.Throws(() => client.Get(1, null));
+
+ Assert.Throws(() => client.Get("", "name", "reference"));
+ Assert.Throws(() => client.Get("owner", "", "reference"));
+ Assert.Throws(() => client.Get("owner", "name", ""));
+
+ Assert.Throws(() => client.Get(1, ""));
+ }
+ }
+
+ public class TheGetAllMethod
+ {
+ [Fact]
+ public void RequestsCorrectUrl()
+ {
+ var gitHubClient = Substitute.For();
+ var client = new ObservableRepositoryCommitsClient(gitHubClient);
+
+ client.GetAll("fake", "repo");
+
+ gitHubClient.Received().Repository.Commit.GetAll("fake", "repo");
+ }
+
+ [Fact]
+ public void RequestsCorrectUrlByRepositoryId()
+ {
+ var gitHubClient = Substitute.For();
+ var client = new ObservableRepositoryCommitsClient(gitHubClient);
+
+ client.GetAll(1);
+
+ gitHubClient.Received().Repository.Commit.GetAll(1);
+ }
+
+ [Fact]
+ public void RequestsCorrectUrlWithApiOptions()
+ {
+ var gitHubClient = Substitute.For();
+ var client = new ObservableRepositoryCommitsClient(gitHubClient);
+
+ var options = new ApiOptions
+ {
+ PageCount = 1,
+ StartPage = 1,
+ PageSize = 1
+ };
+
+ client.GetAll("fake", "repo", options);
+
+ gitHubClient.Received().Repository.Commit.GetAll("fake", "repo", options);
+ }
+
+ [Fact]
+ public void RequestsCorrectUrlByRepositoryIdWithApiOptions()
+ {
+ var gitHubClient = Substitute.For();
+ var client = new ObservableRepositoryCommitsClient(gitHubClient);
+
+ var options = new ApiOptions
+ {
+ PageCount = 1,
+ StartPage = 1,
+ PageSize = 1
+ };
+
+ client.GetAll(1, options);
+
+ gitHubClient.Received().Repository.Commit.GetAll(1, options);
+ }
+
+ [Fact]
+ public void RequestsCorrectUrlParameterized()
+ {
+ var gitHubClient = Substitute.For();
+ var client = new ObservableRepositoryCommitsClient(gitHubClient);
+
+ var commitRequest = new CommitRequest
+ {
+ Author = "author",
+ Sha = "sha",
+ Path = "path",
+ Since = null,
+ Until = null
+ };
+
+ client.GetAll("fake", "repo", commitRequest);
+
+ gitHubClient.Received().Repository.Commit.GetAll("fake", "repo", commitRequest);
+ }
+
+ [Fact]
+ public void RequestsCorrectUrlByRepositoryIdParameterized()
+ {
+ var gitHubClient = Substitute.For();
+ var client = new ObservableRepositoryCommitsClient(gitHubClient);
+
+ var commitRequest = new CommitRequest
+ {
+ Author = "author",
+ Sha = "sha",
+ Path = "path",
+ Since = null,
+ Until = null
+ };
+
+ client.GetAll(1, commitRequest);
+
+ gitHubClient.Received().Repository.Commit.GetAll(1, commitRequest);
+ }
+
+ [Fact]
+ public void RequestsCorrectUrlWithApiOptionsParameterized()
+ {
+ var gitHubClient = Substitute.For();
+ var client = new ObservableRepositoryCommitsClient(gitHubClient);
+
+ var commitRequest = new CommitRequest
+ {
+ Author = "author",
+ Sha = "sha",
+ Path = "path",
+ Since = null,
+ Until = null
+ };
+
+ var options = new ApiOptions
+ {
+ PageCount = 1,
+ StartPage = 1,
+ PageSize = 1
+ };
+
+ client.GetAll("fake", "repo", commitRequest, options);
+
+ gitHubClient.Received().Repository.Commit.GetAll("fake", "repo", commitRequest, options);
+ }
+
+ [Fact]
+ public void RequestsCorrectUrlByRepositoryIdWithApiOptionsParameterized()
+ {
+ var gitHubClient = Substitute.For();
+ var client = new ObservableRepositoryCommitsClient(gitHubClient);
+
+ var commitRequest = new CommitRequest
+ {
+ Author = "author",
+ Sha = "sha",
+ Path = "path",
+ Since = null,
+ Until = null
+ };
+
+ var options = new ApiOptions
+ {
+ PageCount = 1,
+ StartPage = 1,
+ PageSize = 1
+ };
+
+ client.GetAll(1, commitRequest, options);
+
+ gitHubClient.Received().Repository.Commit.GetAll(1, commitRequest, options);
+ }
+
+ [Fact]
+ public void EnsuresNonNullArguments()
+ {
+ var connection = Substitute.For();
+ var client = new ObservableRepositoryCommitsClient(connection);
+
+ Assert.Throws(() => client.GetAll(null, "name"));
+ Assert.Throws(() => client.GetAll("owner", null));
+
+ Assert.Throws(() => client.GetAll(null, "name", ApiOptions.None));
+ Assert.Throws(() => client.GetAll("owner", null, ApiOptions.None));
+ Assert.Throws(() => client.GetAll("owner", "name", (ApiOptions)null));
+
+ Assert.Throws(() => client.GetAll(null, "name", new CommitRequest()));
+ Assert.Throws(() => client.GetAll("owner", null, new CommitRequest()));
+ Assert.Throws(() => client.GetAll("owner", "name", (CommitRequest)null));
+
+ Assert.Throws(() => client.GetAll(null, "name", new CommitRequest(), ApiOptions.None));
+ Assert.Throws(() => client.GetAll("owner", null, new CommitRequest(), ApiOptions.None));
+ Assert.Throws(() => client.GetAll("owner", "name", null, ApiOptions.None));
+ Assert.Throws(() => client.GetAll("owner", "name", new CommitRequest(), null));
+
+ Assert.Throws(() => client.GetAll(1, (ApiOptions)null));
+ Assert.Throws(() => client.GetAll(1, (CommitRequest)null));
+ Assert.Throws(() => client.GetAll(1, null, ApiOptions.None));
+ Assert.Throws(() => client.GetAll(1, new CommitRequest(), null));
+
+ Assert.Throws(() => client.GetAll("", "name"));
+ Assert.Throws(() => client.GetAll("owner", ""));
+ Assert.Throws(() => client.GetAll("", "name", ApiOptions.None));
+ Assert.Throws(() => client.GetAll("owner", "", ApiOptions.None));
+ Assert.Throws(() => client.GetAll("", "name", new CommitRequest()));
+ Assert.Throws(() => client.GetAll("owner", "", new CommitRequest()));
+ Assert.Throws(() => client.GetAll("", "name", new CommitRequest(), ApiOptions.None));
+ Assert.Throws(() => client.GetAll("owner", "", new CommitRequest(), ApiOptions.None));
+ }
+ }
+
+ public class TheGetSha1Method
+ {
+ [Fact]
+ public void RequestsCorrectUrl()
+ {
+ var gitHubClient = Substitute.For();
+ var client = new ObservableRepositoryCommitsClient(gitHubClient);
+
+ client.GetSha1("fake", "repo", "ref");
+
+ gitHubClient.Received().Repository.Commit.GetSha1("fake", "repo", "ref");
+ }
+
+ [Fact]
+ public void RequestsCorrectUrlByRepositoryId()
+ {
+ var gitHubClient = Substitute.For();
+ var client = new ObservableRepositoryCommitsClient(gitHubClient);
+
+ client.GetSha1(1, "ref");
+
+ gitHubClient.Received().Repository.Commit.GetSha1(1, "ref");
+ }
+
+ [Fact]
+ public void EnsuresNonNullArguments()
+ {
+ var connection = Substitute.For();
+ var client = new ObservableRepositoryCommitsClient(connection);
+
+ Assert.Throws(() => client.GetSha1(null, "name", "ref"));
+ Assert.Throws(() => client.GetSha1("owner", null, "ref"));
+ Assert.Throws(() => client.GetSha1("owner", "name", null));
+
+ Assert.Throws(() => client.GetSha1(1, null));
+
+ Assert.Throws(() => client.GetSha1("", "name", "ref"));
+ Assert.Throws(() => client.GetSha1("owner", "", "ref"));
+ Assert.Throws(() => client.GetSha1("owner", "name", ""));
+
+ Assert.Throws(() => client.GetSha1(1, ""));
+ }
+ }
+ }
+}
\ No newline at end of file