public void GivenNoRegistrationThenTheTransformationShouldReturnOriginalExpression() { var query = new TestQueryableWrapper(); var provider = new QueryInterceptingProvider <IdType>(query); var target = provider.Execute(Expression.Constant(2)); Assert.IsType <ConstantExpression>(target); Assert.Equal(2, (target as ConstantExpression).Value); }
public void GivenExpressionWhenExecuteCalledThenShouldTransformExpressionAndCallSourceProvider() { var query = new TestQueryableWrapper(); var provider = new QueryInterceptingProvider <IdType>(query); provider.RegisterInterceptor(e => Expression.Constant(1)); var target = provider.Execute(Expression.Constant(2)); Assert.IsType <ConstantExpression>(target); Assert.Equal(1, (target as ConstantExpression).Value); }
public void GivenRegisteredGenericTypeWhenSameGenericTypeRegisteredWithThenShouldReplaceImplementation() { var source = new Services(); source.RegisterServices(register => register.RegisterGeneric(typeof(IQueryHost <,>), typeof(QueryHost <,>)) .RegisterGeneric(typeof(IQueryHost <,>), typeof(DerivedQueryHost <,>))); var sourceQuery = new List <string>().AsQueryable(); var provider = new QueryInterceptingProvider <string>(sourceQuery); Assert.NotNull(source.GetService <IQueryHost <string, ICustomQueryProvider <string> > >( sourceQuery.Expression, provider) as DerivedQueryHost <string, ICustomQueryProvider <string> >); }
public void DefaultQueryHostIsQueryHost() { ServiceHost.Reset(); var query = new List <string>().AsQueryable(); var provider = new QueryInterceptingProvider <string>(query); var target = ServiceHost.GetService <IQueryHost <string, ICustomQueryProvider <string> > >( query.Expression, provider); Assert.NotNull(target); Assert.IsType <QueryHost <string, ICustomQueryProvider <string> > >(target); Assert.Same(query.Expression, target.Expression); Assert.Same(provider, target.CustomProvider); ServiceHost.Reset(); }
public void GivenGenericRegistrationWhenGetServiceCalledThenShouldImplementType() { var source = new Services(); source.RegisterServices(registration => registration.RegisterGeneric(typeof(IQueryHost <,>), typeof(QueryHost <,>))); var query = new List <IdType>().AsQueryable(); var provider = new QueryInterceptingProvider <IdType>(query); var target = source.GetService <IQueryHost <IdType, ICustomQueryProvider <IdType> > >( query.Expression, provider); Assert.NotNull(target); Assert.Same(query.Expression, target.Expression); Assert.Same(target.CustomProvider, provider); }
public void GivenRegistrationWhenChildProvidersExistThenRegistrationShouldBePassedToChildren() { var list = new List <IdType> { new IdType(), new IdType(), new IdType() }; var query = list.AsQueryable().Take(1); var swapQuery = list.AsQueryable().Skip(1).Take(1).Select(i => Tuple.Create(i.Id, i.IdVal)); var provider = new QueryInterceptingProvider <IdType>(query); var host = new QueryHost <IdType, QueryInterceptingProvider <IdType> >(query.Expression, provider); // force resolution of a different type var notIntercepted = host.Select(i => Tuple.Create(i.Id, i.IdVal)).ToList(); // now register provider.RegisterInterceptor(e => swapQuery.Expression); var intercepted = host.Select(i => Tuple.Create(i.Id, i.IdVal)).ToList(); Assert.Single(intercepted); Assert.Equal(list[1].Id, intercepted[0].Item1); }