/// <summary>
        /// Initializes a new instance of the <see cref="OrderCancelTest"/> class.
        /// </summary>
        public CancelOrderTest()
        {
            this.orderId    = 1;
            this.customerId = 1;
            this.request    = new VisitorCancelOrderRequest(this.orderId.ToString(), this.customerId.ToString(), "NopShop");
            this.result     = new VisitorCancelOrderResult();
            this.args       = new ServicePipelineArgs(this.request, this.result);

            this.client = Substitute.For <IOrdersServiceChannel>();

            var clientFactory = Substitute.For <ServiceClientFactory>();

            clientFactory.CreateClient <IOrdersServiceChannel>(Arg.Any <string>(), Arg.Any <string>()).Returns(this.client);

            this.processor = new CancelOrder {
                ClientFactory = clientFactory
            };
        }
        /// <summary>
        /// Cancels one or more items from an existing order.
        /// </summary>
        /// <param name="storefront">The storefront context.</param>
        /// <param name="visitorContext">The visitor context.</param>
        /// <param name="inputModel">The order cancellation input model.</param>
        /// <returns>The result of the operation.</returns>
        public ManagerResponse <VisitorCancelOrderResult, bool> CancelOrder([NotNull] CommerceStorefront storefront, [NotNull] VisitorContext visitorContext, CancelOrderInputModel inputModel)
        {
            Assert.ArgumentNotNull(storefront, "storefront");
            Assert.ArgumentNotNull(visitorContext, "visitorContext");
            Assert.ArgumentNotNull(inputModel, "inputModel");
            Assert.ArgumentNotNullOrEmpty(inputModel.OrderId, "inputModel.OrderId");

            var request = new VisitorCancelOrderRequest(inputModel.OrderId, visitorContext.GetCustomerId(), storefront.ShopName);

            request.OrderLineExternalIds = inputModel.OrderLineExternalIds;
            var result = this.OrderServiceProvider.VisitorCancelOrder(request);

            if (!result.Success)
            {
                Helpers.LogSystemMessages(result.SystemMessages, result);
            }

            return(new ManagerResponse <VisitorCancelOrderResult, bool>(result, result.Success));
        }
        public ManagerResponse <VisitorCancelOrderResult, bool> CancelOrder(string userId, CancelOrderInputModel inputModel)
        {
            Assert.ArgumentNotNull(inputModel, nameof(inputModel));
            Assert.ArgumentNotNullOrEmpty(inputModel.OrderId, nameof(inputModel.OrderId));

            if (StorefrontContext.Current == null)
            {
                throw new InvalidOperationException("Cannot be called without a valid storefront context.");
            }

            var request = new VisitorCancelOrderRequest(inputModel.OrderId, userId, StorefrontContext.Current.ShopName)
            {
                OrderLineExternalIds = inputModel.OrderLineExternalIds
            };
            var result = OrderServiceProvider.VisitorCancelOrder(request);

            result.WriteToSitecoreLog();

            return(new ManagerResponse <VisitorCancelOrderResult, bool>(result, result.Success));
        }