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