public void CreateTypeNameExpression_ReturnsConditionalExpression_IfTypeHasDerivedTypes() { // Arrange IEdmEntityType baseType = new EdmEntityType("NS", "BaseType"); IEdmEntityType typeA = new EdmEntityType("NS", "A", baseType); IEdmEntityType typeB = new EdmEntityType("NS", "B", baseType); IEdmEntityType typeAA = new EdmEntityType("NS", "AA", typeA); IEdmEntityType typeAAA = new EdmEntityType("NS", "AAA", typeAA); IEdmEntityType[] types = new[] { baseType, typeA, typeAAA, typeB, typeAA }; EdmModel model = new EdmModel(); foreach (var type in types) { model.AddElement(type); model.SetAnnotationValue(type, new ClrTypeAnnotation(new MockType(type.Name, @namespace: type.Namespace))); } Expression source = Expression.Constant(42); // Act Expression result = SelectExpandBinder.CreateTypeNameExpression(source, baseType, model); // Assert Assert.Equal( result.ToString(), @"IIF((42 Is AAA), ""NS.AAA"", IIF((42 Is AA), ""NS.AA"", IIF((42 Is B), ""NS.B"", IIF((42 Is A), ""NS.A"", ""NS.BaseType""))))"); }
public void Bind_GeneratedExpression_ContainsExpandedObject() { // Arrange SelectExpandQueryOption selectExpand = new SelectExpandQueryOption("Orders,Orders/Customer", "Orders,Orders/Customer", _context); // Act IQueryable queryable = SelectExpandBinder.Bind(_queryable, _settings, selectExpand); // Assert IEnumerator enumerator = queryable.GetEnumerator(); Assert.True(enumerator.MoveNext()); var partialCustomer = Assert.IsType <SelectExpandWrapper <Customer> >(enumerator.Current); Assert.False(enumerator.MoveNext()); Assert.Null(partialCustomer.Instance); IEnumerable <SelectExpandWrapper <Order> > innerOrders = partialCustomer.Container.ToDictionary()["Orders"] as IEnumerable <SelectExpandWrapper <Order> >; Assert.NotNull(innerOrders); SelectExpandWrapper <Order> partialOrder = innerOrders.Single(); Assert.Same(_queryable.First().Orders.First(), partialOrder.Instance); SelectExpandWrapper <Customer> innerInnerCustomer = Assert.IsType <SelectExpandWrapper <Customer> >(partialOrder.Container.ToDictionary()["Customer"]); Assert.Same(_queryable.First(), innerInnerCustomer.Instance); }
public static object Bind(object entity, ODataQuerySettings settings, SelectExpandQueryOption selectExpandQuery) { Contract.Assert(entity != null); SelectExpandBinder binder = new SelectExpandBinder(settings, selectExpandQuery); return binder.Bind(entity); }
public static IQueryable Bind(IQueryable queryable, ODataQuerySettings settings, SelectExpandQueryOption selectExpandQuery) { Contract.Assert(queryable != null); SelectExpandBinder binder = new SelectExpandBinder(settings, selectExpandQuery); return binder.Bind(queryable); }
public static object Bind(object entity, ODataQuerySettings settings, SelectExpandQueryOption selectExpandQuery) { Contract.Assert(entity != null); SelectExpandBinder binder = new SelectExpandBinder(settings, selectExpandQuery); return(binder.Bind(entity)); }
public static IQueryable Bind(IQueryable queryable, ODataQuerySettings settings, SelectExpandQueryOption selectExpandQuery) { Contract.Assert(queryable != null); SelectExpandBinder binder = new SelectExpandBinder(settings, selectExpandQuery); return(binder.Bind(queryable)); }
public SelectExpandBinderTest() { _settings = new ODataQuerySettings { HandleNullPropagation = HandleNullPropagationOption.False }; _model = new CustomersModelWithInheritance(); _model.Model.SetAnnotationValue<ClrTypeAnnotation>(_model.Customer, new ClrTypeAnnotation(typeof(Customer))); _model.Model.SetAnnotationValue<ClrTypeAnnotation>(_model.SpecialCustomer, new ClrTypeAnnotation(typeof(SpecialCustomer))); _context = new ODataQueryContext(_model.Model, typeof(Customer)); _binder = new SelectExpandBinder(_settings, new SelectExpandQueryOption("*", "", _context)); Customer customer = new Customer(); Order order = new Order { Customer = customer }; customer.Orders.Add(order); _queryable = new[] { customer }.AsQueryable(); }
public void Bind_ReturnsIEdmObject_WithRightEdmType() { // Arrange SelectExpandQueryOption selectExpand = new SelectExpandQueryOption(select: "ID", expand: null, context: _context); // Act IQueryable queryable = SelectExpandBinder.Bind(_queryable, _settings, selectExpand); // Assert Assert.NotNull(queryable); IEdmTypeReference edmType = _model.Model.GetEdmTypeReference(queryable.GetType()); Assert.NotNull(edmType); Assert.True(edmType.IsCollection()); Assert.Same(_model.Customer, edmType.AsCollection().ElementType().Definition); }
public void CreateTypeNameExpression_ReturnsNull_IfTypeHasNoDerivedTypes() { // Arrange IEdmEntityType baseType = new EdmEntityType("NS", "BaseType"); EdmModel model = new EdmModel(); model.AddElement(baseType); Expression source = Expression.Constant(42); // Act Expression result = SelectExpandBinder.CreateTypeNameExpression(source, baseType, model); // Assert Assert.Null(result); }
public void CreateTypeNameExpression_ThrowsODataException_IfTypeHasNoMapping() { // Arrange IEdmEntityType baseType = new EdmEntityType("NS", "BaseType"); IEdmEntityType derivedType = new EdmEntityType("NS", "DerivedType", baseType); EdmModel model = new EdmModel(); model.AddElement(baseType); model.AddElement(derivedType); Expression source = Expression.Constant(42); // Act & Assert Assert.Throws <ODataException>( () => SelectExpandBinder.CreateTypeNameExpression(source, baseType, model), "The provided mapping doesn't contain an entry for the entity type 'NS.DerivedType'."); }
public SelectExpandBinderTest() { _settings = new ODataQuerySettings { HandleNullPropagation = HandleNullPropagationOption.False }; _model = new CustomersModelWithInheritance(); _model.Model.SetAnnotationValue <ClrTypeAnnotation>(_model.Customer, new ClrTypeAnnotation(typeof(Customer))); _model.Model.SetAnnotationValue <ClrTypeAnnotation>(_model.SpecialCustomer, new ClrTypeAnnotation(typeof(SpecialCustomer))); _context = new ODataQueryContext(_model.Model, typeof(Customer)); _binder = new SelectExpandBinder(_settings, new SelectExpandQueryOption("*", "", _context)); Customer customer = new Customer(); Order order = new Order { Customer = customer }; customer.Orders.Add(order); _queryable = new[] { customer }.AsQueryable(); }