public void EnsuresNonNullArguments()
            {
                var gitHubClient = Substitute.For<IGitHubClient>();
                var client = new ObservableRepositoryContentsClient(gitHubClient);

                Assert.Throws<ArgumentNullException>(() => client.GetAllContents(null, "name"));
                Assert.Throws<ArgumentNullException>(() => client.GetAllContents("owner", null));
                Assert.Throws<ArgumentNullException>(() => client.GetAllContents(null, "name", "path"));
                Assert.Throws<ArgumentNullException>(() => client.GetAllContents("owner", null, "path"));
                Assert.Throws<ArgumentNullException>(() => client.GetAllContents("owner", "name", null));

                Assert.Throws<ArgumentNullException>(() => client.GetAllContents(1, null));

                Assert.Throws<ArgumentException>(() => client.GetAllContents("", "name"));
                Assert.Throws<ArgumentException>(() => client.GetAllContents("owner", ""));
                Assert.Throws<ArgumentException>(() => client.GetAllContents("", "name", "path"));
                Assert.Throws<ArgumentException>(() => client.GetAllContents("owner", "", "path"));
                Assert.Throws<ArgumentException>(() => client.GetAllContents("owner", "name", ""));

                Assert.Throws<ArgumentException>(() => client.GetAllContents(1, ""));
            }
            public async Task ReturnsAllContentsWithRepositoryId()
            {
                var result = new List<RepositoryContent> { new RepositoryContent() };

                var connection = Substitute.For<IConnection>();
                var gitHubClient = new GitHubClient(connection);
                var contentsClient = new ObservableRepositoryContentsClient(gitHubClient);
                IApiResponse<List<RepositoryContent>> response = new ApiResponse<List<RepositoryContent>>
                    (
                    new Response { ApiInfo = new ApiInfo(new Dictionary<string, Uri>(), new List<string>(), new List<string>(), "etag", new RateLimit()) },
                    result
                    );
                connection.Get<List<RepositoryContent>>(Args.Uri, null, null)
                    .Returns(Task.FromResult(response));

                var contents = await contentsClient.GetAllContents(1).ToList();

                connection.Received().Get<List<RepositoryContent>>(Arg.Is<Uri>(u => u.ToString() == "repositories/1/contents/"), null, null);
                Assert.Equal(1, contents.Count);
            }