Exemplo n.º 1
0
        public void Project_Orders_Custom_Expression_2()
        {
            var config = new MapConfiguration();

            config.RegisterMap <Order, OrderDTO>((o, mc) => new OrderDTO {
                Id           = o.OrderDetails.ToList().Select(od => od.OrderId).First(),
                OrderNo      = o.OrderNo,
                Price        = o.OrderDetails.Sum(od => od.UnitPrice),
                OrderDetails = mc.MapToList <OrderDetail, OrderDetailDTO>(o.OrderDetails)
            });
            config.RegisterMap <OrderDetail, OrderDetailDTO>();
            config.RegisterMap <Product, ProductDTO>();
            config.RegisterMap <Company, CompanyDTO>();

            var projector = config.GetProjector <Order, OrderDTO>(o => o.OrderDetails.Select(od => od.Product.Supplier));
            var func      = Helper.CreateProjector(projector);
            var dtoList   = _orders.Select(func).ToList();

            Assert.AreEqual(
                dtoList[3].Price,
                _orders[3].OrderDetails.Sum(od => od.UnitPrice)
                );

            Assert.AreEqual(
                dtoList[3].OrderDetails.ToList()[2].Product.Supplier.CompanyName,
                _orders[3].OrderDetails[2].Product.Supplier.CompanyName
                );
        }
Exemplo n.º 2
0
        public void Map_Orders_Custom_Expression()
        {
            var config = new MapConfiguration();

            config.RegisterMap <Order, OrderDTO>((o, mc) => new OrderDTO {
                Id           = o.Id,
                OrderNo      = o.OrderNo,
                OrderDetails = o.OrderDetails.Select(od => new OrderDetailDTO {
                    Id       = od.Id,
                    Product  = mc.Map <Product, ProductDTO>(od.Product),
                    SubPrice = od.UnitPrice * od.Count
                }).ToList(),
                Price = Math.Round(o.Price)
            });
            config.RegisterMap <Product, ProductDTO>();
            config.RegisterMap <Company, CompanyDTO>();

            var dtoList = config.Map <Order, OrderDTO>(_orders).ToList();

            Assert.AreEqual(
                dtoList[3].OrderDetails.ToList()[2].SubPrice,
                _orders[3].OrderDetails[2].UnitPrice * _orders[3].OrderDetails[2].Count
                );

            Assert.AreEqual(
                dtoList[3].OrderDetails.ToList()[2].Product.Supplier.CompanyName,
                _orders[3].OrderDetails[2].Product.Supplier.CompanyName
                );
        }
Exemplo n.º 3
0
        public void Project_Orders_With_Details_Product_Supplier_Custom_Expression()
        {
            var config = new MapConfiguration();

            config.RegisterMap <Order, OrderDTO>((o, mc) => new OrderDTO {
                Id           = o.Id,
                OrderNo      = o.OrderNo,
                OrderDetails = o.OrderDetails.Select(od => new OrderDetailDTO {
                    Id       = od.Id,
                    Product  = mc.Map <Product, ProductDTO>(od.Product),
                    SubPrice = od.UnitPrice * od.Count
                }).ToList(),
                Price = o.Price
            });
            config.RegisterMap <Product, ProductDTO>();
            config.RegisterMap <Company, CompanyDTO>();

            var query    = _orders.AsQueryable();
            var dtoQuery = config.ProjectTo <Order, OrderDTO>(query, o => o.OrderDetails.Select(od => od.Product).Select(p => p.Supplier));
            var dtoList  = dtoQuery.ToList();

            Assert.Equal(
                dtoList[3].OrderDetails.ToList()[2].Product.Supplier.CompanyName,
                _orders[3].OrderDetails[2].Product.Supplier.CompanyName
                );

            Assert.Null(dtoList[3].OrderDetails.ToList()[2].Product.Supplier.Addresses);
        }
Exemplo n.º 4
0
        public void Project_Orders_Custom_Expression()
        {
            var config = new MapConfiguration();

            config.RegisterMap <Order, OrderDTO>((o, mc) => new OrderDTO {
                Id           = o.Id,
                OrderNo      = o.OrderNo,
                OrderDetails = o.OrderDetails.Select(od => new OrderDetailDTO {
                    Id       = od.Id,
                    Product  = mc.Map <Product, ProductDTO>(od.Product),
                    SubPrice = od.UnitPrice * od.Count
                }).ToList(),
                Price = o.Price
            });
            config.RegisterMap <Product, ProductDTO>();
            config.RegisterMap <Company, CompanyDTO>();

            var projector = config.GetProjector <Order, OrderDTO>(o => o.OrderDetails.Select(od => od.Product.Supplier));
            var func      = Helper.CreateProjector(projector);
            var dtoList   = _orders.Select(func).ToList();

            Assert.Equal(
                dtoList[3].OrderDetails.ToList()[2].SubPrice,
                _orders[3].OrderDetails[2].UnitPrice * _orders[3].OrderDetails[2].Count
                );

            Assert.Equal(
                dtoList[3].OrderDetails.ToList()[2].Product.Supplier.CompanyName,
                _orders[3].OrderDetails[2].Product.Supplier.CompanyName
                );
        }
Exemplo n.º 5
0
        public void Project_Orders_Custom_Expression2()
        {
            var config = new MapConfiguration();

            config.RegisterMap <Order, OrderDTO>((o, mc) => new OrderDTO {
                Id      = o.Id,
                OrderNo = o.OrderNo,
                // ReSharper disable once ConvertClosureToMethodGroup
                // it will fail for method group because it must be an "Expression" to be handled
                // mc.Map will be included in the final expression because we are using "Select" for "OrderDetails" navigation
                // using "Select" is equal of saying "always map this property my way"
                // if we want it to be dynamically decided for plural navigations we should have used: "mc.MapToList<OrderDetail, OrderDetailDTO>"
                OrderDetails = o.OrderDetails.Select(od => mc.Map <OrderDetail, OrderDetailDTO>(od)).ToList(),
                Price        = o.Price
            });
            // similar custom mapping. but this time we need to register OrderDetail-OrderDetailDTO to allow MapContext to do the mapping
            config.RegisterMap <OrderDetail, OrderDetailDTO>();

            var query    = _orders.AsQueryable();
            var dtoQuery = config.ProjectTo <OrderDTO>(query, new IncludePath[] { });
            var dtoList  = dtoQuery.ToList();

            Assert.NotNull(dtoList[3].OrderDetails);
            Assert.Equal(dtoList[3].OrderDetails.Count, _orders[3].OrderDetails.Count);
            Assert.True(dtoList.All(o => o.OrderDetails.All(od => od.Product == null)));
        }
Exemplo n.º 6
0
        public void Project_Orders_With_Details_Product_Custom_Expression()
        {
            var config = new MapConfiguration();

            config.RegisterMap <Order, OrderDTO>((o, mc) => new OrderDTO {
                Id           = o.Id,
                OrderNo      = o.OrderNo,
                OrderDetails = o.OrderDetails.Select(od => new OrderDetailDTO {
                    Id       = od.Id,
                    Product  = mc.Map <Product, ProductDTO>(od.Product),
                    SubPrice = od.UnitPrice * od.Count
                }).ToList(),
                Price = o.Price
            });
            config.RegisterMap <Product, ProductDTO>();
            config.RegisterMap <Company, CompanyDTO>();

            var mockContext      = new Mock <TestEntities>();
            var observableOrders = new ObservableCollection <Order>(_orders);

            mockContext.Setup(p => p.Orders).Returns(GetMockSet(observableOrders).Object);

            var query    = mockContext.Object.Orders;
            var dtoQuery = config.ProjectTo <Order, OrderDTO>(query, o => o.OrderDetails.Select(od => od.Product).Select(p => p.Supplier));
            var dtoList  = dtoQuery.ToList();

            Assert.AreEqual(
                dtoList[3].OrderDetails.ToList()[2].Product.Supplier.CompanyName,
                _orders[3].OrderDetails[2].Product.Supplier.CompanyName
                );
        }
Exemplo n.º 7
0
        public void Project_Orders()
        {
            var config = new MapConfiguration();

            config.RegisterMap <Order, OrderDTO>();
            config.RegisterMap <OrderDetail, OrderDetailDTO>();
            config.RegisterMap <Product, ProductDTO>();

            var query    = _orders.AsQueryable();
            var dtoQuery = config.ProjectTo <OrderDTO>(query);
            var dtoList  = dtoQuery.ToList();

            Assert.Null(dtoList[3].OrderDetails);
        }
Exemplo n.º 8
0
        public void Project_Invalid_Method_Throws_Exception()
        {
            var config = new MapConfiguration();

            config.RegisterMap <Order, OrderDTO>((o, mc) => new OrderDTO {
                Id      = o.Id,
                OrderNo = o.OrderNo,
                Price   = mc.MapToDictionary <int, OrderDetail, int, int>(o.OrderDetails.ToDictionary(od => od.Id, od => od)).Sum(x => x.Key)
            });
            config.RegisterMap <OrderDetail, OrderDetailDTO>();
            config.RegisterMap <Product, ProductDTO>();
            config.RegisterMap <Company, CompanyDTO>();

            Assert.Throws <InvalidOperationException>(() => config.GetProjector <Order, OrderDTO>(o => o.OrderDetails.Select(od => od.Product.Supplier)));
        }
Exemplo n.º 9
0
        public void Map_Orders_With_MapMember_String()
        {
            var config = new MapConfiguration();

            config.RegisterMap <OrderDTO, Order>();
            config.RegisterMap(typeof(OrderDetailDTO), typeof(OrderDetail), b => {
                b.MapMember("OrderId", "Order.Id");
            });

            var orderDetailDto = Give <OrderDetailDTO> .ToMe().With(od => od.Order = Give <OrderDTO> .Single()).Now();

            var orderDetail = config.Map <OrderDetail>(orderDetailDto);

            Assert.True(orderDetail.OrderId.Equals(orderDetailDto.Order.Id));
        }
Exemplo n.º 10
0
        public void Project_Orders_Custom_Expression()
        {
            // we aren't registering OrderDetail-OrderDetailDTO because we declare the custom mapping
            // even we don't include OrderDetail in the query, it will be mapped
            var config = new MapConfiguration();

            config.RegisterMap <Order, OrderDTO>((o, mc) => new OrderDTO {
                Id           = o.Id,
                OrderNo      = o.OrderNo,
                OrderDetails = o.OrderDetails.Select(od => new OrderDetailDTO {
                    Id       = od.Id,
                    Product  = mc.Map <Product, ProductDTO>(od.Product),
                    SubPrice = od.UnitPrice * od.Count
                }).ToList(),
                Price = o.Price
            });

            var query    = _orders.AsQueryable();
            var dtoQuery = config.ProjectTo <OrderDTO>(query, new IncludePath[] { });
            var dtoList  = dtoQuery.ToList();

            Assert.NotNull(dtoList[3].OrderDetails);
            Assert.Equal(dtoList[3].OrderDetails.Count, _orders[3].OrderDetails.Count);
            Assert.True(dtoList.All(o => o.OrderDetails.All(od => od.Product == null)));
        }
Exemplo n.º 11
0
        public void Map_Order_To_Existing()
        {
            var config = new MapConfiguration();

            config.RegisterMap <Order, OrderDTO>();
            config.RegisterMap <OrderDetail, OrderDetailDTO>();
            config.RegisterMap <Product, ProductDTO>();
            config.RegisterMap <Company, CompanyDTO>();

            var entity = _orders.First();
            var dto    = new OrderDTO();
            var mapDto = config.MapTo(entity, dto);

            Assert.Same(dto, mapDto);
            Assert.Equal(dto.OrderDetails.Count, entity.OrderDetails.Count);
        }
Exemplo n.º 12
0
        public void Project_Orders_Custom_Expression()
        {
            var config = new MapConfiguration();

            config.RegisterMap <Order, OrderDTO>((o, mc) => new OrderDTO {
                Id           = o.Id,
                OrderNo      = o.OrderNo,
                OrderDetails = o.OrderDetails.Select(od => new OrderDetailDTO {
                    Id       = od.Id,
                    Product  = mc.Map <Product, ProductDTO>(od.Product),
                    SubPrice = od.UnitPrice * od.Count
                }).ToList(),
                Price = o.Price
            });

            var mockContext      = new Mock <TestEntities>();
            var observableOrders = new ObservableCollection <Order>(_orders);

            mockContext.Setup(p => p.Orders).Returns(GetMockSet(observableOrders).Object);

            var query    = mockContext.Object.Orders;
            var dtoQuery = config.ProjectTo <OrderDTO>(query, new IncludePath[] { });
            var dtoList  = dtoQuery.ToList();

            Assert.IsNull(dtoList[3].OrderDetails);
        }
Exemplo n.º 13
0
        public void Project_Orders_Custom_Expression()
        {
            // we aren't registering OrderDetail-OrderDetailDTO because we declare the custom mapping
            // even we don't include OrderDetail in the query, it will be mapped
            var config = new MapConfiguration();

            config.RegisterMap <Order, OrderDTO>((o, mc) => new OrderDTO {
                Id           = o.Id,
                OrderNo      = o.OrderNo,
                OrderDetails = o.OrderDetails.Select(od => new OrderDetailDTO {
                    Id       = od.Id,
                    Product  = mc.Map <Product, ProductDTO>(od.Product),
                    SubPrice = od.UnitPrice * od.Count
                }).ToList(),
                Price = o.Price
            });

            var mockContext      = new Mock <TestEntities>();
            var observableOrders = new ObservableCollection <Order>(_orders);

            mockContext.Setup(p => p.Orders).Returns(GetMockSet(observableOrders).Object);

            var query    = mockContext.Object.Orders;
            var dtoQuery = config.ProjectTo <OrderDTO>(query, new IncludePath[] { });
            var dtoList  = dtoQuery.ToList();

            Assert.IsNotNull(dtoList[3].OrderDetails);
            Assert.AreEqual(dtoList[3].OrderDetails.Count, _orders[3].OrderDetails.Count);
            Assert.IsTrue(dtoList.All(o => o.OrderDetails.All(od => od.Product == null)));
        }
Exemplo n.º 14
0
        public void Map_Existing_With_Non_MemberInitExpression()
        {
            var config = new MapConfiguration();

            config.RegisterMap <Customer, CustomerDTO>((c, mc) => mc.Map <Customer, CustomerDTO>(c));
            Assert.Throws <InvalidOperationException>(() => config.MapTo(new Customer(), new CustomerDTO()));
        }
Exemplo n.º 15
0
        public void Project_Orders_With_Navigations()
        {
            var config = new MapConfiguration(DynamicMapping.MapAndCache);

            config.RegisterMap <OrderDetail, OrderDetailDTO>(b => b.SkipMember(od => od.Order));
            config.RegisterMap <Product, ProductDTO>(b => b.SkipMember(p => p.Supplier));

            var projector = config.GetProjector <Order, OrderDTO>();
            var func      = Helper.CreateProjector(projector);
            var dtoList   = _orders.Select(func).ToList();

            Assert.AreEqual(
                dtoList[3].OrderDetails.ToList()[2].Product.Id,
                _orders[3].OrderDetails[2].Product.Id
                );
        }
Exemplo n.º 16
0
        public void Map_With_Non_MemberInitExpression()
        {
            var config = new MapConfiguration();

            config.RegisterMap <Customer, CustomerDTO>((c, mc) => null);
            Assert.Null(config.Map <CustomerDTO>(new Customer(), true));
        }
Exemplo n.º 17
0
        public void Map_Without_Destination_With_Null()
        {
            var config = new MapConfiguration();

            config.RegisterMap <Customer, CustomerDTO>();

            Assert.Null(config.Map(null, true));
        }
Exemplo n.º 18
0
        public void Map_With_Null()
        {
            var config = new MapConfiguration();

            config.RegisterMap <Customer, CustomerDTO>();

            Assert.Null(config.Map(null, typeof(CustomerDTO)));
        }
Exemplo n.º 19
0
        public void Map_Generic_With_Null()
        {
            var config = new MapConfiguration();

            config.RegisterMap <Customer, CustomerDTO>();

            Assert.Null(config.Map <CustomerDTO>(null));
        }
Exemplo n.º 20
0
        public void Map_Enumerable_With_Null()
        {
            var config = new MapConfiguration();

            config.RegisterMap <Customer, CustomerDTO>();

            Assert.Null(config.Map <Customer, CustomerDTO>((IEnumerable <Customer>)null));
        }
Exemplo n.º 21
0
        public void Map_Two_Generic_With_Null()
        {
            var config = new MapConfiguration();

            config.RegisterMap <Customer, CustomerDTO>(b => b.MapMember(c => c.Address, (c, mc) => mc.Map <Address, AddressDTO>(c.MainAddress)));

            Assert.Null(config.Map <Customer, CustomerDTO>((Customer)null));
            Assert.Null(config.Map <Customer, CustomerDTO>(new Customer()).Address);
        }
Exemplo n.º 22
0
        public void Map_To_Collection_Property()
        {
            var entity = Give <ForTest5>
                         .ToMe(c => {
                c.Cities = new Collection <City>(Give <City> .Many(10));
            })
                         .Now();

            var config = new MapConfiguration();

            config.RegisterMap <ForTest5, ForTest5DTO>((e, mc) => new ForTest5DTO {
                Cities = mc.MapToCollection <City, CityDTO>(e.Cities)
            });
            config.RegisterMap <City, CityDTO>();
            var dto = config.Map <ForTest5, ForTest5DTO>(entity);

            Assert.True(dto.Cities[2].Name == entity.Cities[2].Name);
        }
Exemplo n.º 23
0
        public void Map_Collection_Property()
        {
            var entities = Give <ForTest5>
                           .ToMe(c => {
                c.Cities = new Collection <City>(Give <City> .Many(10));
            })
                           .Now(5);

            entities[4].Cities = null;

            var config = new MapConfiguration();

            config.RegisterMap <ForTest5, ForTest5DTO>();
            config.RegisterMap <City, CityDTO>();
            var dtos = config.Map <ForTest5, ForTest5DTO>(entities).ToList();

            Assert.True(dtos[3].Cities[2].Name == entities[3].Cities[2].Name);
            Assert.Null(dtos[4].Cities);
        }
Exemplo n.º 24
0
        public void Map_HashSet_Property()
        {
            var entities = Give <ForTest6>
                           .ToMe(c => {
                c.Cities = new HashSet <City>(Give <City> .Many(10));
            })
                           .Now(5);

            entities[4].Cities = null;

            var config = new MapConfiguration();

            config.RegisterMap <ForTest6, ForTest6DTO>();
            config.RegisterMap <City, CityDTO>();
            var dtos = config.Map <ForTest6, ForTest6DTO>(entities).ToList();

            Assert.True(dtos[3].Cities.First().Name == entities[3].Cities.First().Name);
            Assert.Null(dtos[4].Cities);
        }
Exemplo n.º 25
0
        public void Project_Orders()
        {
            var config = new MapConfiguration();

            config.RegisterMap <Order, OrderDTO>();
            config.RegisterMap <OrderDetail, OrderDetailDTO>();
            config.RegisterMap <Product, ProductDTO>();

            var mockContext      = new Mock <TestEntities>();
            var observableOrders = new ObservableCollection <Order>(_orders);

            mockContext.Setup(p => p.Orders).Returns(GetMockSet(observableOrders).Object);

            var query    = mockContext.Object.Orders;
            var dtoQuery = config.ProjectTo <OrderDTO>(query);
            var dtoList  = dtoQuery.ToList();

            Assert.IsNull(dtoList[3].OrderDetails);
        }
Exemplo n.º 26
0
        public void Register_Can_Access_Projector_Via_Interface()
        {
            var config = new MapConfiguration();

            config.RegisterMap <Customer, CustomerDTO>(b => {
                var builder = b as IMapBuilder <MapBuilder <Customer, CustomerDTO>, Customer, CustomerDTO>;
                Assert.NotNull(builder);
                Assert.NotNull(builder.GetProjector());
            });
        }
Exemplo n.º 27
0
        public void Map_Nullable_Conversation_When_Value_Null()
        {
            var config = new MapConfiguration();

            config.RegisterMap <ForTest9, ForTest9DTO>();

            var model = new ForTest9();
            var dto   = config.Map <ForTest9, ForTest9DTO>(model);

            Assert.Equal(dto.Amount, null);
        }
Exemplo n.º 28
0
        public void Map_With_Empty_Collection()
        {
            var config = new MapConfiguration();

            config.RegisterMap <Customer, CustomerDTO>();

            var customer = new Customer();
            var dto      = config.Map <CustomerDTO>(customer);

            Assert.Equal(dto.Orders.Count, 0);
        }
Exemplo n.º 29
0
        public void Map_Dictionary_Property()
        {
            var config = new MapConfiguration();

            config.RegisterMap <ForTest4, ForTest4DTO>();
            config.RegisterMap <Order, OrderDTO>();

            var entity = new ForTest4 {
                Orders = new Dictionary <int, Order> {
                    { 1, new Order {
                          Id = 1
                      } },
                    { 2, new Order {
                          Id = 2
                      } }
                }
            };
            var dto = config.Map <ForTest4DTO>(entity);

            Assert.Equal(dto.Orders[2].Id, 2);
        }
Exemplo n.º 30
0
        public void Register_With_Type_Cast()
        {
            var config = new MapConfiguration();

            config.RegisterMap <ForTest2, ForTest2DTO>();

            var dto = config.Map <ForTest2DTO>(new ForTest2 {
                Number = 5
            });

            Assert.Equal(dto.Number, 5);
        }