예제 #1
0
        public virtual async Task <CompleteCheckoutViewModel> CompleteCheckoutAsync(CompleteCheckoutParam param)
        {
            if (param == null)
            {
                throw new ArgumentNullException(nameof(param));
            }
            if (param.CultureInfo == null)
            {
                throw new ArgumentException(GetMessageOfNull(nameof(param.CultureInfo)), nameof(param));
            }
            if (string.IsNullOrWhiteSpace(param.CartName))
            {
                throw new ArgumentException(GetMessageOfNullWhiteSpace(nameof(param.CartName)), nameof(param));
            }
            if (string.IsNullOrWhiteSpace(param.Scope))
            {
                throw new ArgumentException(GetMessageOfNullWhiteSpace(nameof(param.Scope)), nameof(param));
            }
            if (param.CustomerId == Guid.Empty)
            {
                throw new ArgumentException(GetMessageOfEmpty(nameof(param.CustomerId)), nameof(param));
            }

            var order = await CartRepository.CompleteCheckoutAsync(param).ConfigureAwait(false);

            return(await MapOrderToCompleteCheckoutViewModel(order, param).ConfigureAwait(false));
        }
        public virtual async Task <CompleteCheckoutViewModel> CompleteCheckoutAsync(CompleteCheckoutParam param)
        {
            if (param == null)
            {
                throw new ArgumentNullException(nameof(param), "param");
            }
            if (param.CultureInfo == null)
            {
                throw new ArgumentException(ArgumentNullMessageFormatter.FormatErrorMessage("CultureInfo"), nameof(param));
            }
            if (string.IsNullOrWhiteSpace(param.CartName))
            {
                throw new ArgumentException(ArgumentNullMessageFormatter.FormatErrorMessage("CartName"), nameof(param));
            }
            if (string.IsNullOrWhiteSpace(param.Scope))
            {
                throw new ArgumentException(ArgumentNullMessageFormatter.FormatErrorMessage("Scope"), nameof(param));
            }
            if (param.CustomerId == Guid.Empty)
            {
                throw new ArgumentException(ArgumentNullMessageFormatter.FormatErrorMessage("CustomerId"), nameof(param));
            }

            var order = await CartRepository.CompleteCheckoutAsync(param).ConfigureAwait(false);

            return(MapOrderToCompleteCheckoutViewModel(order, param.CultureInfo));
        }
        public void WHEN_param_is_null_SHOULD_throw_ArgumentNullException()
        {
            //Arrange
            CompleteCheckoutParam p = null;
            var sut = Container.CreateInstance <CartRepository>();

            //Act
            var ex = Assert.ThrowsAsync <ArgumentNullException>(() => sut.CompleteCheckoutAsync(p));

            //Assert
            ex.Message.Should().ContainEquivalentOf("param");
        }
예제 #4
0
        public void WHEN_CartName_Is_NullOrWhitespace_SHOULD_Throw_ArgumentException(string cartName)
        {
            var service = _container.CreateInstance <CheckoutService>();
            var param   = new CompleteCheckoutParam
            {
                Scope       = GetRandom.String(10),
                CultureInfo = TestingExtensions.GetRandomCulture(),
                CustomerId  = Guid.Empty,
                CartName    = cartName,
            };

            // Act
            var exception = Assert.ThrowsAsync <ArgumentException>(() => service.CompleteCheckoutAsync(param));

            //Assert
            exception.ParamName.Should().BeSameAs("param");
            exception.Message.Should().Contain("CartName");
        }
예제 #5
0
        public void WHEN_CultureInfo_Is_Null_SHOULD_Throw_ArgumentException()
        {
            var service = _container.CreateInstance <CheckoutService>();
            var param   = new CompleteCheckoutParam
            {
                Scope       = GetRandom.String(10),
                CultureInfo = null,
                CustomerId  = GetRandom.Guid(),
                CartName    = GetRandom.String(32),
            };

            // Act
            var exception = Assert.ThrowsAsync <ArgumentException>(() => service.CompleteCheckoutAsync(param));

            //Assert
            exception.ParamName.Should().BeSameAs("param");
            exception.Message.Should().Contain("CultureInfo");
        }
예제 #6
0
        public void WHEN_CartName_Is_NullOrWhitespace_SHOULD_Throw_ArgumentException(string cartName)
        {
            var service = _container.CreateInstance <CheckoutService>();
            var param   = new CompleteCheckoutParam
            {
                Scope       = GetRandom.String(10),
                CultureInfo = TestingExtensions.GetRandomCulture(),
                CustomerId  = Guid.Empty,
                CartName    = cartName,
            };

            // Act
            Expression <Func <Task <CompleteCheckoutViewModel> > > expression = () => service.CompleteCheckoutAsync(param);
            var exception = Assert.ThrowsAsync <ArgumentException>(() => expression.Compile().Invoke());

            //Assert
            exception.ParamName.Should().BeEquivalentTo(GetParamsInfo(expression)[0].Name);
            exception.Message.Should().StartWith(GetMessageOfNullWhiteSpace(nameof(param.CartName)));
        }
        public void WHEN_CartName_is_null_or_whitespace_SHOULD_throw_ArgumentException(string cartName)
        {
            //Arrange
            var p = new CompleteCheckoutParam()
            {
                CartName    = cartName,
                CultureInfo = CultureInfo.CurrentCulture,
                CustomerId  = Guid.Empty,
                Scope       = GetRandom.String(10),
            };

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

            //Act
            var ex = Assert.ThrowsAsync <ArgumentException>(() => sut.CompleteCheckoutAsync(p));

            //Assert
            ex.ParamName.Should().ContainEquivalentOf("param");
            ex.Message.Should().Contain("CartName");
        }
        public void WHEN_CultureInfo_is_null_SHOULD_throw_ArgumentNullException()
        {
            //Arrange
            var p = new CompleteCheckoutParam()
            {
                CartName    = GetRandom.String(10),
                CultureInfo = null,
                CustomerId  = GetRandom.Guid(),
                Scope       = GetRandom.String(10),
            };

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

            //Act
            var ex = Assert.ThrowsAsync <ArgumentException>(() => sut.CompleteCheckoutAsync(p));

            //Assert
            ex.ParamName.Should().ContainEquivalentOf("param");
            ex.Message.Should().ContainEquivalentOf("CultureInfo");
        }
        public Task <Order> CompleteCheckoutAsync(CompleteCheckoutParam param)
        {
            var order = new Order
            {
                Cart           = new Overture.ServiceModel.Orders.Cart(),
                CustomerId     = param.CustomerId.ToString(),
                ScopeId        = param.Scope,
                Id             = GetRandom.Guid().ToString(),
                CustomerName   = GetRandom.String(25),
                OrderNumber    = GetRandom.String(5),
                Created        = GetRandom.DateTime(),
                CreatedBy      = GetRandom.String(25),
                ItemCount      = GetRandom.PositiveInt(),
                LastModified   = GetRandom.DateTime(),
                LastModifiedBy = GetRandom.String(25),
                OrderStatus    = GetRandom.String(10),
                Source         = GetRandom.String(10)
            };

            return(Task.FromResult(order));
        }
예제 #10
0
        public virtual Task <Overture.ServiceModel.Orders.Order> CompleteCheckoutAsync(CompleteCheckoutParam param)
        {
            if (param == null)
            {
                throw new ArgumentNullException("param", "param");
            }
            if (string.IsNullOrWhiteSpace(param.CartName))
            {
                throw new ArgumentException(ArgumentNullMessageFormatter.FormatErrorMessage("param.CartName"), "param");
            }
            if (param.CultureInfo == null)
            {
                throw new ArgumentException(ArgumentNullMessageFormatter.FormatErrorMessage("CultureInfo"), "param");
            }
            if (param.CustomerId == Guid.Empty)
            {
                throw new ArgumentException(ArgumentNullMessageFormatter.FormatErrorMessage("CustomerId"), "param");
            }
            if (string.IsNullOrWhiteSpace(param.Scope))
            {
                throw new ArgumentException(ArgumentNullMessageFormatter.FormatErrorMessage("Scope"), "param");
            }

            var request = new CompleteCheckoutRequest
            {
                CartName    = param.CartName,
                CultureName = param.CultureInfo.Name,
                CustomerId  = param.CustomerId,
                ScopeId     = param.Scope
            };

            return(OvertureClient.SendAsync(request));
        }
예제 #11
0
        public virtual Task <Overture.ServiceModel.Orders.Order> CompleteCheckoutAsync(CompleteCheckoutParam param)
        {
            if (param == null)
            {
                throw new ArgumentNullException(nameof(param));
            }
            if (string.IsNullOrWhiteSpace(param.CartName))
            {
                throw new ArgumentException(GetMessageOfNullWhiteSpace(nameof(param.CartName)), nameof(param));
            }
            if (param.CultureInfo == null)
            {
                throw new ArgumentException(GetMessageOfNull(nameof(param.CultureInfo)), nameof(param));
            }
            if (param.CustomerId == Guid.Empty)
            {
                throw new ArgumentException(GetMessageOfEmpty(nameof(param.CustomerId)), nameof(param));
            }
            if (string.IsNullOrWhiteSpace(param.Scope))
            {
                throw new ArgumentException(GetMessageOfNullWhiteSpace(nameof(param.Scope)), nameof(param));
            }

            var request = new CompleteCheckoutRequest
            {
                CartName    = param.CartName,
                CultureName = param.CultureInfo.Name,
                CustomerId  = param.CustomerId,
                ScopeId     = param.Scope
            };

            return(OvertureClient.SendAsync(request));
        }
예제 #12
0
        protected virtual async Task <CompleteCheckoutViewModel> MapOrderToCompleteCheckoutViewModel(Overture.ServiceModel.Orders.Order order,
                                                                                                     CompleteCheckoutParam param)
        {
            if (order == null)
            {
                return(null);
            }

            var orderStatuses = await LookupService.GetLookupDisplayNamesAsync(new GetLookupDisplayNamesParam
            {
                CultureInfo = param.CultureInfo,
                LookupType  = LookupType.Order,
                LookupName  = "OrderStatus",
            }).ConfigureAwait(false);

            var productImageInfo = new ProductImageInfo
            {
                ImageUrls = await ImageService.GetImageUrlsAsync(order.Cart.GetLineItems()).ConfigureAwait(false)
            };

            var getVmOrderParam = new CreateOrderDetailViewModelParam {
                Order              = order,
                CultureInfo        = param.CultureInfo,
                OrderStatuses      = orderStatuses,
                OrderDetailBaseUrl = OrderUrlProvider.GetOrderDetailsBaseUrl(param.CultureInfo),
                BaseUrl            = param.BaseUrl,
                ProductImageInfo   = productImageInfo,
            };

            var orderViewModel = OrderDetailsViewModelFactory.CreateLightViewModel(getVmOrderParam);

            var completeCheckoutViewModel = new CompleteCheckoutViewModel
            {
                OrderNumber       = order.OrderNumber,
                Order             = orderViewModel,
                CustomerEmail     = order.Cart.Customer.Email,
                CustomerFirstName = order.Cart.Customer.FirstName,
                CustomerLastName  = order.Cart.Customer.LastName,
                Affiliation       = order.Cart.OrderLocation?.Name,
                Revenu            = order.Cart.Total,
                Tax             = order.Cart.TaxTotal,
                Shipping        = order.Cart.FulfillmentCost,
                ShippingOptions = order.Cart.Shipments?.FirstOrDefault()?.FulfillmentMethod.FulfillmentMethodType.ToString().ToLowerInvariant(),
                BillingCurrency = order.Cart.BillingCurrency,
                Coupons         = MapCoupons(order, param.CultureInfo),
                LineItems       = orderViewModel?.Shipments.FirstOrDefault()?.LineItems
            };

            return(completeCheckoutViewModel);
        }