예제 #1
0
        public void SelectAllProductsWithSelectProjectionWithStarSelection()
        {
            using (var context = new AutoQueryableDbContext())
            {
                _queryStringAccessor.SetQueryString("select=name,productcategory.*,productcategory.name&top=0");

                DataInitializer.InitializeSeed(context);
                var query =
                    context.Product.AutoQueryable(_autoQueryableContext) as IQueryable <object>;

                var properties = query.First().GetType().GetProperties();
                properties.Length.Should().Be(2);

                properties.Should().Contain(p => p.Name == "name");
                properties.Should().Contain(p => p.Name == "productcategory");

                var productcategoryProperty = properties.FirstOrDefault(p => p.Name == "productcategory");
                productcategoryProperty.PropertyType.GetProperties().Should().Contain(p => p.Name == "Name");
                productcategoryProperty.PropertyType.GetProperties().Should()
                .Contain(p => p.Name == "ProductCategoryId");
                productcategoryProperty.PropertyType.GetProperties().Should().Contain(p => p.Name == "Rowguid");
                productcategoryProperty.PropertyType.GetProperties().Should().Contain(p => p.Name == "ModifiedDate");
                productcategoryProperty.PropertyType.GetProperties().Should()
                .Contain(p => p.Name == "ParentProductCategoryId");
                productcategoryProperty.PropertyType.GetProperties().Should().Contain(p => p.Name == "Product");
                productcategoryProperty.PropertyType.GetProperties().Should()
                .Contain(p => p.Name == "ParentProductCategory");
                productcategoryProperty.PropertyType.GetProperties().Should()
                .Contain(p => p.Name == "InverseParentProductCategory");

                query.Count().Should().Be(DataInitializer.ProductSampleCount);
            }
        }
예제 #2
0
        public void SelectAllProductsWithDtoProjectionAndSelectProjection()
        {
            using (var context = new AutoQueryableDbContext())
            {
                _queryStringAccessor.SetQueryString("select=name,category.name&top=0");

                DataInitializer.InitializeSeed(context);
                var query = context.Product.Select(p => new ProductDto
                {
                    Name     = p.Name,
                    Category = new ProductCategoryDto
                    {
                        Name = p.ProductCategory.Name
                    }
                }).AutoQueryable(_autoQueryableContext) as IQueryable <object>;

                var properties = query.First().GetType().GetProperties();
                properties.Length.Should().Be(2);

                properties.Should().Contain(p => p.Name == "name");
                properties.Should().Contain(p => p.Name == "category");

                var categoryProperty = properties.FirstOrDefault(p => p.Name == "category");
                categoryProperty.PropertyType.GetProperties().Should().Contain(x => x.Name == "name");
                query.Count().Should().Be(DataInitializer.ProductSampleCount);
            }
        }
예제 #3
0
        public void SelectAllPropertiesWithOneRelation()
        {
            using (var context = new AutoQueryableDbContext())
            {
                _queryStringAccessor.SetQueryString("select=_,ProductModel&top=0");

                DataInitializer.InitializeSeed(context);
                var query      = context.Product.AutoQueryable(_autoQueryableContext) as IQueryable <object>;
                var properties = query.First().GetType().GetProperties();

                properties.Length.Should().Be(18);

                properties.Should().Contain(p => p.Name == "ProductId");
                properties.Should().Contain(p => p.Name == "Name");
                properties.Should().Contain(p => p.Name == "ProductNumber");
                properties.Should().Contain(p => p.Name == "Color");
                properties.Should().Contain(p => p.Name == "StandardCost");
                properties.Should().Contain(p => p.Name == "ListPrice");
                properties.Should().Contain(p => p.Name == "Size");
                properties.Should().Contain(p => p.Name == "Weight");
                properties.Should().Contain(p => p.Name == "ProductCategoryId");
                properties.Should().Contain(p => p.Name == "ProductModelId");
                properties.Should().Contain(p => p.Name == "SellStartDate");
                properties.Should().Contain(p => p.Name == "SellEndDate");
                properties.Should().Contain(p => p.Name == "DiscontinuedDate");
                properties.Should().Contain(p => p.Name == "ThumbNailPhoto");
                properties.Should().Contain(p => p.Name == "ThumbnailPhotoFileName");
                properties.Should().Contain(p => p.Name == "Rowguid");
                properties.Should().Contain(p => p.Name == "ModifiedDate");
                properties.Should().Contain(p => p.Name == "ProductModel");

                query.Count().Should().Be(DataInitializer.ProductSampleCount);
            }
        }
예제 #4
0
        public void SelectWithIncludeNavigationProperties()
        {
            using (var context = new AutoQueryableDbContext())
            {
                _queryStringAccessor.SetQueryString("top=50&select=name,SalesOrderDetail.Product.ProductId,productcategory");
                _profile.UnselectableProperties = new[] { "color" };

                DataInitializer.InitializeSeed(context);

                var query = context.Product.AutoQueryable(_autoQueryableContext) as IQueryable <object>;

                var firstResult = query.First();
                var properties  = firstResult.GetType().GetProperties();
                properties.Length.Should().Be(3);

                properties.Should().Contain(p => p.Name == "name");
                properties.Should().Contain(p => p.Name == "SalesOrderDetail").Which.Should().NotBeNull();
                properties.Should().Contain(p => p.Name == "productcategory");

                var salesOrderDetailProperty = properties.FirstOrDefault(p => p.Name == "SalesOrderDetail").PropertyType
                                               .GenericTypeArguments[0];
                var productProperty = salesOrderDetailProperty.GetProperties().FirstOrDefault(x => x.Name == "Product");
                productProperty.Should().NotBeNull();
                productProperty.PropertyType.GetProperties().Should().Contain(x => x.Name == "ProductId");
                query.Count().Should().Be(50);
            }
        }
예제 #5
0
        public void SelectOrderByColorDesc()
        {
            using (var context = new AutoQueryableDbContext())
            {
                _queryStringAccessor.SetQueryString("select=name,color&orderby=-color&top=0");

                DataInitializer.InitializeSeed(context);
                var query  = (context.Product.AutoQueryable(_autoQueryableContext) as IQueryable <object>).ToList();
                var first  = query.First();
                var second = query.Skip(1).First();

                var last    = query.Last();
                var preLast = query.Skip(DataInitializer.ProductSampleCount - 2).First();

                var type        = first.GetType();
                var firstValue  = type.GetProperty("color").GetValue(first).ToString();
                var secondValue = type.GetProperty("color").GetValue(second).ToString();

                var lastValue    = type.GetProperty("color").GetValue(last).ToString();
                var preLastValue = type.GetProperty("color").GetValue(preLast).ToString();

                firstValue.Should().Be("red");
                secondValue.Should().Be("red");
                lastValue.Should().Be("black");
                preLastValue.Should().Be("black");
            }
        }
예제 #6
0
        public void SelectAllProductsWithSelectProjection4()
        {
            using (var context = new AutoQueryableDbContext())
            {
                _queryStringAccessor.SetQueryString("select=name,productcategory.name,ProductCategory.ProductCategoryId,SalesOrderDetail.LineTotal&top=0");

                DataInitializer.InitializeSeed(context);
                var query = context.Product.AutoQueryable(_autoQueryableContext) as IQueryable <object>;

                var properties = query.First().GetType().GetProperties();
                properties.Length.Should().Be(3);

                properties.Should().Contain(p => p.Name == "name");
                properties.Should().Contain(p => p.Name == "productcategory");
                properties.Should().Contain(p => p.Name == "SalesOrderDetail");

                var productcategoryProperty = properties.FirstOrDefault(p => p.Name == "productcategory");
                productcategoryProperty.PropertyType.GetProperties().Should().Contain(x => x.Name == "name");
                productcategoryProperty.PropertyType.GetProperties().Should()
                .Contain(x => x.Name == "ProductCategoryId");

                var salesOrderDetailProperty = properties.FirstOrDefault(p => p.Name == "SalesOrderDetail").PropertyType
                                               .GenericTypeArguments[0];
                salesOrderDetailProperty.GetProperties().Should().Contain(x => x.Name == "LineTotal");



                query.Count().Should().Be(DataInitializer.ProductSampleCount);
            }
        }
예제 #7
0
 public void SelectAllProducts()
 {
     using (var context = new AutoQueryableDbContext())
     {
         DataInitializer.InitializeSeed(context);
         var query = context.Product.AutoQueryable(_autoQueryableContext);
         query.Count().Should().Be(DataInitializer.DefaultToTakeCount);
     }
 }
예제 #8
0
 public static void AddDateTimeSeeds(AutoQueryableDbContext dbContext)
 {
     dbContext.Product.Add(new Product
     {
         Name          = "TestIn2010",
         SellStartDate = new DateTime(2010, DateTime.Today.Month, DateTime.Today.Day)
     });
     dbContext.SaveChanges();
 }
예제 #9
0
        public void Configure(IApplicationBuilder app)
        {
            // Register the Autofac middleware FIRST. This also adds
            // Autofac-injected middleware registered with the container.

            app.UseOwin().UseNancy();

            using (var context = new AutoQueryableDbContext()) Seed(context);
        }
예제 #10
0
        public void CountWithNullForeignKey()
        {
            using (var context = new AutoQueryableDbContext())
            {
                _queryStringAccessor.SetQueryString("select=name,productextension.name&top=0");

                DataInitializer.InitializeSeed(context);
                var query = context.Product.AutoQueryable(_autoQueryableContext);
                query?.Count().Should().Be(DataInitializer.ProductSampleCount);
            }
        }
예제 #11
0
        public void EndsWithIgnoreCase()
        {
            using (var context = new AutoQueryableDbContext())
            {
                _queryStringAccessor.SetQueryString("nameEndsWith:i=cT 999");

                DataInitializer.InitializeSeed(context);
                var query = context.Product.AutoQueryable(_autoQueryableContext)  as IQueryable <object>;
                query.Count().Should().Be(1);
            }
        }
예제 #12
0
        public void NotStartsWith()
        {
            using (var context = new AutoQueryableDbContext())
            {
                _queryStringAccessor.SetQueryString("nameStartsWith!=Prod");

                DataInitializer.InitializeSeed(context);
                var query = context.Product.AutoQueryable(_autoQueryableContext)  as IQueryable <object>;
                query.Count().Should().Be(DataInitializer.ProductSampleCount / 2);
            }
        }
예제 #13
0
        public void ContainsIgnoreCase()
        {
            using (var context = new AutoQueryableDbContext())
            {
                _queryStringAccessor.SetQueryString("namecontains:i=proDuct");

                DataInitializer.InitializeSeed(context);
                var query = context.Product.AutoQueryable(_autoQueryableContext)  as IQueryable <object>;
                query.Count().Should().Be(DataInitializer.ProductSampleCount / 2);
            }
        }
예제 #14
0
        public void IdEquals3And4()
        {
            using (var context = new AutoQueryableDbContext())
            {
                _queryStringAccessor.SetQueryString("productid=3&productid=4");

                DataInitializer.InitializeSeed(context);
                var query = context.Product.AutoQueryable(_autoQueryableContext)  as IQueryable <object>;
                query.Count().Should().Be(0);
            }
        }
예제 #15
0
        public void NullablePropertyEquals()
        {
            using (var context = new AutoQueryableDbContext())
            {
                _queryStringAccessor.SetQueryString("name=Product 23");

                DataInitializer.InitializeSeed(context);
                var query = context.Product.AutoQueryable(_autoQueryableContext)  as IQueryable <object>;
                query.Count().Should().Be(1);
            }
        }
예제 #16
0
 public IQueryable GetSwaggerWithoutAqAttr([FromServices] AutoQueryableDbContext context)
 {
     return(context.Product.Select(p => new ProductDto
     {
         Name = p.Name,
         Category = new ProductCategoryDto
         {
             Name = p.ProductCategory.Name
         }
     }).AutoQueryable(_autoQueryableContext));
 }
예제 #17
0
 public IQueryable GetWithDtoProjection([FromServices] AutoQueryableDbContext context)
 {
     return(context.Product.Select(p => new ProductDto
     {
         Name = p.Name,
         Category = new ProductCategoryDto
         {
             Name = p.ProductCategory.Name
         }
     }));
 }
예제 #18
0
        public void CountAll()
        {
            using (var context = new AutoQueryableDbContext())
            {
                _queryStringAccessor.SetQueryString("wrapwith=count");

                DataInitializer.InitializeSeed(context);
                var query = context.Product.AutoQueryable(_autoQueryableContext)  as object;
//                var t = JsonConvert.SerializeObject(query);
            }
        }
예제 #19
0
        public void FilterWithDecimalPoints_Query_ResultsCountShouldBeOne()
        {
            using (var context = new AutoQueryableDbContext())
            {
                _queryStringAccessor.SetQueryString("ListPrice=1.6");

                DataInitializer.InitializeSeed(context);
                var query = context.Product.AutoQueryable(_autoQueryableContext)  as IQueryable <object>;

                query.Count().Should().Be(1);
            }
        }
예제 #20
0
        public void ColorEqualsRedOrBlack()
        {
            using (var context = new AutoQueryableDbContext())
            {
                _queryStringAccessor.SetQueryString("color=red,black");

                DataInitializer.InitializeSeed(context);
                var query = context.Product.AutoQueryable(_autoQueryableContext)  as IQueryable <object>;

                query.Count().Should().Be(DataInitializer.ProductSampleCount);
            }
        }
예제 #21
0
        public void SelectTake50()
        {
            using (var context = new AutoQueryableDbContext())
            {
                _queryStringAccessor.SetQueryString("select=ProductId,name,color&take=50");

                DataInitializer.InitializeSeed(context);
                var query = context.Product.AutoQueryable(_autoQueryableContext);

                query.Count().Should().Be(50);
            }
        }
예제 #22
0
        public void SalesOrderDetailUnitProductIdEquals1()
        {
            using (var context = new AutoQueryableDbContext())
            {
                _queryStringAccessor.SetQueryString("SalesOrderDetail.Product.ProductId=1");

                DataInitializer.InitializeSeed(context);
                var query = context.Product.AutoQueryable(_autoQueryableContext)  as IQueryable <object>;

                query.Count().Should().Be(1);
            }
        }
예제 #23
0
        public void DateGreaterThanEquals()
        {
            using (var context = new AutoQueryableDbContext())
            {
                _queryStringAccessor.SetQueryString($"SellStartDate>={DateTime.Today.AddHours(8 * 2):o}");

                DataInitializer.InitializeSeed(context);
                var query = context.Product.AutoQueryable(_autoQueryableContext)  as IQueryable <object>;

                query.Count().Should().Be(DataInitializer.ProductSampleCount - 2);
            }
        }
예제 #24
0
        public void ProductCateqoryIdEquals1()
        {
            using (var context = new AutoQueryableDbContext())
            {
                _queryStringAccessor.SetQueryString("ProductCategory.ProductCategoryId=1");

                DataInitializer.InitializeSeed(context);
                var query = context.Product.AutoQueryable(_autoQueryableContext)  as IQueryable <object>;

                query.Count().Should().Be(DataInitializer.ProductSampleCount / 2);
            }
        }
예제 #25
0
        public void NameNotEqualsNull()
        {
            using (var context = new AutoQueryableDbContext())
            {
                _queryStringAccessor.SetQueryString("name!=null");

                DataInitializer.InitializeSeed(context);
                var query = context.Product.AutoQueryable(_autoQueryableContext)  as IQueryable <object>;
                query.Count().Should().Be(DataInitializer.ProductSampleCount / 2);
                query.Should().OnlyContain(product => product.GetType().GetProperty("Name").GetValue(product) != null);
            }
        }
예제 #26
0
        public ProductModule(AutoQueryableDbContext dbContext, IAutoQueryableContext autoQueryableContext, NancyQueryStringAccessor queryStringAccessor, NancyContext nancyContext) : base("/products")
        {
            queryStringAccessor.SetQueryString(nancyContext.Request.Url.Query);

            Get <dynamic>("/", args => Response.AsJson(dbContext.Product.AutoQueryable(autoQueryableContext).ToAutoQueryListResult(autoQueryableContext) as ICollection <object>));

            Get <dynamic>("/withfilter", args =>
            {
                After.AutoQueryable(Context, dbContext.Product, autoQueryableContext);
                return("");
            });
        }
예제 #27
0
        public void DisalowFirstClause_QueryWithFirst_ResultsShouldBeEnumerable(string queryString)
        {
            using (var context = new AutoQueryableDbContext())
            {
                _profile.DisAllowedClauses = ClauseType.First;
                _queryStringAccessor.SetQueryString(queryString);

                DataInitializer.InitializeSeed(context);

                var query = context.Product.AutoQueryable(_autoQueryableContext) as IQueryable <object>;
                query.Should().NotBeNullOrEmpty();
            }
        }
예제 #28
0
        public void DateYearShouldNotEqual2011()
        {
            using (var context = new AutoQueryableDbContext())
            {
                _queryStringAccessor.SetQueryString("SellStartDate:Year=2011");

                DataInitializer.InitializeSeed(context);
                DataInitializer.AddDateTimeSeeds(context);
                var query = context.Product.AutoQueryable(_autoQueryableContext)  as IQueryable <object>;

                query.Count().Should().Be(0);
            }
        }
예제 #29
0
        public void SelectFirst()
        {
            using (var context = new AutoQueryableDbContext())
            {
                _queryStringAccessor.SetQueryString("first=true&top=0");

                DataInitializer.InitializeSeed(context);
                var product    = context.Product.AutoQueryable(_autoQueryableContext) as IQueryable <object>;
                var properties = product.GetType().GetProperties();
                properties.Should().Contain(p => p.Name == "ProductId");
                ((int)properties.First(p => p.Name == "ProductId").GetValue(product)).Should().Be(1);
            }
        }
예제 #30
0
        private void Seed(AutoQueryableDbContext context)
        {
            var redCategory = new ProductCategory
            {
                Name = "red"
            };
            var blackCategory = new ProductCategory
            {
                Name = "black"
            };
            var model1 = new ProductModel
            {
                Name = "Model 1"
            };

            for (var i = 0; i < 10000; i++)
            {
                context.Product.Add(new Product
                {
                    Color            = i % 2 == 0 ? "red" : "black",
                    ProductCategory  = i % 2 == 0 ? redCategory : blackCategory,
                    ProductModel     = model1,
                    ListPrice        = i,
                    Name             = $"Product {i}",
                    ProductNumber    = Guid.NewGuid().ToString(),
                    Rowguid          = Guid.NewGuid(),
                    Size             = i % 3 == 0 ? "L" : i % 2 == 0 ? "M" : "S",
                    SellStartDate    = DateTime.Today,
                    StandardCost     = i + 1,
                    Weight           = i % 32,
                    SalesOrderDetail = new List <SalesOrderDetail>
                    {
                        new SalesOrderDetail
                        {
                            LineTotal         = i % 54,
                            OrderQty          = 5,
                            UnitPrice         = i + i,
                            UnitPriceDiscount = i + i / 2
                        },
                        new SalesOrderDetail
                        {
                            LineTotal         = i + 15 % 64,
                            OrderQty          = 3,
                            UnitPrice         = i + i,
                            UnitPriceDiscount = i + i / 2
                        }
                    }
                });
            }
            context.SaveChanges();
        }