public async Task ProcessOrderAsync(Order order, string serverCookieHeader) { using (HttpClientHandler handler = new HttpClientHandler { CookieContainer = new CookieContainer() }) { using (var orderClient = new HttpClient(handler)) { orderClient.AddCurrentCultureHeader(); Uri serverUri = new Uri(Constants.ServerAddress); handler.CookieContainer.SetCookies(serverUri, serverCookieHeader); orderClient.DefaultRequestHeaders.Add("Accept", "application/json"); string requestUrl = _clientBaseUrl + order.Id; var response = await orderClient.PutAsJsonAsync<Order>(requestUrl, order); await response.EnsureSuccessWithValidationSupportAsync(); } } }
public async Task<Order> CreateOrderAsync(string userId, ShoppingCart shoppingCart, Address shippingAddress, Address billingAddress, PaymentMethod paymentMethod, ShippingMethod shippingMethod) { Order order = new Order { UserId = userId, ShoppingCart = shoppingCart, ShippingAddress = shippingAddress, BillingAddress = billingAddress, PaymentMethod = paymentMethod, ShippingMethod = shippingMethod }; order.Id = await _orderService.CreateOrderAsync(order, _accountService.ServerCookieHeader); return order; }
public void EditCheckoutData_Updates_Order() { var shippingMethods = new List<ShippingMethod>() { new ShippingMethod() { Id = 1, Cost = 0 } }; var shoppingCartItems = new List<ShoppingCartItem>() { new ShoppingCartItem() { Quantity = 1, Currency = "USD", Product = new Product() } }; var order = new Order() { ShoppingCart = new ShoppingCart(shoppingCartItems) { Currency = "USD", FullPrice = 100 }, ShippingAddress = new Address(), BillingAddress = new Address(), PaymentMethod = new PaymentMethod() { CardNumber = "1234" }, ShippingMethod = shippingMethods.First() }; var shippingMethodService = new MockShippingMethodService() { GetShippingMethodsAsyncDelegate = () => Task.FromResult<IEnumerable<ShippingMethod>>(shippingMethods) }; var flyoutService = new MockFlyoutService(); flyoutService.ShowFlyoutDelegate = (flyoutName, param, success) => { // Update CheckoutData information and call success ((PaymentMethod)param).CardNumber = "5678"; success.Invoke(); }; var orderRepository = new MockOrderRepository() { GetCurrentOrderAsyncDelegate = () => order }; var shoppingCartRepository = new MockShoppingCartRepository(); shoppingCartRepository.GetShoppingCartAsyncDelegate = () => Task.FromResult(order.ShoppingCart); var target = new CheckoutSummaryPageViewModel(new MockNavigationService(), new MockOrderService(), orderRepository, shippingMethodService, null, shoppingCartRepository, new MockAccountService(), flyoutService, new MockResourceLoader(), null); target.OnNavigatedTo(null, NavigationMode.New, null); target.SelectedCheckoutData = target.CheckoutDataViewModels[2]; target.EditCheckoutDataCommand.Execute().Wait(); // Check if order information has changed Assert.IsTrue(order.PaymentMethod.CardNumber == "5678"); Assert.IsTrue(((PaymentMethod)target.CheckoutDataViewModels[2].Context).CardNumber == "5678"); }
public void SelectCheckoutData_Opens_AppBar() { var shippingMethods = new List<ShippingMethod>() { new ShippingMethod() { Id = 1, Cost = 0 } }; var shoppingCartItems = new List<ShoppingCartItem>() { new ShoppingCartItem() { Quantity = 1, Currency = "USD", Product = new Product() } }; var order = new Order() { ShoppingCart = new ShoppingCart(shoppingCartItems) { Currency = "USD", FullPrice = 100 }, ShippingAddress = new Address(), BillingAddress = new Address(), PaymentMethod = new PaymentMethod() { CardNumber = "1234" }, ShippingMethod = shippingMethods.First() }; var shippingMethodService = new MockShippingMethodService() { GetShippingMethodsAsyncDelegate = () => Task.FromResult<IEnumerable<ShippingMethod>>(shippingMethods) }; var orderRepository = new MockOrderRepository() {GetCurrentOrderAsyncDelegate = () => order}; var shoppingCartRepository = new MockShoppingCartRepository(); shoppingCartRepository.GetShoppingCartAsyncDelegate = () => Task.FromResult(order.ShoppingCart); var target = new CheckoutSummaryPageViewModel(new MockNavigationService(), new MockOrderService(), orderRepository, shippingMethodService, null, shoppingCartRepository, new MockAccountService(), new MockFlyoutService(), new MockResourceLoader(), null); target.OnNavigatedTo(null, NavigationMode.New, null); Assert.IsFalse(target.IsBottomAppBarOpened); target.SelectedCheckoutData = target.CheckoutDataViewModels.First(); Assert.IsTrue(target.IsBottomAppBarOpened); }
public void SelectShippingMethod_Recalculates_Order() { var shippingMethods = new List<ShippingMethod>() { new ShippingMethod() { Id = 1, Cost = 0 } }; var shoppingCartItems = new List<ShoppingCartItem>() { new ShoppingCartItem() { Quantity = 1, Currency = "USD", Product = new Product() } }; var order = new Order() { ShoppingCart = new ShoppingCart(shoppingCartItems) { Currency = "USD", TotalPrice = 100 }, ShippingAddress = new Address(), BillingAddress = new Address(), PaymentMethod = new PaymentMethod() { CardNumber = "1234" }, ShippingMethod = shippingMethods.First() }; var shippingMethodService = new MockShippingMethodService() { GetShippingMethodsAsyncDelegate = () => Task.FromResult<IEnumerable<ShippingMethod>>(shippingMethods) }; var orderRepository = new MockOrderRepository() { GetCurrentOrderAsyncDelegate = () => order }; var shoppingCartRepository = new MockShoppingCartRepository(); shoppingCartRepository.GetShoppingCartAsyncDelegate = () => Task.FromResult(order.ShoppingCart); var target = new CheckoutSummaryPageViewModel(new MockNavigationService(), new MockOrderService(), orderRepository, shippingMethodService, null, shoppingCartRepository, new MockAccountService(), new MockFlyoutService(), new MockResourceLoader(), null); target.OnNavigatedTo(null, NavigationMode.New, null); Assert.AreEqual("$0.00", target.ShippingCost); Assert.AreEqual("$100.00", target.OrderSubtotal); Assert.AreEqual("$100.00", target.GrandTotal); target.SelectedShippingMethod = new ShippingMethod() { Cost = 10 }; Assert.AreEqual("$10.00", target.ShippingCost); Assert.AreEqual("$100.00", target.OrderSubtotal); Assert.AreEqual("$110.00", target.GrandTotal); }
public async Task CreateBasicOrderAsync(string userId, ShoppingCart shoppingCart, Address shippingAddress, Address billingAddress, PaymentMethod paymentMethod) { var basicShippingMethod = await _shippingMethodService.GetBasicShippingMethodAsync(); _currentOrder = await CreateOrderAsync(userId, shoppingCart, shippingAddress, billingAddress, paymentMethod, basicShippingMethod); _suspensionManagerState.SessionState[OrderKey] = _currentOrder; }
public override async void OnNavigatedTo(object navigationParameter, NavigationMode navigationMode, Dictionary<string, object> viewState) { //Get latest shopping cart var shoppingCart = await _shoppingCartRepository.GetShoppingCartAsync(); _order = _orderRepository.GetCurrentOrder(); _order.ShoppingCart = shoppingCart; // Populate the ShoppingCart items var shoppingCartItemVMs = _order.ShoppingCart.ShoppingCartItems.Select(item => new ShoppingCartItemViewModel(item)); ShoppingCartItemViewModels = new ReadOnlyCollection<ShoppingCartItemViewModel>(shoppingCartItemVMs.ToList()); // Populate the ShippingMethods and set the selected one var shippingMethods = await _shippingMethodService.GetShippingMethodsAsync(); ShippingMethods = new ReadOnlyCollection<ShippingMethod>(shippingMethods.ToList()); SelectedShippingMethod = _order.ShippingMethod != null ? ShippingMethods.FirstOrDefault(c => c.Id == _order.ShippingMethod.Id) : null; // Populate the CheckoutData items (Addresses & payment information) CheckoutDataViewModels = new ObservableCollection<CheckoutDataViewModel> { CreateCheckoutData(_order.ShippingAddress, Constants.ShippingAddress), CreateCheckoutData(_order.BillingAddress, Constants.BillingAddress), CreateCheckoutData(_order.PaymentMethod) }; if (navigationMode == NavigationMode.Refresh) { // Restore the selected CheckoutData manually string selectedCheckoutData = RetrieveEntityStateValue<string>("selectedCheckoutData", viewState); if (!string.IsNullOrWhiteSpace(selectedCheckoutData)) { SelectedCheckoutData = CheckoutDataViewModels.FirstOrDefault(c => c.EntityId == selectedCheckoutData); } } base.OnNavigatedTo(navigationParameter, navigationMode, viewState); }
public Task ProcessOrderAsync(Order order, string serverCookieHeader) { return ProcessOrderAsyncDelegate(order, serverCookieHeader); }
public Task<Order> UpdateOrderAsync(Order order, string serverCookieHeader) { return UpdateOrderAsyncDelegate(order, serverCookieHeader); }
public Task<int> CreateOrderAsync(Order order, string serverCookieHeader) { return CreateOrderAsyncDelegate(order, serverCookieHeader); }