public void Is_valid_when_order_has_no_associated_order_items_that_have_been_shipped()
        {
            var orderID = 1;
            var orderItemDataProxy = new Mock<IOrderItemDataProxy>();
            orderItemDataProxy.Setup(p => p.GetByOrder(orderID))
                              .Returns((new[]
                                      {
                                         new OrderItem() { OrderStatusID = OrderStatusConstants.BACK_ORDERED_STATE },
                                         new OrderItem() { OrderStatusID = OrderStatusConstants.PENDING_STATUS }
                                      }).AsEnumerable<OrderItem>());
                                                                    
            var service = new OrderItemService(orderItemDataProxy.Object, 
                                               Mock.Of<IProductDataProxy>(), 
                                               Mock.Of<IInventoryItemDataProxy>(), 
                                               Mock.Of<ITransactionContext>());

            var rule = new ValidOrderStatusForUpdateRule(orderID, service);
            rule.Validate().IsValid.ShouldBe(true);
            rule.ErrorMessage.ShouldBe(null);
        }
        public async Task Is_invalid_when_order_has_any_associated_order_items_that_have_been_shipped_async()
        {
            var orderID = 1;
            var orderItemDataProxy = new Mock<IOrderItemDataProxy>();
            orderItemDataProxy.Setup(p => p.GetByOrderAsync(orderID))
                              .Returns(Task.FromResult((new[]
                                      {
                                         new OrderItem() { OrderStatusID = OrderStatusConstants.BACK_ORDERED_STATE },
                                         new OrderItem() { OrderStatusID = OrderStatusConstants.SHIPPED_STATUS }
                                      }).AsEnumerable<OrderItem>()));
                                                                    
            var service = new OrderItemService(orderItemDataProxy.Object, 
                                               Mock.Of<IProductDataProxy>(), 
                                               Mock.Of<IInventoryItemDataProxy>(), 
                                               Mock.Of<ITransactionContext>());

            var rule = new ValidOrderStatusForUpdateRule(orderID, service);
            await rule.ValidateAsync();
            rule.IsValid.ShouldBe(false);
            rule.ErrorMessage.ShouldNotBe(null);
        }