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