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); }