public void ExpressionWhereInIEnumerable()
        {
            IQueryPredicateExpressionVisitor queryPredicateExpressionVisitor = this.linqFixture.GetService <IQueryPredicateExpressionVisitor>();

            string[] orderNumbers = { "5", "10", "15" };
            Expression <Func <Order, bool> > expression = x => x.OrderNumber.In(orderNumbers);
            string result = queryPredicateExpressionVisitor.Render(expression);

            Assert.Equal("orderNumber in (\"5\", \"10\", \"15\")", result);

            var orderNumberList = new List <string> {
                "5", "10", "15"
            }.Where(s => s != "10").Select(s => s);
            Expression <Func <Order, bool> > expression2 = x => x.OrderNumber.In(orderNumberList);
            string result2 = queryPredicateExpressionVisitor.Render(expression2);

            Assert.Equal("orderNumber in (\"5\", \"15\")", result2);

            var linqQuery = from orderNumber in new List <string> {
                "5", "10", "15"
            }
            where orderNumber != "5"
            select orderNumber;

            Expression <Func <Order, bool> > expression3 = x => x.OrderNumber.In(linqQuery);
            string result3 = queryPredicateExpressionVisitor.Render(expression3);

            Assert.Equal("orderNumber in (\"10\", \"15\")", result3);
        }
        public void ExpressionPropertyIsDefined()
        {
            Expression <Func <Category, bool> > expression = c => c.Key.IsDefined();
            IQueryPredicateExpressionVisitor    queryPredicateExpressionVisitor = this.linqFixture.GetService <IQueryPredicateExpressionVisitor>();
            string result = queryPredicateExpressionVisitor.Render(expression);

            Assert.Equal("key is defined", result);
        }
        public void ExpressionEnumWhereInArrayInline()
        {
            Expression <Func <Order, bool> > expression = x => x.OrderState.In(new[] { OrderState.Open, OrderState.Complete, OrderState.Confirmed });
            IQueryPredicateExpressionVisitor queryPredicateExpressionVisitor = this.linqFixture.GetService <IQueryPredicateExpressionVisitor>();
            string result = queryPredicateExpressionVisitor.Render(expression);

            Assert.Equal("orderState in (\"Open\", \"Complete\", \"Confirmed\")", result);
        }
        public void ExpressionEvaluationWithStaticFields()
        {
            Expression <Func <Customer, bool> > expression = x => x.Id == CustomerId;
            IQueryPredicateExpressionVisitor    queryPredicateExpressionVisitor = this.linqFixture.GetService <IQueryPredicateExpressionVisitor>();
            string result = queryPredicateExpressionVisitor.Render(expression);

            Assert.Equal("id = \"59e22bf2-d5f5-4b8c-b78f-bb66cf28d4fe\"", result);
        }
        public void QueryNestedComparison()
        {
            Expression <Func <Product, bool> > expression = p => p.MasterData.Current.Categories.Any(reference => reference.Id == "test");
            IQueryPredicateExpressionVisitor   queryPredicateExpressionVisitor = this.linqFixture.GetService <IQueryPredicateExpressionVisitor>();
            string result = queryPredicateExpressionVisitor.Render(expression);

            Assert.Equal("masterData(current(categories(id = \"test\")))", result);
        }
        public void QueryNestedInCombination()
        {
            Expression <Func <Product, bool> > expression = p => p.MasterData.Current.MasterVariant.Key.In("test") && p.MasterData.Current.MasterVariant.Sku.In("test");
            IQueryPredicateExpressionVisitor   queryPredicateExpressionVisitor = this.linqFixture.GetService <IQueryPredicateExpressionVisitor>();
            string result = queryPredicateExpressionVisitor.Render(expression);

            Assert.Equal("masterData(current(masterVariant(key in (\"test\") and sku in (\"test\"))))", result);
        }
        public void QueryInList()
        {
            Expression <Func <ProductProjection, bool> > expression = p => p.Categories.Any(reference => reference.Id.In("test"));
            IQueryPredicateExpressionVisitor             queryPredicateExpressionVisitor = this.linqFixture.GetService <IQueryPredicateExpressionVisitor>();
            string result = queryPredicateExpressionVisitor.Render(expression);

            Assert.Equal("categories(id in (\"test\"))", result);
        }
        public void ExpressionProjectionPropertyForMissingAttribute()
        {
            Expression <Func <ProductProjection, bool> > expression = p => p.Variants.Any(variant => !variant.Attributes.Any(a => a.ToTextAttribute().Name == "attribute-name"));
            IQueryPredicateExpressionVisitor             queryPredicateExpressionVisitor = this.linqFixture.GetService <IQueryPredicateExpressionVisitor>();
            string result = queryPredicateExpressionVisitor.Render(expression);

            Assert.Equal("variants(not(attributes(name = \"attribute-name\")))", result);
        }
        public void ExpressionPropertyDateAttributeValueParseEqual()
        {
            Expression <Func <ProductProjection, bool> > expression = p => p.Variants.Any(variant => variant.Attributes.Any(a => a.ToDateAttribute().Name == "C-Date" && a.ToDateAttribute().Value == DateTime.Parse("2019-10-11", CultureInfo.InvariantCulture).AsDateAttribute()));
            IQueryPredicateExpressionVisitor             queryPredicateExpressionVisitor = this.linqFixture.GetService <IQueryPredicateExpressionVisitor>();
            string result = queryPredicateExpressionVisitor.Render(expression);

            Assert.Equal("variants(attributes(name = \"C-Date\" and value = \"2019-10-11\"))", result);
        }
        public void ExpressionPropertyNumberAttributeValueWithinRange()
        {
            Expression <Func <ProductProjection, bool> > expression = p => p.Variants.Any(variant => variant.Attributes.Any(a => a.ToNumberAttribute().Name == "attribute-name" && a.ToNumberAttribute().Value > 999 && a.ToNumberAttribute().Value < 1001));
            IQueryPredicateExpressionVisitor             queryPredicateExpressionVisitor = this.linqFixture.GetService <IQueryPredicateExpressionVisitor>();
            string result = queryPredicateExpressionVisitor.Render(expression);

            Assert.Equal("variants(attributes(name = \"attribute-name\" and value > 999 and value < 1001))", result);
        }
        public void ExpressionPropertyMoneyAttributeValueEqual()
        {
            Expression <Func <ProductProjection, bool> > expression = p => p.Variants.Any(variant => variant.Attributes.Any(a => a.ToMoneyAttribute().Name == "attribute-name" && a.ToMoneyAttribute().Value.CentAmount == 999 && a.ToMoneyAttribute().Value.CurrencyCode == "EUR"));
            IQueryPredicateExpressionVisitor             queryPredicateExpressionVisitor = this.linqFixture.GetService <IQueryPredicateExpressionVisitor>();
            string result = queryPredicateExpressionVisitor.Render(expression);

            Assert.Equal("variants(attributes(name = \"attribute-name\" and value(centAmount = 999) and value(currencyCode = \"EUR\")))", result);
        }
        public void ExpressionPropertyThreeLevelDictionaryEqual()
        {
            Expression <Func <Product, bool> > expression = p => p.MasterData.Current.Slug["en"] == "product";
            IQueryPredicateExpressionVisitor   queryPredicateExpressionVisitor = this.linqFixture.GetService <IQueryPredicateExpressionVisitor>();
            string result = queryPredicateExpressionVisitor.Render(expression);

            Assert.Equal("masterData(current(slug(en = \"product\")))", result);
        }
        public void ExpressionPropertyDictionaryEqual()
        {
            Expression <Func <Category, bool> > expression = c => c.Name["en"] == "men";
            IQueryPredicateExpressionVisitor    queryPredicateExpressionVisitor = this.linqFixture.GetService <IQueryPredicateExpressionVisitor>();
            string result = queryPredicateExpressionVisitor.Render(expression);

            Assert.Equal("name(en = \"men\")", result);
        }
        public void ExpressionPropertyContainsAllString()
        {
            Expression <Func <Customer, bool> > expression = c => c.ShippingAddressIds.ContainsAll("c14", "c15");
            IQueryPredicateExpressionVisitor    queryPredicateExpressionVisitor = this.linqFixture.GetService <IQueryPredicateExpressionVisitor>();
            string result = queryPredicateExpressionVisitor.Render(expression);

            Assert.Equal("shippingAddressIds contains all (\"c14\", \"c15\")", result);
        }
        public void ExpressionPropertyNotInString()
        {
            Expression <Func <Category, bool> > expression = c => c.Key.NotIn("c14", "c15");
            IQueryPredicateExpressionVisitor    queryPredicateExpressionVisitor = this.linqFixture.GetService <IQueryPredicateExpressionVisitor>();
            string result = queryPredicateExpressionVisitor.Render(expression);

            Assert.Equal("key not in (\"c14\", \"c15\")", result);
        }
        public void WithinCircle()
        {
            Expression <Func <Channel, bool> > expression = c => c.GeoLocation.WithinCircle(13.37774, 52.51627, 1000);//longitude, latitude, radius
            IQueryPredicateExpressionVisitor   queryPredicateExpressionVisitor = this.linqFixture.GetService <IQueryPredicateExpressionVisitor>();
            string result = queryPredicateExpressionVisitor.Render(expression);

            Assert.Equal("geoLocation within circle(13.37774, 52.51627, 1000)", result);
        }
        public void ExpressionProjectionPropertyLocalizedTextAttributeValueEqualGrouped()
        {
            Expression <Func <ProductProjection, bool> > expression = p => p.Variants.Any(variant => variant.Attributes.Any(a => a.ToLocalizedTextAttribute().Name == "text-name" && (a.ToLocalizedTextAttribute().Value["en"] == "text-value-en" || a.ToLocalizedTextAttribute().Value["de"] == "text-value-de")));
            IQueryPredicateExpressionVisitor             queryPredicateExpressionVisitor = this.linqFixture.GetService <IQueryPredicateExpressionVisitor>();
            string result = queryPredicateExpressionVisitor.Render(expression);

            Assert.Equal("variants(attributes(name = \"text-name\" and value(en = \"text-value-en\" or de = \"text-value-de\")))", result);
        }
        public void ExpressionPropertyTimeAttributeValueParseEqual()
        {
            Expression <Func <ProductProjection, bool> > expression = p => p.Variants.Any(variant => variant.Attributes.Any(a => a.ToTimeAttribute().Name == "C-Time" && a.ToTimeAttribute().Value == DateTime.Parse("2019-10-11T15:33:11.123+02:00", CultureInfo.GetCultureInfo("de-DE"), DateTimeStyles.AdjustToUniversal).TimeOfDay.AsTimeAttribute()));//utc time
            IQueryPredicateExpressionVisitor             queryPredicateExpressionVisitor = this.linqFixture.GetService <IQueryPredicateExpressionVisitor>();
            string result = queryPredicateExpressionVisitor.Render(expression);

            Assert.Equal("variants(attributes(name = \"C-Time\" and value = \"13:33:11.123\"))", result);
        }
        public void ExpressionProjectionPropertyTextAttributeValueIn()
        {
            Expression <Func <ProductProjection, bool> > expression = p => p.Variants.Any(variant => variant.Attributes.Any(a => a.ToTextAttribute().Name == "attribute-name" && a.ToTextAttribute().Value.In("attribute-value-1", "attribute-value-2")));
            IQueryPredicateExpressionVisitor             queryPredicateExpressionVisitor = this.linqFixture.GetService <IQueryPredicateExpressionVisitor>();
            string result = queryPredicateExpressionVisitor.Render(expression);

            Assert.Equal("variants(attributes(name = \"attribute-name\" and value in (\"attribute-value-1\", \"attribute-value-2\")))", result);
        }
        public void ExpressionPropertyReferenceTypeAttributeValueEqual()
        {
            Expression <Func <ProductProjection, bool> > expression = p => p.Variants.Any(variant => variant.Attributes.Any(a => a.ToReferenceAttribute().Name == "attribute-name" && a.ToReferenceAttribute().Value.TypeId == ReferenceTypeId.Category && a.ToReferenceAttribute().Value.Id == "963cbb75-c604-4ad2-841c-890b792224ee"));
            IQueryPredicateExpressionVisitor             queryPredicateExpressionVisitor = this.linqFixture.GetService <IQueryPredicateExpressionVisitor>();
            string result = queryPredicateExpressionVisitor.Render(expression);

            Assert.Equal("variants(attributes(name = \"attribute-name\" and value(typeId = \"category\") and value(id = \"963cbb75-c604-4ad2-841c-890b792224ee\")))", result);
        }
        public void QueryNestedCombine()
        {
            Expression <Func <Product, bool> > expression = p => p.MasterData.Current.MasterVariant.Key == "test" && p.MasterData.Current.MasterVariant.Sku == "something";
            IQueryPredicateExpressionVisitor   queryPredicateExpressionVisitor = this.linqFixture.GetService <IQueryPredicateExpressionVisitor>();
            string result = queryPredicateExpressionVisitor.Render(expression);

            Assert.Equal("masterData(current(masterVariant(key = \"test\" and sku = \"something\")))", result);
        }
        public void ExpressionPropertyTextAttributeValueEqualCaseSensitive()
        {
            Expression <Func <ProductVariant, bool> > expression = p => p.Attributes.Any(a => a.ToTextAttribute().Name == "Color" && a.ToTextAttribute().Value == "Red");
            IQueryPredicateExpressionVisitor          queryPredicateExpressionVisitor = this.linqFixture.GetService <IQueryPredicateExpressionVisitor>();
            string result = queryPredicateExpressionVisitor.Render(expression);

            Assert.Equal("attributes(name = \"Color\" and value = \"Red\")", result);
        }
        public void QueryNestedDefined()
        {
            Expression <Func <Product, bool> > expression = p => p.MasterData.Current.MasterVariant.Key.IsDefined();
            IQueryPredicateExpressionVisitor   queryPredicateExpressionVisitor = this.linqFixture.GetService <IQueryPredicateExpressionVisitor>();
            string result = queryPredicateExpressionVisitor.Render(expression);

            Assert.Equal("masterData(current(masterVariant(key is defined)))", result);
        }
        public void ExpressionPropertyTextAttributeCastValueEqual()
        {
            Expression <Func <ProductVariant, bool> > expression = p => p.Attributes.Any(a => ((TextAttribute)a).Name == "text-name" && ((TextAttribute)a).Value == "text-value");
            IQueryPredicateExpressionVisitor          queryPredicateExpressionVisitor = this.linqFixture.GetService <IQueryPredicateExpressionVisitor>();
            string result = queryPredicateExpressionVisitor.Render(expression);

            Assert.Equal("attributes(name = \"text-name\" and value = \"text-value\")", result);
        }
        public void ExpressionImplicitEqualFalse()
        {
            Expression <Func <Product, bool> > expression = p => !p.MasterData.Published;
            IQueryPredicateExpressionVisitor   queryPredicateExpressionVisitor = this.linqFixture.GetService <IQueryPredicateExpressionVisitor>();
            string result = queryPredicateExpressionVisitor.Render(expression);

            Assert.Equal("masterData(published = false)", result);
        }
        public void ExpressionPropertyLocalizedTextAttributeValueEqual()
        {
            Expression <Func <ProductVariant, bool> > expression = p => p.Attributes.Any(a => a.ToLocalizedTextAttribute().Name == "text-name" && a.ToLocalizedTextAttribute().Value["en"] == "text-value-en");
            IQueryPredicateExpressionVisitor          queryPredicateExpressionVisitor = this.linqFixture.GetService <IQueryPredicateExpressionVisitor>();
            string result = queryPredicateExpressionVisitor.Render(expression);

            Assert.Equal("attributes(name = \"text-name\" and value(en = \"text-value-en\"))", result);
        }
        public void ExpressionProductProjectionVariantEnumAttributeValueEqual()
        {
            Expression <Func <ProductProjection, bool> > expression = p => p.Variants.Any(variant => variant.Attributes.Any(a => a.ToEnumAttribute().Name == "attribute-name" && a.ToEnumAttribute().Value.Key == "enum-key"));
            IQueryPredicateExpressionVisitor             queryPredicateExpressionVisitor = this.linqFixture.GetService <IQueryPredicateExpressionVisitor>();
            string result = queryPredicateExpressionVisitor.Render(expression);

            Assert.Equal("variants(attributes(name = \"attribute-name\" and value(key = \"enum-key\")))", result);
        }
        public void ExpressionPropertyPropertyGrouping()
        {
            Expression <Func <Category, bool> > expression = c => c.Parent.Id == "some id" || c.Parent.Id == "some other id";
            IQueryPredicateExpressionVisitor    queryPredicateExpressionVisitor = this.linqFixture.GetService <IQueryPredicateExpressionVisitor>();
            string result = queryPredicateExpressionVisitor.Render(expression);

            Assert.Equal("parent(id = \"some id\" or id = \"some other id\")", result);
        }
        public void ExpressionStringOr()
        {
            Expression <Func <Category, bool> > expression = c => c.Key != "c14" || c.Version == 30;
            IQueryPredicateExpressionVisitor    queryPredicateExpressionVisitor = this.linqFixture.GetService <IQueryPredicateExpressionVisitor>();
            string result = queryPredicateExpressionVisitor.Render(expression);

            Assert.Equal("key != \"c14\" or version = 30", result);
        }
        public void ExpressionPropertyTwoLevelIntLessThan()
        {
            Expression <Func <ProductData, bool> > expression = p => p.MasterVariant.Id < 30;
            IQueryPredicateExpressionVisitor       queryPredicateExpressionVisitor = this.linqFixture.GetService <IQueryPredicateExpressionVisitor>();
            string result = queryPredicateExpressionVisitor.Render(expression);

            Assert.Equal("masterVariant(id < 30)", result);
        }