public void Create_new_order()
        {
            _mockContext.Setup(m => m.Orders).Returns(_mockOrderSet.Object);
            _mockFactory.Setup(x => x()).Returns(_mockContext.Object);

            var orderId  = Guid.NewGuid();
            var newOrder = new Order
            {
                Date        = DateTime.Now,
                Description = $"Order {orderId}",
                Id          = orderId,
                OrderItems  = new List <OrderItem>
                {
                    new OrderItem {
                        Id = Guid.NewGuid(), Name = "Item 1", Quantity = 1, UnitPrice = 1000
                    },
                    new OrderItem {
                        Id = Guid.NewGuid(), Name = "Item 2", Quantity = 4, UnitPrice = 5000
                    }
                }
            };

            var repository = new OrderRepositoryWithFactory(_mockFactory.Object);

            repository.Add(newOrder);

            _mockOrderSet.Verify(m => m.Add(It.IsAny <Order>()), Times.Once());
            _mockContext.Verify(m => m.SaveChanges(), Times.Once());
        }
 public DbContextFactoryController(OrderRepositoryWithFactory orderRepository)
 {
     _orderRepository = orderRepository;
 }
예제 #3
0
 public HomeController(OrderRepositoryWithFactory orderRepository)
 {
     _orderRepository = orderRepository;
 }
        public void Get_all_orders()
        {
            var order1Id         = Guid.NewGuid();
            var orderItem1Order1 = new OrderItem {
                Id = Guid.NewGuid(), Name = "Item 1", Quantity = 1, UnitPrice = 1000, OrderId = order1Id
            };
            var orderItem2Order1 = new OrderItem {
                Id = Guid.NewGuid(), Name = "Item 2", Quantity = 4, UnitPrice = 5000, OrderId = order1Id
            };

            var order1 = new Order
            {
                Date        = DateTime.Now,
                Description = $"Order 1 {order1Id}",
                Id          = order1Id,
                OrderItems  = new List <OrderItem> {
                    orderItem1Order1, orderItem2Order1
                }
            };

            var order2Id         = Guid.NewGuid();
            var orderItem1Order2 = new OrderItem {
                Id = Guid.NewGuid(), Name = "Item A", Quantity = 1, UnitPrice = 1000, OrderId = order2Id
            };

            var order2 = new Order
            {
                Date        = DateTime.Now,
                Description = $"Order 2 {order2Id}",
                Id          = order2Id,
                OrderItems  = new List <OrderItem> {
                    orderItem1Order2
                }
            };

            var order3Id         = Guid.NewGuid();
            var orderItem1Order3 = new OrderItem {
                Id = Guid.NewGuid(), Name = "Item B", Quantity = 1, UnitPrice = 1000, OrderId = order3Id
            };
            var orderItem2Order3 = new OrderItem {
                Id = Guid.NewGuid(), Name = "Item C", Quantity = 4, UnitPrice = 5000, OrderId = order3Id
            };
            var orderItem3Order3 = new OrderItem {
                Id = Guid.NewGuid(), Name = "Item D", Quantity = 4, UnitPrice = 5000, OrderId = order3Id
            };
            var order3 = new Order
            {
                Date        = DateTime.Now,
                Description = $"Order 3 {order3Id}",
                Id          = order3Id,
                OrderItems  = new List <OrderItem> {
                    orderItem1Order3, orderItem2Order3, orderItem3Order3
                }
            };

            var data = new List <Order>
            {
                order1,
                order2,
                order3,
            }.AsQueryable();

            // Moq doesn't work for static methods (like Include), so it's necessary bypass it via Substitute.
            var mockOrderSet = Substitute.For <DbSet <Order>, IQueryable <Order> >();

            ((IQueryable <Order>)mockOrderSet).Provider.Returns(data.Provider);
            ((IQueryable <Order>)mockOrderSet).Expression.Returns(data.Expression);
            ((IQueryable <Order>)mockOrderSet).ElementType.Returns(data.ElementType);
            ((IQueryable <Order>)mockOrderSet).GetEnumerator().Returns(data.GetEnumerator());
            mockOrderSet.Include(x => x.OrderItems).Returns(mockOrderSet);

            _mockContext.Setup(m => m.Orders).Returns(mockOrderSet);
            _mockFactory.Setup(x => x()).Returns(_mockContext.Object);

            var repository = new OrderRepositoryWithFactory(_mockFactory.Object);
            var orders     = repository.GetAllOrders().ToList();

            Assert.AreEqual(3, orders.Count);
            Assert.AreEqual($"Order 1 {order1Id}", orders[0].Description);
            Assert.AreEqual($"Order 2 {order2Id}", orders[1].Description);
            Assert.AreEqual($"Order 3 {order3Id}", orders[2].Description);
            Assert.AreEqual(2, orders[0].OrderItems.Count);
            Assert.AreEqual(1, orders[1].OrderItems.Count);
            Assert.AreEqual(3, orders[2].OrderItems.Count);
        }