예제 #1
0
    public async Task ReturnsAllIssuesForARepository()
    {
        var issues = await _client.GetForRepository("libgit2", "libgit2sharp").ToList();

        Assert.NotEmpty(issues);
    }
        public async Task ReturnsEveryPageOfIssues()
        {
            var firstPageUrl   = new Uri("repos/fake/repo/issues", UriKind.Relative);
            var secondPageUrl  = new Uri("https://example.com/page/2");
            var firstPageLinks = new Dictionary <string, Uri> {
                { "next", secondPageUrl }
            };
            var firstPageResponse = new ApiResponse <List <Issue> >
            {
                BodyAsObject = new List <Issue>
                {
                    new Issue {
                        Number = 1
                    },
                    new Issue {
                        Number = 2
                    },
                    new Issue {
                        Number = 3
                    },
                },
                ApiInfo = CreateApiInfo(firstPageLinks)
            };
            var thirdPageUrl    = new Uri("https://example.com/page/3");
            var secondPageLinks = new Dictionary <string, Uri> {
                { "next", thirdPageUrl }
            };
            var secondPageResponse = new ApiResponse <List <Issue> >
            {
                BodyAsObject = new List <Issue>
                {
                    new Issue {
                        Number = 4
                    },
                    new Issue {
                        Number = 5
                    },
                    new Issue {
                        Number = 6
                    },
                },
                ApiInfo = CreateApiInfo(secondPageLinks)
            };
            var lastPageResponse = new ApiResponse <List <Issue> >
            {
                BodyAsObject = new List <Issue>
                {
                    new Issue {
                        Number = 7
                    },
                },
                ApiInfo = CreateApiInfo(new Dictionary <string, Uri>())
            };
            var gitHubClient = Substitute.For <IGitHubClient>();

            gitHubClient.Connection.GetAsync <List <Issue> >(Arg.Is(firstPageUrl),
                                                             Arg.Is <Dictionary <string, string> >(d => d.Count == 4 &&
                                                                                                   d["direction"] == "desc" &&
                                                                                                   d["state"] == "open" &&
                                                                                                   d["sort"] == "created" &&
                                                                                                   d["filter"] == "assigned"), Arg.Any <string>())
            .Returns(Task.Factory.StartNew <IResponse <List <Issue> > >(() => firstPageResponse));
            gitHubClient.Connection.GetAsync <List <Issue> >(secondPageUrl, null, null)
            .Returns(Task.Factory.StartNew <IResponse <List <Issue> > >(() => secondPageResponse));
            gitHubClient.Connection.GetAsync <List <Issue> >(thirdPageUrl, null, null)
            .Returns(Task.Factory.StartNew <IResponse <List <Issue> > >(() => lastPageResponse));
            var client = new ObservableIssuesClient(gitHubClient);

            var results = await client.GetForRepository("fake", "repo").ToArray();

            Assert.Equal(7, results.Length);
            Assert.Equal(firstPageResponse.BodyAsObject[0].Number, results[0].Number);
            Assert.Equal(secondPageResponse.BodyAsObject[1].Number, results[4].Number);
            Assert.Equal(lastPageResponse.BodyAsObject[0].Number, results[6].Number);
        }
예제 #3
0
        public void ReturnsAllIssuesForARepository()
        {
            var issues = client.GetForRepository("libgit2", "libgit2sharp").ToList().Wait();

            Assert.NotEmpty(issues);
        }