using System; using System.Threading.Tasks; using NSubstitute; using Octokit.Reactive; using Xunit; namespace Octokit.Tests.Reactive { public class ObservableBlobClientTests { public class TheGetMethod { [Fact] public void RequestsCorrectUrl() { var gitHubClient = Substitute.For(); var client = new ObservableBlobClient(gitHubClient); client.Get("fake", "repo", "123456ABCD"); gitHubClient.Git.Blob.Received().Get("fake", "repo", "123456ABCD"); } [Fact] public async Task RequestsCorrectUrlWithRepositoryId() { var gitHubClient = Substitute.For(); var client = new ObservableBlobClient(gitHubClient); client.Get(1, "123456ABCD"); gitHubClient.Git.Blob.Received().Get(1, "123456ABCD"); } [Fact] public async Task EnsuresArguments() { var client = new ObservableBlobClient(Substitute.For()); Assert.Throws(() => client.Get(null, "name", "123456ABCD")); Assert.Throws(() => client.Get("owner", null, "123456ABCD")); Assert.Throws(() => client.Get("owner", "name", null)); Assert.Throws(() => client.Get("", "name", "123456ABCD")); Assert.Throws(() => client.Get("owner", "", "123456ABCD")); Assert.Throws(() => client.Get("owner", "name", "")); } } public class TheCreateMethod { [Fact] public void PostsToCorrectUrl() { var gitHubClient = Substitute.For(); var client = new ObservableBlobClient(gitHubClient); var newBlob = new NewBlob(); client.Create("fake", "repo", newBlob); gitHubClient.Git.Blob.Received().Create("fake", "repo", newBlob); } [Fact] public void PostsToCorrectUrlWithRepositoryId() { var gitHubClient = Substitute.For(); var client = new ObservableBlobClient(gitHubClient); var newBlob = new NewBlob(); client.Create(1, newBlob); gitHubClient.Git.Blob.Received().Create(1, newBlob); } [Fact] public async Task EnsuresArgumentsNotNull() { var gitHubClient = Substitute.For(); var client = new ObservableBlobClient(gitHubClient); Assert.Throws(() => client.Create(null, "name", new NewBlob())); Assert.Throws(() => client.Create("owner", null, new NewBlob())); Assert.Throws(() => client.Create("owner", "name", null)); Assert.Throws(() => client.Create("", "name", new NewBlob())); Assert.Throws(() => client.Create("owner", "", new NewBlob())); } } public class TheCtor { [Fact] public void EnsuresNonNullArguments() { Assert.Throws(() => new ObservableBlobClient(null)); } } } }