コード例 #1
0
        /// <summary>
        /// Estimates the shipping method. Does not save the cart.
        /// </summary>
        /// <param name="param"></param>
        /// <returns></returns>
        public virtual async Task <ShippingMethodViewModel> EstimateShippingAsync(EstimateShippingParam param)
        {
            if (param == null)
            {
                throw new ArgumentNullException("param");
            }
            if (param.CultureInfo == null)
            {
                throw new ArgumentException(ArgumentNullMessageFormatter.FormatErrorMessage("CultureInfo"), "param");
            }
            if (param.Cart == null)
            {
                throw new ArgumentException(ArgumentNullMessageFormatter.FormatErrorMessage("Cart"), "param");
            }

            var shippingMethods = await GetShippingMethodsForShippingEstimationAsync(param);

            var selectedMethod = GetCheapestShippingMethodViewModel(shippingMethods);
            var firstShipment  = GetShipment(param.Cart);

            if (param.ForceUpdate || firstShipment.FulfillmentMethod == null)
            {
                firstShipment.FulfillmentMethod = selectedMethod;
            }

            var vm = CartViewModelFactory.GetShippingMethodViewModel(firstShipment.FulfillmentMethod, param.CultureInfo);

            return(vm);
        }
コード例 #2
0
        public void WHEN_param_is_null_SHOULD_Throw_ArgumentNullException()
        {
            //Arrange
            EstimateShippingParam param = null;

            var sut = Container.CreateInstance <ShippingMethodViewService>();

            //Act
            var exception = Assert.ThrowsAsync <ArgumentNullException>(() => sut.EstimateShippingAsync(param));

            //Assert
            exception.ParamName.Should().BeEquivalentTo("param");
        }
コード例 #3
0
        public void WHEN_param_CultureInfo_is_null_SHOULD_Throw_ArgumentException()
        {
            //Arrange
            var param = new EstimateShippingParam
            {
                CultureInfo = null,
                Cart        = new Overture.ServiceModel.Orders.Cart(),
                ForceUpdate = GetRandom.Boolean()
            };

            var sut = Container.CreateInstance <ShippingMethodViewService>();

            //Act
            var exception = Assert.ThrowsAsync <ArgumentException>(() => sut.EstimateShippingAsync(param));

            //Assert
            exception.ParamName.Should().BeEquivalentTo("param");
            exception.Message.Should().ContainEquivalentOf("CultureInfo");
        }
コード例 #4
0
        protected virtual async Task <List <FulfillmentMethod> > GetShippingMethodsForShippingEstimationAsync(EstimateShippingParam param)
        {
            var shippingMethods = await GetFulfillmentMethods(new GetShippingMethodsParam
            {
                Scope       = param.Cart.ScopeId,
                CultureInfo = param.CultureInfo,
                CustomerId  = param.Cart.CustomerId,
                CartName    = param.Cart.Name
            }).ConfigureAwait(false);

            if (shippingMethods == null || !shippingMethods.Any())
            {
                throw new InvalidDataException("No shipping method was defined.");
            }

            return(shippingMethods);
        }