public void RebindEntityToEntityIsUnchanged()
        {
            var source  = new FakeQuery <Sample>(new FakeQueryProvider()).Select(f => f);
            var rebound = ElasticFieldsProjectionExpressionVisitor.Rebind(hitParameter, "prefix", validMapping, source.Expression);

            Assert.Same(source.Expression, rebound);
        }
        public void RebindElasticFieldsToHitProperties()
        {
            var source  = new FakeQuery <Sample>(new FakeQueryProvider()).Select(f => ElasticFields.Score);
            var rebound = ElasticFieldsProjectionExpressionVisitor.Rebind(hitParameter, "prefix", validMapping, source.Expression);

            var flattened = FlatteningExpressionVisitor.Flatten(rebound);

            Assert.Single(flattened.OfType <MemberExpression>(), e => e.Expression == hitParameter && e.Member.Name == "_score");
        }
 public void Rebind_GuardClauses()
 {
     Assert.Throws <ArgumentNullException>(() =>
                                           ElasticFieldsProjectionExpressionVisitor.Rebind(null, "prefix", validMapping, Expression.Constant(1)));
     Assert.Throws <ArgumentNullException>(() =>
                                           ElasticFieldsProjectionExpressionVisitor.Rebind(hitParameter, "prefix", null, Expression.Constant(1)));
     Assert.Throws <ArgumentNullException>(() =>
                                           ElasticFieldsProjectionExpressionVisitor.Rebind(hitParameter, "prefix", validMapping, null));
 }
        public void RebindWithNonElasticMemberIsUnchanged()
        {
            var source  = new FakeQuery <Sample>(new FakeQueryProvider()).Select(f => f.Name);
            var rebound = ElasticFieldsProjectionExpressionVisitor.Rebind(hitParameter, "prefix", validMapping, source.Expression);

            var memberExpression = FlatteningExpressionVisitor.Flatten(rebound).OfType <MemberExpression>().FirstOrDefault();

            Assert.NotNull(memberExpression);
            Assert.Equal(memberExpression.Member.Name, "Name");
            Assert.IsAssignableFrom <ParameterExpression>(memberExpression.Expression);
            Assert.Equal("f", ((ParameterExpression)memberExpression.Expression).Name);
        }
        public void RebindAnonymousProjectionEntityAndElasticFieldsToMaterializationAndHitProperty()
        {
            var source  = new FakeQuery <Sample>(new FakeQueryProvider()).Select(f => new { f, ElasticFields.Score });
            var rebound = ElasticFieldsProjectionExpressionVisitor.Rebind(hitParameter, "prefix", validMapping, source.Expression);

            var flattened = FlatteningExpressionVisitor.Flatten(rebound);

            Assert.Single(flattened.OfType <MemberExpression>(), m => m.Expression == hitParameter && m.Member.Name == "_score");
            Assert.Contains(hitParameter, flattened);

            var entityParameter = flattened.OfType <ParameterExpression>().FirstOrDefault(p => p.Name == "f" && p.Type == typeof(Sample));

            Assert.NotNull(entityParameter);
            Assert.Single(flattened.OfType <NewExpression>(), e => e.Arguments.Contains(entityParameter));
        }