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