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 DefaultAssembliesResolver(), new SelectExpandQueryOption("*", "", _context)); Customer customer = new Customer(); Order order = new Order { Customer = customer }; customer.Orders.Add(order); _queryable = new[] { customer }.AsQueryable(); }
public void ProjectAsWrapper_NonCollection_ContainsRightInstance() { // Arrange Order order = new Order(); SelectExpandClause selectExpand = new SelectExpandClause(new SelectItem[0], allSelected: true); Expression source = Expression.Constant(order); // Act Expression projection = _binder.ProjectAsWrapper(source, selectExpand, _model.Order); // Assert SelectExpandWrapper<Order> projectedOrder = Expression.Lambda(projection).Compile().DynamicInvoke() as SelectExpandWrapper<Order>; Assert.NotNull(projectedOrder); Assert.Same(order, projectedOrder.Instance); }
public void ProjectAsWrapper_Collection_ContainsRightInstance() { // Arrange Order[] orders = new Order[] { new Order() }; SelectExpandClause selectExpand = new SelectExpandClause(new SelectItem[0], allSelected: true); Expression source = Expression.Constant(orders); // Act Expression projection = _binder.ProjectAsWrapper(source, selectExpand, _model.Order); // Assert IEnumerable<SelectExpandWrapper<Order>> projectedOrders = Expression.Lambda(projection).Compile().DynamicInvoke() as IEnumerable<SelectExpandWrapper<Order>>; Assert.NotNull(projectedOrders); Assert.Same(orders[0], projectedOrders.Single().Instance); }
public void ProjectAsWrapper_NullExpandedProperty_HasNullValueInProjectedWrapper() { // Arrange IPropertyMapper mapper = new IdentityPropertyMapper(); Order order = new Order(); ExpandedNavigationSelectItem expandItem = new ExpandedNavigationSelectItem( new ODataExpandPath(new NavigationPropertySegment(_model.Order.NavigationProperties().Single(), navigationSource: _model.Customers)), _model.Customers, selectExpandOption: null); SelectExpandClause selectExpand = new SelectExpandClause(new SelectItem[] { expandItem }, allSelected: true); Expression source = Expression.Constant(order); _model.Model.SetAnnotationValue(_model.Order, new DynamicPropertyDictionaryAnnotation(typeof(Order).GetProperty("OrderProperties"))); // Act Expression projection = _binder.ProjectAsWrapper(source, selectExpand, _model.Order); // Assert SelectExpandWrapper<Order> projectedOrder = Expression.Lambda(projection).Compile().DynamicInvoke() as SelectExpandWrapper<Order>; Assert.NotNull(projectedOrder); Assert.Contains("Customer", projectedOrder.Container.ToDictionary(mapper).Keys); Assert.Null(projectedOrder.Container.ToDictionary(mapper)["Customer"]); }
public void ProjectAsWrapper_ProjectionContainsExpandedProperties() { // Arrange Order order = new Order(); ExpandedNavigationSelectItem expandItem = new ExpandedNavigationSelectItem( new ODataExpandPath(new NavigationPropertySegment(_model.Order.NavigationProperties().Single(), navigationSource: _model.Customers)), _model.Customers, selectExpandOption: null); SelectExpandClause selectExpand = new SelectExpandClause(new SelectItem[] { expandItem }, allSelected: true); Expression source = Expression.Constant(order); // Act Expression projection = _binder.ProjectAsWrapper(source, selectExpand, _model.Order); // Assert SelectExpandWrapper<Order> projectedOrder = Expression.Lambda(projection).Compile().DynamicInvoke() as SelectExpandWrapper<Order>; Assert.NotNull(projectedOrder); Assert.Contains("Customer", projectedOrder.Container.ToDictionary(new IdentityPropertyMapper()).Keys); }