Exemple #1
0
    public void BookListViewModelBooksTest()
    {
        var books = new List <Book>()
        {
            new() { Title = "The Fellowship of the Ring" },
            new() { Title = "The Two Towers" }
        };
        var bookListView      = new MockBookListView();
        var bookDataModels    = new SynchronizingCollection <BookDataModel, Book>(books, b => new BookDataModel(b, dummyCommand));
        var bookListViewModel = new BookListViewModel(bookListView)
        {
            Books = bookDataModels
        };

        Assert.AreEqual(bookDataModels, bookListViewModel.Books);
        Assert.IsNull(bookListViewModel.SelectedBook);
        Assert.IsFalse(bookListViewModel.SelectedBooks.Any());

        // Select the first book
        AssertHelper.PropertyChangedEvent(bookListViewModel, x => x.SelectedBook, () => bookListViewModel.SelectedBook = bookDataModels[0]);
        Assert.AreEqual(books[0], bookListViewModel.SelectedBook?.Book);

        bookListViewModel.AddSelectedBook(bookDataModels[0]);
        AssertHelper.SequenceEqual(new[] { bookDataModels[0] }, bookListViewModel.SelectedBooks);

        // Select both books
        bookListViewModel.AddSelectedBook(bookDataModels[^ 1]);
Exemple #2
0
        public void BookListViewModelFilterTest()
        {
            var books = new ObservableCollection <Book>()
            {
                new Book()
                {
                    Title = "The Fellowship of the Ring", Author = "J.R.R. Tolkien"
                },
                new Book()
                {
                    Title = "The Two Towers", Author = "J.R.R. Tolkien"
                }
            };
            var bookListView      = new MockBookListView();
            var bookDataModels    = new SynchronizingCollection <BookDataModel, Book>(books, b => new BookDataModel(b, dummyCommand));
            var bookListViewModel = new BookListViewModel(bookListView)
            {
                Books = bookDataModels
            };

            Assert.IsTrue(bookListViewModel.Filter(bookDataModels[0]));
            Assert.IsTrue(bookListViewModel.Filter(bookDataModels[1]));

            AssertHelper.PropertyChangedEvent(bookListViewModel, x => x.FilterText, () => bookListViewModel.FilterText = "J.");
            Assert.AreEqual("J.", bookListViewModel.FilterText);
            Assert.IsTrue(bookListViewModel.Filter(bookDataModels[0]));
            Assert.IsTrue(bookListViewModel.Filter(bookDataModels[1]));

            bookListViewModel.FilterText = "J.R.R. Tolkien";
            Assert.IsTrue(bookListViewModel.Filter(bookDataModels[0]));
            Assert.IsTrue(bookListViewModel.Filter(bookDataModels[1]));

            bookListViewModel.FilterText = "Fell";
            Assert.IsTrue(bookListViewModel.Filter(bookDataModels[0]));
            Assert.IsFalse(bookListViewModel.Filter(bookDataModels[1]));

            bookListViewModel.FilterText = "Tow";
            Assert.IsFalse(bookListViewModel.Filter(bookDataModels[0]));
            Assert.IsTrue(bookListViewModel.Filter(bookDataModels[1]));

            bookListViewModel.FilterText = "xyz";
            Assert.IsFalse(bookListViewModel.Filter(bookDataModels[0]));
            Assert.IsFalse(bookListViewModel.Filter(bookDataModels[1]));

            bookListViewModel.FilterText = "vol";
            books.Add(new Book());
            Assert.IsFalse(bookListViewModel.Filter(bookDataModels[2]));
            books[2].Title = "Serenity, Vol 1: Those Left Behind";
            Assert.IsTrue(bookListViewModel.Filter(bookDataModels[2]));
        }
Exemple #3
0
        public void BookListViewModelCommandsTest()
        {
            MockBookListView  bookListView      = new MockBookListView();
            BookListViewModel bookListViewModel = new BookListViewModel(bookListView)
            {
                Books = new List <BookDataModel>()
            };

            DelegateCommand mockCommand = new DelegateCommand(() => { });

            AssertHelper.PropertyChangedEvent(bookListViewModel, x => x.AddNewCommand, () =>
                                              bookListViewModel.AddNewCommand = mockCommand);
            Assert.AreEqual(mockCommand, bookListViewModel.AddNewCommand);

            mockCommand = new DelegateCommand(() => { });
            AssertHelper.PropertyChangedEvent(bookListViewModel, x => x.RemoveCommand, () =>
                                              bookListViewModel.RemoveCommand = mockCommand);
            Assert.AreEqual(mockCommand, bookListViewModel.RemoveCommand);
        }
        public void RemoveAndSelection3Test()
        {
            Book fellowship = new Book()
            {
                Title = "The Fellowship of the Ring"
            };
            Book twoTowers = new Book()
            {
                Title = "The Two Towers"
            };
            Book returnKing = new Book()
            {
                Title = "The Return of the King"
            };

            IEntityService entityService = Container.GetExportedValue <IEntityService>();

            entityService.Books.Add(fellowship);
            entityService.Books.Add(twoTowers);
            entityService.Books.Add(returnKing);

            BookController bookController = Container.GetExportedValue <BookController>();

            bookController.Initialize();

            MockBookListView  bookListView      = Container.GetExportedValue <MockBookListView>();
            BookListViewModel bookListViewModel = ViewHelper.GetViewModel <BookListViewModel>(bookListView);

            bookListViewModel.BookCollectionView = bookListViewModel.Books;

            // Remove all books and check that nothing is selected anymore
            bookListViewModel.SelectedBook = bookListViewModel.Books.Single(b => b.Book == fellowship);
            bookListViewModel.AddSelectedBook(bookListViewModel.SelectedBook);
            bookListViewModel.AddSelectedBook(bookListViewModel.Books.Single(b => b.Book == twoTowers));
            bookListViewModel.AddSelectedBook(bookListViewModel.Books.Single(b => b.Book == returnKing));
            bookListViewModel.RemoveCommand.Execute(null);
            Assert.IsFalse(entityService.Books.Any());
            Assert.IsNull(bookListViewModel.SelectedBook);
        }
        public void RemoveAndSelection2Test()
        {
            Book fellowship = new Book()
            {
                Title = "The Fellowship of the Ring"
            };
            Book twoTowers = new Book()
            {
                Title = "The Two Towers"
            };
            Book returnKing = new Book()
            {
                Title = "The Return of the King"
            };

            IEntityService entityService = Container.GetExportedValue <IEntityService>();

            entityService.Books.Add(fellowship);
            entityService.Books.Add(twoTowers);
            entityService.Books.Add(returnKing);

            BookController bookController = Container.GetExportedValue <BookController>();

            bookController.Initialize();

            MockBookListView  bookListView      = Container.GetExportedValue <MockBookListView>();
            BookListViewModel bookListViewModel = ViewHelper.GetViewModel <BookListViewModel>(bookListView);

            // Set the sorting to: "The Fell...", "The Retu...", "The Two..."
            bookListViewModel.BookCollectionView = bookListViewModel.Books.OrderBy(b => b.Book.Title);

            // Remove the last book and check that the last one is selected again.
            bookListViewModel.SelectedBook = bookListViewModel.Books.Single(b => b.Book == twoTowers);
            bookListViewModel.AddSelectedBook(bookListViewModel.SelectedBook);
            bookListViewModel.RemoveCommand.Execute(null);
            Assert.IsTrue(entityService.Books.SequenceEqual(new[] { fellowship, returnKing }));
            Assert.AreEqual(returnKing, bookListViewModel.SelectedBook.Book);
        }
        public void AddAndRemoveTest()
        {
            Book fellowship = new Book()
            {
                Title = "The Fellowship of the Ring"
            };
            Book twoTowers = new Book()
            {
                Title = "The Two Towers"
            };

            IEntityService entityService = Container.GetExportedValue <IEntityService>();

            entityService.Books.Add(fellowship);
            entityService.Books.Add(twoTowers);

            BookController bookController = Container.GetExportedValue <BookController>();

            bookController.Initialize();

            MockBookListView  bookListView      = Container.GetExportedValue <MockBookListView>();
            BookListViewModel bookListViewModel = ViewHelper.GetViewModel <BookListViewModel>(bookListView);

            bookListViewModel.BookCollectionView = bookListViewModel.Books;
            MockBookView  bookView      = Container.GetExportedValue <MockBookView>();
            BookViewModel bookViewModel = ViewHelper.GetViewModel <BookViewModel>(bookView);

            // Add a new Book
            Assert.AreEqual(2, entityService.Books.Count);
            Assert.IsTrue(bookListViewModel.AddNewCommand.CanExecute(null));
            bookListViewModel.AddNewCommand.Execute(null);
            Assert.AreEqual(3, entityService.Books.Count);

            // Check that the new Book is selected and the first control gets the focus
            Assert.AreEqual(entityService.Books.Last(), bookViewModel.Book);
            Assert.IsTrue(bookListView.FirstCellHasFocus);

            // Simulate an invalid UI input state => the user can't add more books
            AssertHelper.CanExecuteChangedEvent(bookListViewModel.AddNewCommand, () =>
                                                bookViewModel.IsValid = false);
            Assert.IsFalse(bookListViewModel.AddNewCommand.CanExecute(null));
            Assert.IsFalse(bookListViewModel.RemoveCommand.CanExecute(null));

            // Remove the last two Books at once and check that the last remaining book is selected.
            bookViewModel.IsValid          = true;
            bookListView.FirstCellHasFocus = false;
            bookListViewModel.AddSelectedBook(bookListViewModel.Books.Single(b => b.Book == twoTowers));
            bookListViewModel.AddSelectedBook(bookListViewModel.Books.Last());
            Assert.IsTrue(bookListViewModel.RemoveCommand.CanExecute(null));
            bookListViewModel.RemoveCommand.Execute(null);
            Assert.IsTrue(entityService.Books.SequenceEqual(new Book[] { fellowship }));
            Assert.AreEqual(fellowship, bookViewModel.Book);
            Assert.IsTrue(bookListView.FirstCellHasFocus);

            // Deselect all Books => the Remove command must be deactivated
            AssertHelper.CanExecuteChangedEvent(bookListViewModel.RemoveCommand, () =>
            {
                bookListViewModel.SelectedBooks.ToList().ForEach(x => bookListViewModel.RemoveSelectedBook(x));
                bookListViewModel.SelectedBook = null;
            });
            Assert.IsFalse(bookListViewModel.RemoveCommand.CanExecute(null));
        }
        public void LendToTest()
        {
            Book fellowship = new Book()
            {
                Title = "The Fellowship of the Ring"
            };
            Book twoTowers = new Book()
            {
                Title = "The Two Towers"
            };
            Person harry = new Person()
            {
                Firstname = "Harry"
            };
            Person ron = new Person()
            {
                Firstname = "Ron"
            };

            IEntityService entityService = Container.GetExportedValue <IEntityService>();

            entityService.Books.Add(fellowship);
            entityService.Books.Add(twoTowers);
            entityService.Persons.Add(harry);
            entityService.Persons.Add(ron);

            ShellService shellService = Container.GetExportedValue <ShellService>();

            shellService.ShellView = Container.GetExportedValue <IShellView>();

            BookController bookController = Container.GetExportedValue <BookController>();

            bookController.Initialize();

            MockBookListView  bookListView      = Container.GetExportedValue <MockBookListView>();
            BookListViewModel bookListViewModel = ViewHelper.GetViewModel <BookListViewModel>(bookListView);
            MockBookView      bookView          = Container.GetExportedValue <MockBookView>();
            BookViewModel     bookViewModel     = ViewHelper.GetViewModel <BookViewModel>(bookView);

            // Check that the LendTo Button is enabled
            Assert.IsNull(fellowship.LendTo);
            Assert.AreEqual(fellowship, bookViewModel.Book);
            Assert.IsTrue(bookViewModel.IsEnabled);

            // Open the LendTo dialog
            MockLendToView.ShowDialogAction = view =>
            {
                Assert.AreEqual(Container.GetExportedValue <IShellView>(), view.Owner);
                Assert.IsTrue(view.IsVisible);
                LendToViewModel viewModel = (LendToViewModel)view.DataContext;
                Assert.AreEqual(fellowship, viewModel.Book);
                Assert.AreEqual(entityService.Persons, viewModel.Persons);

                // Lend the book to Ron
                viewModel.SelectedPerson = ron;
                viewModel.OkCommand.Execute(null);
            };
            bookViewModel.LendToCommand.Execute(fellowship);
            Assert.AreEqual(ron, fellowship.LendTo);

            // Check that the LendTo Button is disabled when no book is selected anymore.
            AssertHelper.CanExecuteChangedEvent(bookViewModel.LendToCommand, () =>
                                                bookListViewModel.SelectedBook = null);
            Assert.IsNull(bookViewModel.Book);
            Assert.IsFalse(bookViewModel.IsEnabled);

            MockLendToView.ShowDialogAction = null;
        }