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