public async Task Reads_All_Pages() { int page = 0; string CreateComment(int index) { return(@" { id: ""comment" + index + @""", body: ""comment " + index + @""" }"); } string CreateIssue(int number, int commentCount, bool hasNextPage) { return(@" { id: ""issue" + number + @""", number: " + number + @", comments: { ""pageInfo"": { ""hasNextPage"": " + hasNextPage.ToString().ToLower() + @", ""endCursor"": """ + "comment_end" + number + @""" }, ""nodes"": [" + string.Join(",", Enumerable.Range(number * 10, commentCount).Select(x => CreateComment(x))) + @" ] } }"); } string Execute(string query, IDictionary <string, string> variables) { switch (page++) { case 0: Assert.Null(variables); return(@"{ data: { ""repository"": { ""id"": ""repoid"", ""issues"": { ""pageInfo"": { ""hasNextPage"": true, ""endCursor"": ""issue_end0"" }, ""nodes"": [" + CreateIssue(1, 1, false) + "," + CreateIssue(2, 3, true) + "," + CreateIssue(3, 0, false) + @" ] } } } }"); case 1: Assert.NotNull(variables); Assert.Equal("issue2", variables["__id"]); Assert.Equal("comment_end2", variables["__after"]); return(@"{ data: { ""node"": { ""__typename"": ""Issue"", ""comments"": { ""pageInfo"": { ""hasNextPage"": false, ""endCursor"": ""comment_end"" }, ""nodes"": [" + CreateComment(23) + "," + CreateComment(24) + @" ] } } } }"); case 2: Assert.NotNull(variables); Assert.Equal("repoid", variables["__id"]); Assert.Equal("issue_end0", variables["__after"]); return(@"{ data: { ""node"": { ""__typename"": ""Repository"", ""issues"": { ""pageInfo"": { ""hasNextPage"": false, ""endCursor"": ""issue_end1"" }, ""nodes"": [" + CreateIssue(4, 0, false) + "," + CreateIssue(5, 0, false) + @" ] } } } }"); default: throw new NotSupportedException("Should not get here"); } } var connection = new MockConnection(Execute); var result = (await connection.Run(TestQuery)).ToList(); Assert.Equal(Enumerable.Range(1, 5).ToList(), result.Select(x => x.Number).ToList()); Assert.Single(result[0].Comments); Assert.Equal(5, result[1].Comments.Count); Assert.Empty(result[2].Comments); Assert.Empty(result[3].Comments); Assert.Empty(result[4].Comments); }
public async Task Reads_All_Pages() { int page = 0; string Execute(string _, IDictionary <string, string> variables) { switch (page++) { case 0: Assert.Null(variables); return(@"{ data: { ""repository"": { ""id"": ""repoid"", ""issues"": { ""pageInfo"": { ""hasNextPage"": true, ""endCursor"": ""end0"" }, ""nodes"": [ { ""number"": 0 }, { ""number"": 1 }, { ""number"": 2 }, ] } } } }"); case 1: Assert.NotNull(variables); Assert.Equal(variables["__id"], "repoid"); Assert.Equal(variables["__after"], "end0"); return(@"{ data: { ""node"": { ""__typename"": ""Repository"", ""issues"": { ""pageInfo"": { ""hasNextPage"": true, ""endCursor"": ""end1"" }, ""nodes"": [ { ""number"": 3 }, { ""number"": 4 }, ] } } } }"); case 2: Assert.NotNull(variables); Assert.Equal(variables["__after"], "end1"); return(@"{ data: { ""node"": { ""__typename"": ""Repository"", ""issues"": { ""pageInfo"": { ""hasNextPage"": false, ""endCursor"": ""end2"" }, ""nodes"": [ { ""number"": 5 }, ] } } } }"); default: throw new NotSupportedException("Should not get here"); } } var connection = new MockConnection(Execute); var result = (await connection.Run(TestQuery())).ToList(); Assert.Equal(Enumerable.Range(0, 6).ToList(), result); }
public async Task Reads_All_Pages() { int page = 0; string Execute(string _, IDictionary <string, string> variables) { switch (page++) { case 0: Assert.Null(variables); return(@"{ ""data"": { ""repository"": { ""id"": ""repoId"", ""intList1"": { ""pageInfo"": { ""hasNextPage"": true, ""endCursor"": ""endCursor1"" }, ""nodes"": [{ ""number"": 1 }, { ""number"": 2 }, { ""number"": 3 } ] }, ""intList2"": { ""pageInfo"": { ""hasNextPage"": true, ""endCursor"": ""endCursor2"" }, ""nodes"": [{ ""number"": 4 }, { ""number"": 5 }, { ""number"": 6 } ] } } } }"); case 1: Assert.NotNull(variables); Assert.Equal("repoId", variables["__id"]); Assert.Equal("endCursor2", variables["__after"]); return(@"{ ""data"": { ""node"": { ""__typename"": ""Repository"", ""issues"": { ""pageInfo"": { ""hasNextPage"": false, ""endCursor"": ""endCursor2.1"" }, ""nodes"": [{ ""number"": 4 }, { ""number"": 5 } ] } } } }"); case 2: Assert.NotNull(variables); Assert.Equal("repoId", variables["__id"]); Assert.Equal("endCursor1", variables["__after"]); return(@"{ ""data"": { ""node"": { ""__typename"": ""Repository"", ""issues"": { ""pageInfo"": { ""hasNextPage"": false, ""endCursor"": ""endCursor1.1"" }, ""nodes"": [{ ""number"": 4 }, { ""number"": 5 }, { ""number"": 6 } ] } } } }"); default: throw new NotSupportedException("Should not get here"); } } var query = new Query() .Repository("foo", "bar") .Select(repository => new { IntList1 = repository.Issues(null, null, null, null, null) .AllPages() .Select(issue => issue.Number) .ToList(), IntList2 = repository.Issues(null, null, null, null, null) .AllPages() .Select(issue => issue.Number) .ToList() }).Compile(); var connection = new MockConnection(Execute); var result = (await connection.Run(query)); Assert.Equal(6, result.IntList1.Count); Assert.Equal(5, result.IntList2.Count); }