public void Create_ObjectStringEqualNull_Expression() { // arrange var value = new ObjectValueNode( new ObjectFieldNode("foo", new ObjectValueNode( new ObjectFieldNode("fooNested", new ObjectValueNode( new ObjectFieldNode("bar", new StringValueNode("a"))))))); EvenDeeperFilterType fooType = CreateType(new EvenDeeperFilterType()); // act var filterContext = new QueryableFilterVisitorContext( fooType, typeof(EvenDeeper), MockFilterConvention.Default.GetExpressionDefinition(), TypeConversion.Default, true); QueryableFilterVisitor.Default.Visit(value, filterContext); Func <EvenDeeper, bool> func = filterContext.CreateOrAssert <EvenDeeper>().Compile(); // assert var a = new EvenDeeper { Foo = null }; Assert.False(func(a)); var b = new EvenDeeper { Foo = new Foo { FooNested = null } }; Assert.False(func(b)); var c = new EvenDeeper { Foo = new Foo { FooNested = new FooNested { Bar = null } } }; Assert.False(func(c)); var d = new EvenDeeper { Foo = new Foo { FooNested = new FooNested { Bar = "a" } } }; Assert.True(func(d)); }
public void Create_ObjectStringEqualDeep_Expression() { // arrange var value = new ObjectValueNode( new ObjectFieldNode("foo", new ObjectValueNode( new ObjectFieldNode("fooNested", new ObjectValueNode( new ObjectFieldNode("bar", new StringValueNode("a") ) ) ) ) ) ); var fooType = CreateType(new EvenDeeperFilterType()); // act var filter = new QueryableFilterVisitor( fooType, typeof(EvenDeeper), TypeConversion.Default, true); filter.Visit(value, null); Func <EvenDeeper, bool> func = filter.CreateFilter <EvenDeeper>().Compile(); // assert var a = new EvenDeeper { Foo = new Foo { FooNested = new FooNested { Bar = "a" } } }; Assert.True(func(a)); var b = new EvenDeeper { Foo = new Foo { FooNested = new FooNested { Bar = "b" } } }; Assert.False(func(b)); }
public void Create_ObjectStringEqualNullWithMultipleFilters_Expression() { // arrange var value = new ObjectValueNode( new ObjectFieldNode("foo", new ObjectValueNode( new ObjectFieldNode("fooNested", new ObjectValueNode( new ObjectFieldNode("bar", new StringValueNode("a") ), new ObjectFieldNode("bar_not", new StringValueNode("c") ) ) ) ) ) ); var fooType = CreateType(new EvenDeeperFilterType()); // act var filter = new QueryableFilterVisitor( fooType, typeof(EvenDeeper), TypeConversion.Default); value.Accept(filter); Func <EvenDeeper, bool> func = filter.CreateFilter <EvenDeeper>().Compile(); // assert var a = new EvenDeeper { Foo = null }; Assert.False(func(a)); var b = new EvenDeeper { Foo = new Foo { FooNested = null } }; Assert.False(func(b)); var c = new EvenDeeper { Foo = new Foo { FooNested = new FooNested { Bar = null } } }; Assert.False(func(c)); var d = new EvenDeeper { Foo = new Foo { FooNested = new FooNested { Bar = "a" } } }; Assert.True(func(d)); }