Пример #1
0
        public void Execution_reduces_inventory_and_sets_order_item_to_a_shipped_state()
        {
            var productID = 1;
            var orderItemID = 1;
            var inventoryItem = new InventoryItem { QuantityOnHand = 5, ProductID = productID };
            var orderItem = new OrderItem { ProductID = productID, Quantity = 5, OrderStatusID = OrderStatusConstants.SUBMITTED_STATUS, ShippedDate = null, BackorderedDate = null };

            var inventoryDataProxy = new Mock<IInventoryItemDataProxy>();
            inventoryDataProxy.Setup(p => p.GetByProduct(productID)).Returns(inventoryItem);
            inventoryDataProxy.Setup(p => p.Update(It.IsAny<InventoryItem>()))
                              .Callback<InventoryItem>((item) => inventoryItem = item);
            
            var orderItemDataProxy = new Mock<IOrderItemDataProxy>();
            orderItemDataProxy.Setup(p => p.GetByID(orderItemID)).Returns(orderItem);
            orderItemDataProxy.Setup(p => p.Ship(It.IsAny<OrderItem>())).Returns(orderItem);

            var command = new ShipOrderItemCommand(orderItemID, orderItemDataProxy.Object, inventoryDataProxy.Object, new TransactionContextStub());
            var result = command.Execute();

            orderItem = result.Value;
            orderItem.ShippedDate.Value.Date.ShouldBe(DateTime.Now.ToUniversalTime().Date);
            orderItem.OrderStatus().IsShipped.ShouldBeTrue();
            orderItem.BackorderedDate.ShouldBeNull();
            inventoryItem.QuantityOnHand.ShouldBe(0);
        }