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); }
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); }
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); }
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); }
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)); }
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(); }
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); }
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); }
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); }
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()); }
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); }
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); }
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()); }
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); }
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); }
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))); }
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); }
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))); }
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()); }
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()); }