using System; using System.Collections.Generic; using NSubstitute; using Octokit.Reactive; using Xunit; namespace Octokit.Tests.Reactive { public class ObservablePackageVersionsTests { public class TheCtor { [Fact] public void EnsuresNonNullArguments() { Assert.Throws(() => new ObservablePackageVersionsClient(null)); } } public class TheGetAllMethod { [Fact] public void RequestsCorrectUrl() { var gitHubClient = Substitute.For(); var client = new ObservablePackageVersionsClient(gitHubClient); client.GetAllForOrg("fake", PackageType.RubyGems, "name"); gitHubClient.Connection.Received().Get>( new Uri("orgs/fake/packages/rubygems/name/versions", UriKind.Relative), Arg.Is>(d => d.ContainsKey("state"))); } [Fact] public void RequestsCorrectUrlWithOptionalParameter() { var gitHubClient = Substitute.For(); var client = new ObservablePackageVersionsClient(gitHubClient); client.GetAllForOrg("fake", PackageType.RubyGems, "name", PackageVersionState.Deleted); gitHubClient.Connection.Received().Get>( Arg.Is(u => u.ToString() == "orgs/fake/packages/rubygems/name/versions"), Arg.Is>(d => d.ContainsKey("state") && d["state"] == "deleted")); } [Fact] public void EnsuresNonNullArguments() { var client = new ObservablePackageVersionsClient(Substitute.For()); Assert.Throws(() => client.GetAllForOrg(null, PackageType.Nuget, "name")); Assert.Throws(() => client.GetAllForOrg("", PackageType.Nuget, "name")); Assert.Throws(() => client.GetAllForOrg("fake", PackageType.Nuget, null)); Assert.Throws(() => client.GetAllForOrg("fake", PackageType.Nuget, "")); } } public class TheGetMethod { [Fact] public void RequestsCorrectUrl() { var gitHubClient = Substitute.For(); var client = new ObservablePackageVersionsClient(gitHubClient); client.GetForOrg("fake", PackageType.Npm, "name", 5); gitHubClient.Packages.PackageVersions.Received().GetForOrg("fake", PackageType.Npm, "name", 5); } [Fact] public void EnsuresNonNullArguments() { var client = new ObservablePackageVersionsClient(Substitute.For()); Assert.Throws(() => client.GetForOrg(null, PackageType.Npm, "asd", 5)); Assert.Throws(() => client.GetForOrg("", PackageType.Npm, "asd", 5)); Assert.Throws(() => client.GetForOrg("owner", PackageType.Npm, null, 5)); Assert.Throws(() => client.GetForOrg("owner", PackageType.Npm, "", 5)); Assert.Throws(() => client.GetForOrg("owner", PackageType.Npm, "asd", 0)); } } public class TheDeleteMethod { [Fact] public void RequestsCorrectUrl() { var gitHubClient = Substitute.For(); var client = new ObservablePackageVersionsClient(gitHubClient); client.DeleteForOrg("fake", PackageType.Npm, "name", 5); gitHubClient.Packages.PackageVersions.Received(1).DeleteForOrg("fake", PackageType.Npm, "name", 5); } [Fact] public void EnsuresNonNullArguments() { var client = new ObservablePackageVersionsClient(Substitute.For()); Assert.Throws(() => client.DeleteForOrg(null, PackageType.Npm, "asd", 5)); Assert.Throws(() => client.DeleteForOrg("", PackageType.Npm, "asd", 5)); Assert.Throws(() => client.DeleteForOrg("owner", PackageType.Npm, null, 5)); Assert.Throws(() => client.DeleteForOrg("owner", PackageType.Npm, "", 5)); Assert.Throws(() => client.DeleteForOrg("owner", PackageType.Npm, "asd", 0)); } } public class TheRestoreMethod { [Fact] public void RequestsCorrectUrl() { var gitHubClient = Substitute.For(); var client = new ObservablePackageVersionsClient(gitHubClient); client.RestoreForOrg("fake", PackageType.Npm, "name", 5); gitHubClient.Packages.PackageVersions.Received(1).RestoreForOrg("fake", PackageType.Npm, "name", 5); } [Fact] public void EnsuresNonNullArguments() { var client = new ObservablePackageVersionsClient(Substitute.For()); Assert.Throws(() => client.RestoreForOrg(null, PackageType.Npm, "asd", 5)); Assert.Throws(() => client.RestoreForOrg("", PackageType.Npm, "asd", 5)); Assert.Throws(() => client.RestoreForOrg("owner", PackageType.Npm, null, 5)); Assert.Throws(() => client.RestoreForOrg("owner", PackageType.Npm, "", 5)); Assert.Throws(() => client.RestoreForOrg("owner", PackageType.Npm, "asd", 0)); } } } }