public void RemoveCmdShouldAddChangesResultYes()
        {
            var items = new List <ProductModel>
            {
                new ProductModel {
                    Id = Guid.NewGuid()
                }
            };

            MessagePresenterMock
            .Setup(box => box.ShowAsync(It.IsAny <string>(), It.IsAny <string>(), MessageButton.YesNo, MessageImage.Question,
                                        It.IsAny <MessageResult>(), It.IsAny <IDataContext>()))
            .Returns(Task.FromResult(MessageResult.Yes));
            InitializeProductRepository(items);
            var viewModel = GetViewModel <ProductWorkspaceViewModel>();

            viewModel.GridViewModel.SelectedItem = items[0];

            viewModel.RemoveProductCommand.Execute(null);
            Assert.IsTrue(viewModel.HasChanges);
            Assert.AreEqual(viewModel.GridViewModel.OriginalItemsSource.Count, 0);
            MessagePresenterMock
            .Verify(model => model.ShowAsync(It.IsAny <string>(), It.IsAny <string>(), MessageButton.YesNo, MessageImage.Question,
                                             It.IsAny <MessageResult>(), It.IsAny <IDataContext>()), Times.Once);
        }
        public void VmShouldNotBeClosedHasChangesResultCancel()
        {
            RepositoryMock
            .Setup(repository => repository.SaveAsync(It.IsAny <IEnumerable <IEntityStateEntry> >(), It.IsAny <CancellationToken>()))
            .Returns(() => Empty.TrueTask);
            MessagePresenterMock
            .Setup(box => box.ShowAsync(It.IsAny <string>(), It.IsAny <string>(), MessageButton.YesNoCancel,
                                        MessageImage.Question, It.IsAny <MessageResult>(), It.IsAny <IDataContext>()))
            .Returns(Task.FromResult(MessageResult.Cancel));
            SetupEditableWrapper(true);
            InitializeProductRepository();

            var viewModel = GetViewModel <ProductWorkspaceViewModel>();

            viewModel.AddProductCommand.Execute(null);
            Assert.IsTrue(viewModel.HasChanges);
            Assert.IsFalse(viewModel.CloseAsync(null).Result);

            MessagePresenterMock
            .Verify(model => model.ShowAsync(It.IsAny <string>(), It.IsAny <string>(), MessageButton.YesNoCancel,
                                             MessageImage.Question, It.IsAny <MessageResult>(), It.IsAny <IDataContext>()), Times.Once);
            RepositoryMock
            .Verify(repository => repository.SaveAsync(It.IsAny <IEnumerable <IEntityStateEntry> >(), It.IsAny <CancellationToken>()),
                    Times.Never);
        }
        public void VmShouldSaveAndRestoreStateHasChangesTrue()
        {
            var models = new List <OrderModel> {
                new OrderModel()
            };

            InitializeRepository(models);
            var viewModel = GetViewModel <OrderWorkspaceViewModel>();

            Assert.IsTrue(viewModel.GridViewModel.OriginalItemsSource.SequenceEqual(models));
            RepositoryMock.Verify(repository => repository.GetOrdersAsync(It.IsAny <CancellationToken>()), Times.Once);

            RepositoryMock
            .Setup(repository => repository.GetProductsByOrderAsync(models[0].Id, It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult <IList <OrderProductModel> >(Empty.Array <OrderProductModel>()));
            MessagePresenterMock
            .Setup(
                box =>
                box.ShowAsync(It.IsAny <string>(), It.IsAny <string>(), MessageButton.YesNo, MessageImage.Question,
                              It.IsAny <MessageResult>(), It.IsAny <IDataContext>()))
            .Returns(Task.FromResult(MessageResult.Yes));
            viewModel.GridViewModel.SelectedItem = models[0];

            viewModel.RemoveOrderCommand.Execute(null);
            Assert.IsTrue(viewModel.HasChanges);
            Assert.AreEqual(viewModel.GridViewModel.OriginalItemsSource.Count, 0);

            var state = new DataContext();

            viewModel.SaveState(state);
            state = UpdateState(state);

            RepositoryMock.ResetCalls();
            viewModel = GetViewModel <OrderWorkspaceViewModel>();
            viewModel.LoadState(state);

            Assert.IsTrue(viewModel.HasChanges);
            RepositoryMock.Verify(repository => repository.GetOrdersAsync(It.IsAny <CancellationToken>()), Times.Once);
            Assert.AreEqual(viewModel.GridViewModel.OriginalItemsSource.Count, 0);
        }