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