public void CanTranslateFetchCollectionClause() { var session = new Mock <ISession>(); var executor = new SpecificationExecutor(); var specification = new WithFetchCollection(); var queryable = executor.ExecuteSpecification(session.Object, specification); var fetchManyMethodInfo = ReflectionHelper.FindMethod( BindingFlags.Static | BindingFlags.Public, typeof(EagerFetchingExtensionMethods), nameof(EagerFetchingExtensionMethods.FetchMany), null, new ArgumentConstraint(typeof(IQueryable <>), 1), new ArgumentConstraint(typeof(Expression <>).MakeGenericType(typeof(Func <,>)), 2)); var lambda = (MethodCallExpression)queryable.Expression; Assert.Equal(ExpressionType.Call, lambda.NodeType); Assert.Same( fetchManyMethodInfo.MakeGenericMethod(typeof(User), typeof(Order)), lambda.Method); Assert.Same( specification.Expression.Body, ((UnaryExpression)((LambdaExpression)((UnaryExpression)lambda.Arguments.ElementAt(1)).Operand).Body).Operand); }
public void CanTranslateFetchCollectionClause() { var context = new Mock <Context>(); context .Setup(x => x.Set <User>()) .Returns(new FakeSet <User>()); var executor = new SpecificationExecutor(); var specification = new WithFetchCollection(); var queryable = executor.ExecuteSpecification(context.Object, specification); var fetchMethodInfo = ReflectionHelper.FindMethod( BindingFlags.Static | BindingFlags.Public, typeof(EntityFrameworkQueryableExtensions), nameof(EntityFrameworkQueryableExtensions.Include), null, new ArgumentConstraint(typeof(IQueryable <>), 1), new ArgumentConstraint(typeof(Expression <>).MakeGenericType(typeof(Func <,>)), 2)); var lambda = (MethodCallExpression)queryable.Expression; Assert.Equal(ExpressionType.Call, lambda.NodeType); Assert.Same( fetchMethodInfo.MakeGenericMethod(typeof(User), typeof(ICollection <Order>)), lambda.Method); Assert.Same( specification.Expression.Body, ((LambdaExpression)((UnaryExpression)lambda.Arguments.ElementAt(1)).Operand).Body); }