Ejemplo n.º 1
0
 public void CanHandleAProjection()
 {
     //Given an IQueryable made against a simple datasource
     Func<QueryInfo, IEnumerable<SomeEntity>> getPageFromDataSource = SomeDataAccessMethod;
     IQueryable<SomeEntity> pq = DelegateQueryable.Create<SomeEntity>(getPageFromDataSource);
     var items = pq.Select(s => new Projection() {Item = s.Name});
     Assert.Equal("Item 01", items.ToArray().First().Item);
 }
Ejemplo n.º 2
0
 public void CanHandleAnEndsWithMethodCallWhereClause()
 {
     //Given an IQueryable made against a simple datasource
     Func<QueryInfo, IEnumerable<SomeEntity>> getPageFromDataSource = SomeDataAccessMethod;
     IQueryable<SomeEntity> pq = DelegateQueryable.Create<SomeEntity>(getPageFromDataSource);
     var items = pq.Where(s => s.Name.EndsWith("07"));
     Assert.Equal("Item 07", items.ToArray().Single().Name);
 }
Ejemplo n.º 3
0
 public void CanHandleAnOperatorWhereClauseOnAValueType()
 {
     //Given an IQueryable made against a simple datasource
     Func<QueryInfo, IEnumerable<SomeEntity>> getPageFromDataSource = SomeDataAccessMethod;
     IQueryable<SomeEntity> pq = DelegateQueryable.Create<SomeEntity>(getPageFromDataSource);
     var items = pq.Where(s => s.Index != 0 && s.Index == 7);
     Assert.Equal("Item 07", items.ToArray().Single().Name);
 }
Ejemplo n.º 4
0
 public void CanHandleAnOrElseWhereClause()
 {
     //Given an IQueryable made against a simple datasource
     Func<QueryInfo, IEnumerable<SomeEntity>> getPageFromDataSource = SomeDataAccessMethod;
     IQueryable<SomeEntity> pq = DelegateQueryable.Create<SomeEntity>(getPageFromDataSource);
     var items = pq.Where(s => s.Name == "Item 07" || s.Name == "Item 08");
     Assert.Equal("Item 07", items.ToArray().First().Name);
     Assert.Equal("Item 08", items.ToArray().Skip(1).First().Name);
 }
Ejemplo n.º 5
0
 public void CanDoAnOptimizedCount()
 {
     Func<QueryInfo, object> getPageFromDataSource = (info) =>
     {
         if (info.ResultType is Count) return 15;
         throw new NotImplementedException();
     };
     var pq = DelegateQueryable.Create<SomeEntity>(getPageFromDataSource);
     Assert.Equal(15, pq.Count(x => x.Index > 1));
 }
Ejemplo n.º 6
0
 public void CanHandleAProjectionASkipAndAnOrderByAsc()
 {
     Func<QueryInfo, IEnumerable<SomeEntity>> getPageFromDataSource = (info) =>
     {
         Assert.Equal(OrderBy.OrderByDirection.Asc, info.OrderBy.Direction);
         return Enumerable.Empty<SomeEntity>();
     };
     var pq = DelegateQueryable.Create<SomeEntity>(getPageFromDataSource);
     pq.OrderBy(e => e.Name).ToArray();
 }
Ejemplo n.º 7
0
        public void CanDoACountWithANullComparison()
        {
            //Given an IQueryable made against a simple datasource
            Func<QueryInfo, IEnumerable<SomeEntity>> getPageFromDataSource = SomeDataAccessMethod;

            IQueryable<SomeEntity> pq = DelegateQueryable.Create<SomeEntity>(getPageFromDataSource);
            var items = pq.Where(s => s.Name != null);
            var count = items.Count();

            Assert.Equal(10, count);
        }
Ejemplo n.º 8
0
        public void CanHandleASecondWhereClauseAfterACount()
        {
            //Given an IQueryable made against a simple datasource
            Func<QueryInfo, IEnumerable<SomeEntity>> getPageFromDataSource = SomeDataAccessMethod;
            IQueryable<SomeEntity> pq = DelegateQueryable.Create<SomeEntity>(getPageFromDataSource);
            var items = pq.Where(s => s.Name == "Item 07");
            var count = items.Count();
            var items2 = items.Where(s => s.Name != "Item 07");
            Assert.Equal(0, items2.ToArray().Length);

        }
Ejemplo n.º 9
0
        public void CanDoACountWithNoIllEffect()
        {
            //Given an IQueryable made against a simple datasource
            Func<QueryInfo, IEnumerable<SomeEntity>> getPageFromDataSource = SomeDataAccessMethod;

            IQueryable<SomeEntity> pq = DelegateQueryable.Create<SomeEntity>(getPageFromDataSource);

            var count = pq.Count();

            Assert.Equal(10, count);
        }
Ejemplo n.º 10
0
        public void CanDoATakeWithNoIllEffectOnOtherQueries()
        {
            //Given an IQueryable made against a simple datasource
            Func<QueryInfo, IEnumerable<SomeEntity>> getPageFromDataSource = SomeDataAccessMethod;

            IQueryable<SomeEntity> pq = DelegateQueryable.Create<SomeEntity>(getPageFromDataSource);
            var somethingElse = pq.Take(5);
            Assert.Equal(5, somethingElse.Count());

            Assert.Equal(10, pq.Count());
        }
Ejemplo n.º 11
0
        public void CanHandleAProjectionASkipAndAnOrderByDesc()
        {
            //Given an IQueryable made against a simple datasource
            Func<QueryInfo, IEnumerable<SomeEntity>> getPageFromDataSource = SomeDataAccessMethod;
            var pq = DelegateQueryable.Create<SomeEntity>(getPageFromDataSource);
            var items = pq.OrderByDescending(e => e.Name).Skip(1).Take(1)
                .Select(s => new Projection {Item = s.Name}).ToArray();
            Assert.Equal(1, Skipped);
            Assert.Equal(1, Taken);

            Assert.Equal("Item 09", items.ToArray().First().Item);
        }
Ejemplo n.º 12
0
 public void CanHandleAProjectionAndACountAgainstIncompleteProvider()
 {
     //Given an IQueryable made against a simple datasource
     Func<QueryInfo, IEnumerable<SomeEntity>> getPageFromDataSource = (info) => IncompleteDataSource(info);
     IQueryable<SomeEntity> pq = DelegateQueryable.Create<SomeEntity>(getPageFromDataSource);
     var someEntities = pq
         .Where(i => i.Name.Contains("07"));
     var projection = someEntities
         .Select(s => new Projection {Item = s.Name});
     var itemCount = projection.Count();
     Assert.Equal(10, itemCount);
 }
Ejemplo n.º 13
0
        public void CanDoASelectWithNoIllEffectOnOtherQueries()
        {
            //Given an IQueryable made against a simple datasource
            Func<QueryInfo, IEnumerable<SomeEntity>> getPageFromDataSource = SomeDataAccessMethod;

            var pq = DelegateQueryable.Create<SomeEntity>(getPageFromDataSource).Select(e => new SomeEntityVm()
            {
                Name = e.Name
            });
            Assert.Equal(5, pq.Take(5).Count());
            Assert.Equal(10, pq.Count());
        }
Ejemplo n.º 14
0
 public void CanHandleAProjectionAndACount()
 {
     //Given an IQueryable made against a simple datasource
     Func<QueryInfo, IEnumerable<SomeEntity>> getPageFromDataSource = SomeDataAccessMethod;
     IQueryable<SomeEntity> pq = DelegateQueryable.Create<SomeEntity>(getPageFromDataSource);
     var someEntities = pq
         .Where(i => i.Name.Contains("07"));
     var projection = someEntities
         .Select(s => new SomeEntityVm() {Name = s.Name})
         .Where(p => p.Name == "Item 07");
     var itemCount = projection.Count();
     Assert.Equal(1, itemCount);
 }
Ejemplo n.º 15
0
        public void CanDoASingleWithAFilter()
        {
            //Given an IQueryable made against a simple datasource
            Func<QueryInfo, IEnumerable<SomeEntity>> getPageFromDataSource = SomeDataAccessMethod;
            IQueryable<SomeEntity> pq = DelegateQueryable.Create<SomeEntity>(getPageFromDataSource);

            //When a Contains method is called for a specific item 
            var items = pq.Where(s => s.Name.Contains("07"));

            //Then the result should contain a single item
            var item = items.Single();
            //And the item should be that item
            Assert.Equal("Item 07", item.Name);
        }
Ejemplo n.º 16
0
        public void CanConcat()
        {
            //Given an IQueryable made against a simple datasource
            Func<QueryInfo, IEnumerable<SomeEntity>> getPageFromDataSource = SomeDataAccessMethod;

            IQueryable<SomeEntity> pq = DelegateQueryable.Create<SomeEntity>(getPageFromDataSource);

            //When I skip and then take and then concat
            var items = pq.Skip(3).Take(2).Concat(pq.Take(1)).ToArray();

            //Then the correct items should be returned

            Assert.Equal("Item 04,Item 05,Item 01", string.Join(",", items.Select(i => i.Name)));

        }
Ejemplo n.º 17
0
        public void CanApplyAQueryInfo()
        {
            var queryable = Enumerable.Range(1, 100)
                .Select(i => new SomeEntity()
                {
                    Name = "User" + i,
                    Index = i
                })
                .ToArray().AsQueryable();


            var pq = DelegateQueryable.Create<SomeEntity>((info) => info.ApplyTo(queryable));

            Assert.Equal(90, pq.OrderByDescending(o => o.Index).Skip(10).Take(1).Single().Index);
        }
Ejemplo n.º 18
0
        public void CanWorkWithoutQuery()
        {
            //Given an IQueryable made against a simple datasource
            Func<QueryInfo, IEnumerable<SomeEntity>> getPageFromDataSource = SomeDataAccessMethod;

            IQueryable<SomeEntity> pq = DelegateQueryable.Create<SomeEntity>(getPageFromDataSource);

            var items = pq.ToArray();

            Assert.Equal(0, Skipped);
            Assert.Equal(null, Taken);

            Assert.Equal("Item 01,Item 02", string.Join(",", items.Take(2).Select(i => i.Name)));

        }
Ejemplo n.º 19
0
            public void CanDoAnUninterceptedGroupBy()
            {
                QueryInfo info = null;

                var items = Enumerable.Range(0, 99)
                    .Select(i => new SomeEntity()
                    {
                        Name = "User" + i,
                        Index = i,
                        Site = i/10
                    })
                    .ToArray();

                var pq = DelegateQueryable.Create<SomeEntity>(q => items);

                var groups = pq.GroupBy(x => x.Site).ToArray();
                Assert.Equal(10, groups.Count());
            }
Ejemplo n.º 20
0
            public void CanDoADynamicInterceptedGroupBy()
            {
                QueryInfo info = null;

                var items = Enumerable.Range(0, 99)
                    .Select(i => new SomeEntity()
                    {
                        Name = "User" + i,
                        Index = i,
                        Site = i / 10,
                        Category = i / 5
                    })
                    .ToArray().AsQueryable();
                var pq = DelegateQueryable.Create<SomeEntity>((queryInfo) =>
                {
                    info = queryInfo;
                    return items.GroupBy("Site");
                });

                var groups = pq.GroupBy(x => x.Index).ToArray();
                var numberofCategoryGroups = 10;
                Assert.Equal(numberofCategoryGroups, groups.Count());
            }