public void OrderBy_Duplicate_Test()
        {
            var builder = new QueryModelBuilder();

            builder.AddClause(new MainFromClause("x", typeof(Contact), Expression.Constant(null)));
            builder.AddClause(new OrderByClause
            {
                Orderings =
                {
                    new Ordering(GetExpression((Contact c) => c.FirstName), OrderingDirection.Asc)
                }
            });
            builder.AddClause(new OrderByClause
            {
                Orderings =
                {
                    new Ordering(GetExpression((Contact c) => c.LastName), OrderingDirection.Desc)
                }
            });
            builder.AddClause(new SelectClause(Expression.Constant(null)));

            var visitor = new SDataQueryModelVisitor();

            visitor.VisitQueryModel(builder.Build());

            Assert.That(visitor.OrderBy, Is.EqualTo("LastName desc,FirstName asc"));
        }
        public void Select_Nested_Test()
        {
            var builder = new QueryModelBuilder();

            builder.AddClause(new MainFromClause("x", typeof(Contact), Expression.Constant(null)));
            builder.AddClause(new SelectClause(GetExpression((Contact c) => c.Address.PostalCode)));

            var visitor = new SDataQueryModelVisitor();

            visitor.VisitQueryModel(builder.Build());

            Assert.That(visitor.Select, Is.EqualTo("Address/PostalCode"));
        }
        public void Select_Array_Test()
        {
            var builder = new QueryModelBuilder();

            builder.AddClause(new MainFromClause("x", typeof(Contact), Expression.Constant(null)));
            builder.AddClause(new SelectClause(GetExpression((Contact c) => new[] { c.FirstName, c.LastName })));

            var visitor = new SDataQueryModelVisitor();

            visitor.VisitQueryModel(builder.Build());

            Assert.That(visitor.Select, Is.EqualTo("FirstName,LastName"));
        }
        public void Select_Complex_Test()
        {
            var builder = new QueryModelBuilder();

            builder.AddClause(new MainFromClause("x", typeof(Contact), Expression.Constant(null)));
            builder.AddClause(new SelectClause(GetExpression((Contact c) => c.Civility.ToString().Length)));

            var visitor = new SDataQueryModelVisitor();

            visitor.VisitQueryModel(builder.Build());

            Assert.That(visitor.Select, Is.EqualTo("Civility"));
        }
        public void MainType_Test()
        {
            var builder = new QueryModelBuilder();

            builder.AddClause(new MainFromClause("x", typeof(Contact), Expression.Constant(null)));
            builder.AddClause(new SelectClause(Expression.Constant(null)));

            var visitor = new SDataQueryModelVisitor();

            visitor.VisitQueryModel(builder.Build());

            Assert.That(visitor.MainType, Is.EqualTo(typeof(Contact)));
        }
        public void ResultOperator_WithPrecedence_Test()
        {
            var builder = new QueryModelBuilder();

            builder.AddClause(new MainFromClause("x", typeof(Contact), Expression.Constant(null)));
            builder.AddClause(new SelectClause(new QuerySourceReferenceExpression(builder.MainFromClause)));
            builder.AddResultOperator(new WithPrecedenceResultOperator(3));

            var visitor = new SDataQueryModelVisitor();

            visitor.VisitQueryModel(builder.Build());

            Assert.That(visitor.Precedence, Is.EqualTo(3));
        }
        public void ResultOperator_Fetch_Permissions_Test()
        {
            var builder = new QueryModelBuilder();

            builder.AddClause(new MainFromClause("x", typeof(Contact), Expression.Constant(null)));
            builder.AddClause(new SelectClause(Expression.Constant(null)));
            builder.AddResultOperator(new FetchResultOperator(GetExpression((Contact c) => c.Permissions)));

            var visitor = new SDataQueryModelVisitor();

            visitor.VisitQueryModel(builder.Build());

            Assert.That(visitor.Include, Is.EqualTo("$permissions"));
        }
        public void Where_Test()
        {
            var builder = new QueryModelBuilder();

            builder.AddClause(new MainFromClause("x", typeof(Contact), Expression.Constant(null)));
            builder.AddClause(new WhereClause(GetExpression((Contact c) => c.Active)));
            builder.AddClause(new SelectClause(Expression.Constant(null)));

            var visitor = new SDataQueryModelVisitor();

            visitor.VisitQueryModel(builder.Build());

            Assert.That(visitor.Where, Is.EqualTo("Active"));
        }
        public void ResultOperator_Skip_Test()
        {
            var builder = new QueryModelBuilder();

            builder.AddClause(new MainFromClause("x", typeof(Contact), Expression.Constant(null)));
            builder.AddClause(new SelectClause(Expression.Constant(null)));
            builder.AddResultOperator(new SkipResultOperator(Expression.Constant(10)));

            var visitor = new SDataQueryModelVisitor();

            visitor.VisitQueryModel(builder.Build());

            Assert.That(visitor.StartIndex, Is.EqualTo(11));
        }
        public void Select_ProtocolProperty_Test()
        {
            var builder = new QueryModelBuilder();

            builder.AddClause(new MainFromClause("x", typeof(Contact), Expression.Constant(null)));
            builder.AddClause(new SelectClause(GetExpression((Contact c) => c.Key)));

            var visitor = new SDataQueryModelVisitor();

            visitor.VisitQueryModel(builder.Build());

            Assert.That(visitor.Select, Is.Null);
            Assert.That(visitor.Precedence, Is.EqualTo(0));
        }
        public void ResultOperator_Take_Multiple_Test()
        {
            var builder = new QueryModelBuilder();

            builder.AddClause(new MainFromClause("x", typeof(Contact), Expression.Constant(null)));
            builder.AddClause(new SelectClause(Expression.Constant(null)));
            builder.AddResultOperator(new TakeResultOperator(Expression.Constant(10)));
            builder.AddResultOperator(new TakeResultOperator(Expression.Constant(5)));
            builder.AddResultOperator(new TakeResultOperator(Expression.Constant(8)));

            var visitor = new SDataQueryModelVisitor();

            visitor.VisitQueryModel(builder.Build());

            Assert.That(visitor.Count, Is.EqualTo(5));
        }
        public void ResultOperator_WithExtensionArg_Test()
        {
            var builder = new QueryModelBuilder();

            builder.AddClause(new MainFromClause("x", typeof(Contact), Expression.Constant(null)));
            builder.AddClause(new SelectClause(Expression.Constant(null)));
            builder.AddResultOperator(new WithExtensionArgResultOperator("foo", "bar"));
            builder.AddResultOperator(new WithExtensionArgResultOperator("hello", "world"));

            var visitor = new SDataQueryModelVisitor();

            visitor.VisitQueryModel(builder.Build());

            Assert.That(visitor.ExtensionArgs, Is.EqualTo(new Dictionary <string, string> {
                { "foo", "bar" }, { "hello", "world" }
            }));
        }
        public void OrderBy_ProtocolProperty_Test()
        {
            var builder = new QueryModelBuilder();

            builder.AddClause(new MainFromClause("x", typeof(Contact), Expression.Constant(null)));
            builder.AddClause(new OrderByClause
            {
                Orderings =
                {
                    new Ordering(GetExpression((Contact c) => c.Key), OrderingDirection.Asc)
                }
            });
            builder.AddClause(new SelectClause(Expression.Constant(null)));

            var visitor = new SDataQueryModelVisitor();

            visitor.VisitQueryModel(builder.Build());

            Assert.That(visitor.OrderBy, Is.EqualTo("$key asc"));
        }