Beispiel #1
0
        public async Task <IActionResult> Checkout(BasketCheckoutResponse basketCheckout)
        {
            var basketContent = new StringContent(JsonConvert.SerializeObject(basketCheckout), System.Text.Encoding.UTF8, "application/json");
            var message       = new HttpRequestBuilder(_settings.BaseAddress)
                                .SetPath($"{_settings.BasketPath}/Checkout")
                                .Content(basketContent)
                                .HttpMethod(HttpMethod.Post)
                                .GetHttpMessage();

            return(await base.SendRequest <IActionResult>(message));
        }
Beispiel #2
0
        public void SetUp()
        {
            _orderRepository = new Mock <IOrderRepository>();
            _orderRepository.Setup(x => x.SaveOrder(It.IsAny <SaveOrderRequest>())).Returns(() => new SaveOrderResponse
            {
                HasError = true,
                Error    = new Error
                {
                    Code = ErrorCodes.DatabaseError
                }
            });

            _userSessionService = new Mock <IUserSessionService>();
            _userSessionService.Setup(x => x.IsLoggedIn(It.IsAny <string>())).Returns(() => true);
            _userSessionService.Setup(x => x.GetBasketForUser(It.IsAny <string>())).Returns(() => new Data.Services.UserSession.Basket
            {
                Items = new List <BasketItem>
                {
                    new BasketItem
                    {
                        Pizza = new PizzaRecord {
                            Id = 2
                        },
                        Size = new SizeRecord {
                            Id = 3
                        },
                        ExtraToppings = new List <ToppingRecord> {
                            new ToppingRecord {
                                Id = 4
                            }
                        },
                        Total = Money.From(1200)
                    }
                },
                Total = Money.From(1200)
            });
            _userSessionService.Setup(x => x.GetUserByUserToken(It.IsAny <string>())).Returns(() => 1);

            _voucherService = new Mock <IVoucherService>();
            _voucherService.Setup(x => x.Verify(It.IsAny <Data.Services.UserSession.Basket>(), It.IsAny <List <DeliveryType> >(),
                                                It.IsAny <string>())).Returns(() => new VerifyVoucherResponse
            {
                Total = Money.From(1100)
            });

            var subject = new BasketService(_orderRepository.Object, _userSessionService.Object, _voucherService.Object);

            _result = subject.Checkout(DeliveryType.Collection, "SOME_VOUCHER", "SOME_USER_ID",
                                       OrderStatus.Complete);
        }
Beispiel #3
0
        public BasketCheckoutResponse Checkout(DeliveryType delivery, string voucher, string userId, OrderStatus orderStatus)
        {
            var response = new BasketCheckoutResponse();

            if (!_userSessionService.IsLoggedIn(userId))
            {
                response.AddError(new Error
                {
                    Code        = ErrorCodes.UserNotLoggedIn,
                    UserMessage = "You have to be logged in to complete your order"
                });
                return(response);
            }

            if (delivery == DeliveryType.Unknown)
            {
                response.AddError(new Error
                {
                    Code        = ErrorCodes.DeliveryTypeUnknown,
                    UserMessage = "Delivery type not specified."
                });
                return(response);
            }

            if (orderStatus == OrderStatus.Unknown)
            {
                response.AddError(new Error
                {
                    Code        = ErrorCodes.OrderStatusUnkown,
                    UserMessage = "Order status not specified."
                });
                return(response);
            }

            var userBasket = _userSessionService.GetBasketForUser(userId);

            if (!voucher.IsEmpty())
            {
                var verifyVoucherResponse = _voucherService.Verify(userBasket, new List <DeliveryType> {
                    delivery
                }, voucher);

                if (!verifyVoucherResponse.HasError)
                {
                    userBasket.Total = verifyVoucherResponse.Total;
                }
            }

            var orderRequest = new SaveOrderRequest
            {
                UserId       = _userSessionService.GetUserByUserToken(userId),
                DeliveryType = delivery.ToString(),
                Voucher      = voucher,
                GrandTotal   = userBasket.Total.InPence,
                Status       = orderStatus.ToString(),
                Orders       = userBasket.Items.ConvertAll(x => new Order
                {
                    PizzaId         = x.Pizza.Id,
                    SizeId          = x.Size.Id,
                    ExtraToppingIds = x.ExtraToppings.ConvertAll(y => y.Id),
                    SubTotal        = x.Total.InPence
                })
            };
            var saveOrderResponse = _orderRepository.SaveOrder(orderRequest);

            if (saveOrderResponse.HasError)
            {
                response.AddError(saveOrderResponse.Error);
            }

            _userSessionService.ClearBasketForUser(userId);

            return(response);
        }