public void Creates_PagedSubquery_1_MasterQuery_Expression() { Expression <Func <JObject, IEnumerable <IssueModel> > > expected = data => (IEnumerable <IssueModel>)Rewritten.List.Select( Rewritten.Interface.Cast(data["data"]["node"], "Repository")["issues"]["nodes"], issue => new IssueModel { Number = issue["number"].ToObject <int>(), Comments = Rewritten.List.ToSubqueryList( Rewritten.List.Select( issue["comments"]["nodes"], comment => new CommentModel { Id = comment["id"].ToString(), Body = comment["body"].ToObject <string>() }), data.Annotation <ISubqueryRunner>(), SubqueryPlaceholder.placeholder) }).ToList(); var expectedString = ExpressionRewriterAssertions.ReplaceSubqueryPlaceholders(expected.ToReadableString(), "SimpleSubquery<IEnumerable<CommentModel>>"); var actual = ExpressionCompiler.GetSourceExpression(TestQueryFirstSubqueryMasterQuery.ResultBuilder); var actualString = actual.ToReadableString(); Assert.Equal(ExpressionRewriterAssertions.StripWhitespace(expectedString), ExpressionRewriterAssertions.StripWhitespace(actualString)); }
public void Creates_Subquery_2_Expression_ParentPageInfo() { 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 subqueries = query.GetSubqueries(); var queryFirstSubquery = (SimpleSubquery <IEnumerable <int> >)subqueries[1]; var actual = ExpressionCompiler.GetSourceExpression(queryFirstSubquery.ParentPageInfo); var actualString = actual.ToReadableString(); Expression <Func <JObject, IEnumerable <JToken> > > expected = data => data.SelectTokens("$.data.repository.intList2.pageInfo"); var expectedString = expected.ToReadableString(); Assert.Equal(ExpressionRewriterAssertions.StripWhitespace(expectedString), ExpressionRewriterAssertions.StripWhitespace(actualString)); }
public void Creates_Subquery_2_Expression() { Expression <Func <JObject, IEnumerable <int> > > expected = data => (IEnumerable <int>)Rewritten.List.Select( Rewritten.Interface.Cast(data["data"]["node"], "Repository")["issues"]["nodes"], issue => issue["number"].ToObject <int>()).ToList(); var expectedString = expected.ToReadableString(); 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 subqueries = query.GetSubqueries(); var queryFirstSubquery = (SimpleSubquery <IEnumerable <int> >)subqueries[1]; var actual = ExpressionCompiler.GetSourceExpression(queryFirstSubquery.ResultBuilder); var actualString = actual.ToReadableString(); Assert.Equal(ExpressionRewriterAssertions.StripWhitespace(expectedString), ExpressionRewriterAssertions.StripWhitespace(actualString)); }
public void Creates_Subquery_Expression_ParentPage() { Expression <Func <JObject, IEnumerable <JToken> > > expected = data => data.SelectTokens("$.data.repository.issues.pageInfo"); var expectedString = expected.ToReadableString(); var actualExpression = ExpressionCompiler.GetSourceExpression(TestQueryFirstSubquery().ParentPageInfo); var actualString = actualExpression.ToReadableString(); Assert.Equal(ExpressionRewriterAssertions.StripWhitespace(expectedString), ExpressionRewriterAssertions.StripWhitespace(actualString)); }
public void Creates_Subquery_Expression_PageInfo() { Expression <Func <JObject, JToken> > expected = data => data.SelectToken("data.node.issues.pageInfo"); var expectedString = expected.ToReadableString(); var actual = ExpressionCompiler.GetSourceExpression(TestQueryFirstSubquery().PageInfo); var actualString = actual.ToReadableString(); Assert.Equal(ExpressionRewriterAssertions.StripWhitespace(expectedString), ExpressionRewriterAssertions.StripWhitespace(actualString)); }
public void Creates_PagedSubquery_1_SubQuery_Expression_ParentPageInfo() { var actual = ExpressionCompiler.GetSourceExpression(TestQueryFirstSubqueryFirstSubquery.ParentPageInfo); var actualString = actual.ToReadableString(); Expression <Func <JObject, IEnumerable <JToken> > > expected = data => data.SelectTokens("$.data.node.issues.nodes.[*].comments.pageInfo"); var expectedString = expected.ToReadableString(); Assert.Equal(ExpressionRewriterAssertions.StripWhitespace(expectedString), ExpressionRewriterAssertions.StripWhitespace(actualString)); }
public void Creates_Subquery_ParentIds_Selector() { var expected = Expected(data => data.SelectTokens("$.data.repository.id")); var subqueries = TestQuery.GetSubqueries(); Assert.Single(subqueries); var actual = ExpressionCompiler.GetSourceExpression(subqueries[0].ParentIds); Assert.Equal(expected, actual.ToString()); }
public void Creates_Subquery_2_ParentPageInfo_Selector() { var expected = Expected(data => data.SelectTokens("$.data.repository.issues.nodes.[*].comments.pageInfo")); var subqueries = TestQuery.GetSubqueries(); Assert.Equal(2, subqueries.Count); var actual = ExpressionCompiler.GetSourceExpression(subqueries[1].ParentPageInfo); Assert.Equal(expected, actual.ToString()); }
public void Creates_Subquery_1_PageInfo_Selector() { var expected = Expected(data => data.SelectToken("data.node.issues.pageInfo"));; var subqueries = TestQuery.GetSubqueries(); Assert.Equal(2, subqueries.Count); var actual = ExpressionCompiler.GetSourceExpression(subqueries[0].PageInfo); Assert.Equal(expected, actual.ToString()); }
public void Creates_Subquery_Expression() { Expression <Func <JObject, IEnumerable <int> > > expected = data => (IEnumerable <int>)Rewritten.List.Select( Rewritten.Interface.Cast(data["data"]["node"], "Repository")["issues"]["nodes"], issue => issue["number"].ToObject <int>()).ToList(); var expectedString = expected.ToReadableString(); var actual = ExpressionCompiler.GetSourceExpression(TestQueryFirstSubquery().ResultBuilder); var actualString = actual.ToReadableString(); Assert.Equal(ExpressionRewriterAssertions.StripWhitespace(expectedString), ExpressionRewriterAssertions.StripWhitespace(actualString)); }
public void Creates_Subquery_2_MasterQuery_Expression() { Expression <Func <JObject, IEnumerable <CommentModel> > > expected = data => (IEnumerable <CommentModel>)Rewritten.List.Select( Rewritten.Interface.Cast(data["data"]["node"], "Issue")["comments"]["nodes"], comment => new CommentModel { Id = comment["id"].ToString(), Body = comment["body"].ToObject <string>() }).ToList(); var expectedString = expected.ToReadableString(); var actual = ExpressionCompiler.GetSourceExpression(TestQuerySecondSubquery.ResultBuilder); var actualString = actual.ToReadableString(); Assert.Equal(ExpressionRewriterAssertions.StripWhitespace(expectedString), ExpressionRewriterAssertions.StripWhitespace(actualString)); }
public static void AssertSubqueryEqual <T>(Expression <Func <JObject, T> > expectedResultExpression, Expression <Func <JObject, JToken> > expectedPageInfoExpression, Expression <Func <JObject, IEnumerable <JToken> > > expectedParentIdExpression, Expression <Func <JObject, IEnumerable <JToken> > > expectedParentPageInfoExpression, PagedSubquery <T> subquery) { var resultExpression = ExpressionCompiler.GetSourceExpression(subquery.MasterQuery.ResultBuilder); Assert.Equal(StripWhitespace(expectedResultExpression.ToReadableString()), StripWhitespace(resultExpression.ToReadableString())); var pageInfoExpression = ExpressionCompiler.GetSourceExpression(subquery.PageInfo); Assert.Equal(StripWhitespace(expectedPageInfoExpression.ToReadableString()), StripWhitespace(pageInfoExpression.ToReadableString())); var parentIdExpression = ExpressionCompiler.GetSourceExpression(subquery.ParentIds); Assert.Equal(StripWhitespace(expectedParentIdExpression.ToReadableString()), StripWhitespace(parentIdExpression.ToReadableString())); var parentPageInfoExpression = ExpressionCompiler.GetSourceExpression(subquery.ParentPageInfo); Assert.Equal(StripWhitespace(expectedParentPageInfoExpression.ToReadableString()), StripWhitespace(parentPageInfoExpression.ToReadableString())); }
public static Expression GetResultBuilderExpression <T>(this ICompiledQuery <T> query) { return(ExpressionCompiler.GetSourceExpression(((SimpleQuery <T>)query).ResultBuilder)); }