public async Task WHEN_valid_request_SHOULD_succeed()
        {
            //Arrange
            var email = GetRandom.String(32);

            var orderHistoryViewModelService = _container.CreateInstance <OrderHistoryViewService>();

            _container.GetMock <IOrderRepository>()
            .Setup(r => r.GetOrderAsync(It.IsAny <GetOrderForGuestParam>()))
            .ReturnsAsync(new Overture.ServiceModel.Orders.Order
            {
                Cart = new Overture.ServiceModel.Orders.Cart
                {
                    Customer = new CustomerSummary
                    {
                        Email = email
                    }
                },
                ScopeId    = "Global",
                CustomerId = Guid.NewGuid().ToString()
            });

            //Act
            var param = new GetOrderForGuestParam
            {
                BaseUrl     = GetRandom.String(32),
                CountryCode = GetRandom.String(32),
                CultureInfo = new CultureInfo("en-US"),
                Scope       = GetRandom.String(32),
                Email       = email,
                OrderNumber = GetRandom.String(32),
            };
            var result =
                await orderHistoryViewModelService.GetOrderDetailViewModelForGuestAsync(param).ConfigureAwait(false);

            //Assert
            result.Should().NotBeNull();
        }
        /// <summary>
        /// Gets an OrderDetailViewModel for a guest customer, containing all information about an order and his shipments.
        /// </summary>
        /// <param name="param"></param>
        /// <returns></returns>
        public virtual async Task <OrderDetailViewModel> GetOrderDetailViewModelForGuestAsync(GetOrderForGuestParam param)
        {
            if (param == null)
            {
                throw new ArgumentNullException("param");
            }
            if (param.CultureInfo == null)
            {
                throw new ArgumentException("param.CultureInfo");
            }
            if (string.IsNullOrWhiteSpace(param.Scope))
            {
                throw new ArgumentException("param.Scope");
            }
            if (string.IsNullOrWhiteSpace(param.OrderNumber))
            {
                throw new ArgumentException("param.OrderNumber");
            }
            if (string.IsNullOrWhiteSpace(param.CountryCode))
            {
                throw new ArgumentException("param.CountryCode");
            }
            if (string.IsNullOrWhiteSpace(param.BaseUrl))
            {
                throw new ArgumentException("param.BaseUrl");
            }
            if (string.IsNullOrWhiteSpace(param.Email))
            {
                throw new ArgumentException("param.Email");
            }

            var order = await OrderRepository.GetOrderAsync(param).ConfigureAwait(false);

            if (order == null || order.Cart.Customer.Email != param.Email)
            {
                return(null);
            }

            var viewModel = await BuildOrderDetailViewModelAsync(order, param).ConfigureAwait(false);

            return(viewModel);
        }