using System; using System.Collections.Generic; using NSubstitute; using Octokit.Reactive; using Xunit; namespace Octokit.Tests { public class ObservableUserEmailsClientTests { private static ObservableUserEmailsClient CreateFixtureWithNonReactiveClient() { var nonreactiveClient = new UserEmailsClient(Substitute.For()); var github = Substitute.For(); github.User.Email.Returns(nonreactiveClient); return new ObservableUserEmailsClient(github); } public class TheGetAllMethod { private static readonly Uri _expectedUri = new Uri("user/emails", UriKind.Relative); [Fact] public void GetsCorrectUrl() { var github = Substitute.For(); var client = new ObservableUserEmailsClient(github); client.GetAll(); github.Connection.Received(1).Get>(_expectedUri, Arg.Is>(dictionary => dictionary.Count == 0)); } [Fact] public void GetsCorrectUrlWithApiOption() { var github = Substitute.For(); var client = new ObservableUserEmailsClient(github); client.GetAll(ApiOptions.None); github.Connection.Received(1).Get>(_expectedUri, Arg.Is>(dictionary => dictionary.Count == 0)); } } public class TheAddMethod { [Fact] public void CallsAddOnClient() { var github = Substitute.For(); var client = new ObservableUserEmailsClient(github); string email = "octo@github.com"; client.Add(email); github.User.Email.Received(1).Add(Arg.Is(email)); } [Fact] public void EnsuresNonNullArguments() { var client = CreateFixtureWithNonReactiveClient(); Assert.Throws(() => client.Add(null)); Assert.Throws(() => client.Add("octo@github.com", null)); } [Fact] public void EnsuresNonEmptyArguments() { var client = CreateFixtureWithNonReactiveClient(); Assert.Throws(() => client.Add("")); Assert.Throws(() => client.Add("octo@github.com", "")); } } public class TheCtor { [Fact] public void EnsuresNonNullArguments() { Assert.Throws( () => new ObservableUserEmailsClient(null)); } } } }