public async Task ReturnsEveryPageOfRepositories()
            {
                var firstPageUrl   = new Uri("/repositories", UriKind.Relative);
                var secondPageUrl  = new Uri("https://example.com/page/2");
                var firstPageLinks = new Dictionary <string, Uri> {
                    { "next", secondPageUrl }
                };
                IApiResponse <List <Repository> > firstPageResponse = new ApiResponse <List <Repository> >(
                    CreateResponseWithApiInfo(firstPageLinks),
                    new List <Repository>
                {
                    new Repository(364),
                    new Repository(365),
                    new Repository(366)
                });

                var thirdPageUrl    = new Uri("https://example.com/page/3");
                var secondPageLinks = new Dictionary <string, Uri> {
                    { "next", thirdPageUrl }
                };
                IApiResponse <List <Repository> > secondPageResponse = new ApiResponse <List <Repository> >
                                                                       (
                    CreateResponseWithApiInfo(secondPageLinks),
                    new List <Repository>
                {
                    new Repository(367),
                    new Repository(368),
                    new Repository(369)
                });

                IApiResponse <List <Repository> > lastPageResponse = new ApiResponse <List <Repository> >(
                    new Response(),
                    new List <Repository>
                {
                    new Repository(370)
                });

                var gitHubClient = Substitute.For <IGitHubClient>();

                gitHubClient.Connection.Get <List <Repository> >(firstPageUrl,
                                                                 Arg.Is <Dictionary <string, string> >(d => d.Count == 1 &&
                                                                                                       d["since"] == "364"), null)
                .Returns(Task.FromResult(firstPageResponse));
                gitHubClient.Connection.Get <List <Repository> >(secondPageUrl, null, null)
                .Returns(Task.FromResult(secondPageResponse));
                gitHubClient.Connection.Get <List <Repository> >(thirdPageUrl, null, null)
                .Returns(Task.FromResult(lastPageResponse));

                var repositoriesClient = new ObservableRepositoriesClient(gitHubClient);

                var results = await repositoriesClient.GetAllPublic(new PublicRepositoryRequest(364)).ToArray();

                Assert.Equal(7, results.Length);
                gitHubClient.Connection.Received(1).Get <List <Repository> >(firstPageUrl,
                                                                             Arg.Is <Dictionary <string, string> >(d => d.Count == 1 &&
                                                                                                                   d["since"] == "364"), null);
                gitHubClient.Connection.Received(1).Get <List <Repository> >(secondPageUrl, null, null);
                gitHubClient.Connection.Received(1).Get <List <Repository> >(thirdPageUrl, null, null);
            }
            public async Task ReturnsAllPublicReposSinceLastSeen()
            {
                var github = Helper.GetAuthenticatedClient();

                var client       = new ObservableRepositoriesClient(github);
                var request      = new PublicRepositoryRequest(32732250L);
                var repositories = await client.GetAllPublic(request).ToArray();

                Assert.NotEmpty(repositories);
                Assert.Equal(32732252, repositories[0].Id);
                Assert.False(repositories[0].Private);
                Assert.Equal("zad19", repositories[0].Name);
            }