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