using NSubstitute; using System; using System.Collections.Generic; using System.Threading.Tasks; using Xunit; namespace Octokit.Tests.Clients { public class RepositoryTrafficClientTests { public class TheCtor { [Fact] public void EnsuresNonNullArguments() { Assert.Throws( () => new RepositoryTrafficClient(null)); } } public class TheGetAllReferrersMethod { [Fact] public async Task RequestsCorrectUrl() { var connection = Substitute.For(); var client = new RepositoryTrafficClient(connection); await client.GetReferrers("fake", "repo"); connection.Received().GetAll(Arg.Is(u => u.ToString() == "repos/fake/repo/traffic/popular/referrers"), "application/vnd.github.spiderman-preview"); } [Fact] public async Task RequestsCorrectUrlWithRepositoryId() { var connection = Substitute.For(); var client = new RepositoryTrafficClient(connection); await client.GetReferrers(1); connection.Received().GetAll(Arg.Is(u => u.ToString() == "repositories/1/traffic/popular/referrers"), "application/vnd.github.spiderman-preview"); } [Fact] public async Task EnsuresNonNullArguments() { var client = new RepositoryTrafficClient(Substitute.For()); await Assert.ThrowsAsync(() => client.GetReferrers(null, "name")); await Assert.ThrowsAsync(() => client.GetReferrers("owner", null)); await Assert.ThrowsAsync(() => client.GetReferrers("", "name")); await Assert.ThrowsAsync(() => client.GetReferrers("owner", "")); } } public class TheGetAllPathsMethod { [Fact] public async Task RequestsCorrectUrl() { var connection = Substitute.For(); var client = new RepositoryTrafficClient(connection); await client.GetPaths("fake", "repo"); connection.Received().GetAll(Arg.Is(u => u.ToString() == "repos/fake/repo/traffic/popular/paths"), "application/vnd.github.spiderman-preview"); } [Fact] public async Task RequestsCorrectUrlWithRepositoryId() { var connection = Substitute.For(); var client = new RepositoryTrafficClient(connection); await client.GetPaths(1); connection.Received().GetAll(Arg.Is(u => u.ToString() == "repositories/1/traffic/popular/paths"), "application/vnd.github.spiderman-preview"); } [Fact] public async Task EnsuresNonNullArguments() { var client = new RepositoryTrafficClient(Substitute.For()); await Assert.ThrowsAsync(() => client.GetPaths(null, "name")); await Assert.ThrowsAsync(() => client.GetPaths("owner", null)); await Assert.ThrowsAsync(() => client.GetPaths("", "name")); await Assert.ThrowsAsync(() => client.GetPaths("owner", "")); } } public class TheGetClonesMethod { [Fact] public async Task RequestsCorrectUrl() { var connection = Substitute.For(); var client = new RepositoryTrafficClient(connection); var per = new RepositoryTrafficRequest(TrafficDayOrWeek.Day); await client.GetClones("fake", "repo", per); connection.Received().Get(Arg.Is(u => u.ToString() == "repos/fake/repo/traffic/clones"), Arg.Is>(s => s["per"] == "day"), "application/vnd.github.spiderman-preview"); } [Fact] public async Task RequestsCorrectUrlWithRepositoryId() { var connection = Substitute.For(); var client = new RepositoryTrafficClient(connection); var per = new RepositoryTrafficRequest(TrafficDayOrWeek.Day); await client.GetClones(1, per); connection.Received().Get(Arg.Is(u => u.ToString() == "repositories/1/traffic/clones"), Arg.Is>(s => s["per"] == "day"), "application/vnd.github.spiderman-preview"); } [Fact] public async Task EnsuresNonNullArguments() { var client = new RepositoryTrafficClient(Substitute.For()); var per = new RepositoryTrafficRequest(TrafficDayOrWeek.Day); await Assert.ThrowsAsync(() => client.GetClones(null, "name", per)); await Assert.ThrowsAsync(() => client.GetClones("owner", null, per)); await Assert.ThrowsAsync(() => client.GetClones("owner", "name", null)); await Assert.ThrowsAsync(() => client.GetClones("", "name", per)); await Assert.ThrowsAsync(() => client.GetClones("owner", "", per)); await Assert.ThrowsAsync(() => client.GetClones(1, null)); } } public class TheGetViewsMethod { [Fact] public async Task RequestsCorrectUrl() { var connection = Substitute.For(); var client = new RepositoryTrafficClient(connection); var per = new RepositoryTrafficRequest(TrafficDayOrWeek.Day); await client.GetViews("fake", "repo", per); connection.Received().Get(Arg.Is(u => u.ToString() == "repos/fake/repo/traffic/views"), Arg.Is>(s => s["per"] == "day"), "application/vnd.github.spiderman-preview"); } [Fact] public async Task RequestsCorrectUrlWithRepositoryId() { var connection = Substitute.For(); var client = new RepositoryTrafficClient(connection); var per = new RepositoryTrafficRequest(TrafficDayOrWeek.Day); await client.GetViews(1, per); connection.Received().Get(Arg.Is(u => u.ToString() == "repositories/1/traffic/views"), Arg.Is>(s => s["per"] == "day"), "application/vnd.github.spiderman-preview"); } [Fact] public async Task EnsuresNonNullArguments() { var client = new RepositoryTrafficClient(Substitute.For()); var per = new RepositoryTrafficRequest(TrafficDayOrWeek.Day); await Assert.ThrowsAsync(() => client.GetViews(null, "name", per)); await Assert.ThrowsAsync(() => client.GetViews("owner", null, per)); await Assert.ThrowsAsync(() => client.GetViews("owner", "name", null)); await Assert.ThrowsAsync(() => client.GetViews("", "name", per)); await Assert.ThrowsAsync(() => client.GetViews("owner", "", per)); await Assert.ThrowsAsync(() => client.GetViews(1, null)); } } } }