public void AddCheckoutData_Calls_Proper_Flyout()
        {
            string requestedFlyoutName = string.Empty;
            var MockFlyoutService = new MockFlyoutService()
            {
                ShowFlyoutDelegate = (flyoutName, action, b) =>
                {
                    Assert.IsTrue(flyoutName == requestedFlyoutName);
                }
            };

            var target = new CheckoutSummaryPageViewModel(new MockNavigationService(), null, null, null, null, null, null, MockFlyoutService, null, null);

            requestedFlyoutName = "ShippingAddress";
            target.SelectedCheckoutData = new CheckoutDataViewModel(null, null, null, null, null, null, Constants.ShippingAddress, null);
            target.AddCheckoutDataCommand.Execute().Wait();

            requestedFlyoutName = "BillingAddress";
            target.SelectedCheckoutData = new CheckoutDataViewModel(null, null, null, null, null, null, Constants.BillingAddress, null);
            target.AddCheckoutDataCommand.Execute().Wait();

            requestedFlyoutName = "PaymentMethod";
            target.SelectedCheckoutData = new CheckoutDataViewModel(null, null, null, null, null, null, Constants.PaymentMethod, null);
            target.AddCheckoutDataCommand.Execute().Wait();
        }
        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 async Task ExecuteGoNextCommand_DisplaysSignInFlyout_IfViewModelsAreValidAndUserNotLoggedIn()
        {
            bool signInFlyoutDisplayed = false;
            var shippingAddressPageViewModel = new MockShippingAddressPageViewModel()
                {
                    ValidateFormDelegate = () => true
                };
            var billingAddressPageViewModel = new MockBillingAddressPageViewModel()
                {
                    ValidateFormDelegate = () => true
                };
            var paymentMethodPageViewModel = new MockPaymentMethodPageViewModel()
                {
                    ValidateFormDelegate = () => true
                };
            var accountService = new MockAccountService()
                {
                    GetSignedInUserAsyncDelegate = () => Task.FromResult<UserInfo>(null)
                };
            var flyoutService = new MockFlyoutService()
                {
                    ShowFlyoutDelegate = (a, b, c) => signInFlyoutDisplayed = true
                };

            var target = new CheckoutHubPageViewModel(new MockNavigationService(), accountService, null, null, shippingAddressPageViewModel,
                                                      billingAddressPageViewModel, paymentMethodPageViewModel, flyoutService, null, null);
            await target.GoNextCommand.Execute();

            Assert.IsTrue(signInFlyoutDisplayed);
        }
        public async Task Submit_WhenAnonymous_ShowsSignInFlyout()
        {
            bool showFlyoutCalled = false;
            var accountService = new MockAccountService()
                {
                    GetSignedInUserAsyncDelegate = () => Task.FromResult<UserInfo>(null)
                };
            var flyoutService = new MockFlyoutService()
        {
                    ShowFlyoutDelegate = (s, o, arg3) =>
            {
                showFlyoutCalled = true;
                Assert.AreEqual("SignIn", s);
                        }
            };

            var target = new CheckoutSummaryPageViewModel(new MockNavigationService(), null, null, null, null, null, accountService, flyoutService, null, null);
            await target.SubmitCommand.Execute();

            Assert.IsTrue(showFlyoutCalled);
        }
        public async Task Checkout_WhenAnonymous_ShowsSignInFlyout()
        {
            var showFlyoutCalled = false;
            var accountService = new MockAccountService
                {
                    GetSignedInUserAsyncDelegate = () => Task.FromResult<UserInfo>(null)
                };
            var flyoutService = new MockFlyoutService
                {
                    ShowFlyoutDelegate = (s, o, arg3) =>
                        {
                            showFlyoutCalled = true;
                            Assert.AreEqual("SignIn", s);
                        }
                };
            var checkoutDataRepository = new MockCheckoutDataRepository()
                {
                    GetDefaultShippingAddressDelegate = () => null,
                    GetDefaultBillingAddresDelegate =  () => null,
                    GetDefaultPaymentMethodDelegate = () => Task.FromResult<PaymentMethod>(null)
                };
            var eventAggregator = new MockEventAggregator
                {
                    GetEventDelegate = type => new MockShoppingCartUpdatedEvent()
                };
            var target = new ShoppingCartPageViewModel(null, new MockNavigationService(), accountService, flyoutService, null, null, checkoutDataRepository, null, eventAggregator);

            await target.CheckoutCommand.Execute();

            Assert.IsTrue(showFlyoutCalled);
        }