using System; using System.Reactive.Threading.Tasks; using System.Threading.Tasks; using NSubstitute; using Octokit.Reactive; using Xunit; namespace Octokit.Tests.Reactive { public class ObservableCommitsClientTests { public class TheCtor { [Fact] public void EnsuresNonNullArguments() { Assert.Throws(() => new ObservableCommitsClient(null)); } } public class TheGetMethod { [Fact] public async Task RequestsCorrectUrl() { var gitHubClient = Substitute.For(); var client = new ObservableCommitsClient(gitHubClient); client.Get("owner", "name", "reference"); gitHubClient.Git.Commit.Received(1).Get("owner", "name", "reference"); } [Fact] public async Task RequestsCorrectUrlWithRepositoryId() { var gitHubClient = Substitute.For(); var client = new ObservableCommitsClient(gitHubClient); client.Get(1, "reference"); gitHubClient.Git.Commit.Received(1).Get(1, "reference"); } [Fact] public void EnsureNonNullArguments() { var client = new ObservableCommitsClient(Substitute.For()); Assert.Throws(() => client.Get(null, "name", "")); Assert.Throws(() => client.Get("owner", null, "")); 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 TheCreateMethod { [Fact] public async Task PostsToTheCorrectUrl() { var gitHubClient = Substitute.For(); var client = new ObservableCommitsClient(gitHubClient); var newCommit = new NewCommit("message", "tree", new[] { "parent1", "parent2" }); client.Create("owner", "name", newCommit); gitHubClient.Git.Commit.Received().Create("owner", "name", newCommit); } [Fact] public async Task PostsToTheCorrectUrlWithRepositoryId() { var gitHubClient = Substitute.For(); var client = new ObservableCommitsClient(gitHubClient); var newCommit = new NewCommit("message", "tree", new[] { "parent1", "parent2" }); client.Create(1, newCommit); gitHubClient.Git.Commit.Received().Create(1, newCommit); } [Fact] public async Task EnsureNonNullArguments() { var client = new ObservableCommitsClient(Substitute.For()); var newCommit = new NewCommit("message", "tree", new[] { "parent1", "parent2" }); Assert.Throws(() => client.Create(null, "name", newCommit)); Assert.Throws(() => client.Create("owner", null, newCommit)); Assert.Throws(() => client.Create("owner", "name", null)); Assert.Throws(() => client.Create(1, null)); Assert.Throws(() => client.Create("", "name", newCommit)); Assert.Throws(() => client.Create("owner", "", newCommit)); } } } }