From a128b76522efedfa4b9eef8e7e1ac0caee798838 Mon Sep 17 00:00:00 2001 From: Daniel Kraus Date: Tue, 4 Aug 2015 01:17:14 +0200 Subject: [PATCH] Implement tests for SettingsViewModel add and add child commands. --- Tests/ViewModels/SettingsViewModelTest.cs | 47 +++++++++++++-- .../ViewModels/ElementPickerViewModel.cs | 1 + zaaReloaded2/ViewModels/SettingsViewModel.cs | 57 ++++++++++++++++++- 3 files changed, 98 insertions(+), 7 deletions(-) diff --git a/Tests/ViewModels/SettingsViewModelTest.cs b/Tests/ViewModels/SettingsViewModelTest.cs index 58c7c89..695e62c 100755 --- a/Tests/ViewModels/SettingsViewModelTest.cs +++ b/Tests/ViewModels/SettingsViewModelTest.cs @@ -40,13 +40,52 @@ namespace Tests.ViewModels [Test] public void AddElement() { - + bool messageSent = false; + Settings model = _settingsVM.RevealModelObject() as Settings; + int oldViewModelElementCount = _settingsVM.Elements.Count; + int oldModelElementCount = model.Elements.Count; + _settingsVM.AddElementMessage.Sent += (sender, args) => + { + messageSent = true; + ElementPickerViewModel picker = args.Content.ViewModel as ElementPickerViewModel; + Assert.IsNotNull(picker, "ViewModel in MessageContent is not an ElementPickerViewModel"); + picker.Categories.First().Children.First().IsSelected = true; + picker.ChooseElementCommand.Execute(null); + }; + _settingsVM.AddElementCommand.Execute(null); + Assert.IsTrue(messageSent, "Message was not sent"); + Assert.AreEqual(oldViewModelElementCount + 1, _settingsVM.Elements.Count, + "Count of elements in ViewModel was not increased by 1"); + Assert.AreEqual(oldModelElementCount + 1, model.Elements.Count, + "Count of elements in settings Model was not increased by 1"); } [Test] public void AddChildElement() { - + bool messageSent = false; + SelectEachDay model = new SelectEachDay(); + ControlElementViewModel viewModel = new ControlElementViewModel(model); + _settingsVM.AddElementViewModel(viewModel); + viewModel.IsSelected = true; + int oldViewModelChildrenCount = viewModel.Elements.Count; + int oldModelChildrenCount = model.FormatElements.Count; + _settingsVM.AddChildElementMessage.Sent += (sender, args) => + { + messageSent = true; + ElementPickerViewModel picker = args.Content.ViewModel as ElementPickerViewModel; + Assert.IsNotNull(picker, "ViewModel in MessageContent is not an ElementPickerViewModel"); + picker.Categories.First().Children.First().IsSelected = true; + Assert.IsTrue(picker.ChooseElementCommand.CanExecute(null), + "Cannot execute element picker's ChooseElementCommand."); + picker.ChooseElementCommand.Execute(null); + }; + _settingsVM.AddChildElementCommand.Execute(null); + Assert.IsTrue(messageSent, "Message was not sent"); + Assert.AreEqual(oldViewModelChildrenCount + 1, viewModel.Elements.Count, + "Count of children in ViewModel was not increased by 1"); + Assert.AreEqual(oldModelChildrenCount + 1, model.FormatElements.Count, + "Count of children in Model was not increased by 1"); } [Test] @@ -67,13 +106,13 @@ namespace Tests.ViewModels [Test] public void DeleteElement() { - + throw new NotImplementedException(); } [Test] public void CopyElement() { - + throw new NotImplementedException(); } } } diff --git a/zaaReloaded2/ViewModels/ElementPickerViewModel.cs b/zaaReloaded2/ViewModels/ElementPickerViewModel.cs index 1279af6..6b2ecbb 100755 --- a/zaaReloaded2/ViewModels/ElementPickerViewModel.cs +++ b/zaaReloaded2/ViewModels/ElementPickerViewModel.cs @@ -146,6 +146,7 @@ namespace zaaReloaded2.ViewModels { FormatElementViewModel vm = new FormatElementViewModel(element); vm.DisplayString = name; + vm.PropertyChanged += ElementViewModel_PropertyChanged; return vm; } diff --git a/zaaReloaded2/ViewModels/SettingsViewModel.cs b/zaaReloaded2/ViewModels/SettingsViewModel.cs index 81c6250..7fb8e73 100755 --- a/zaaReloaded2/ViewModels/SettingsViewModel.cs +++ b/zaaReloaded2/ViewModels/SettingsViewModel.cs @@ -145,6 +145,30 @@ namespace zaaReloaded2.ViewModels #region Messages + public Message AddElementMessage + { + get + { + if (_addElementMessage == null) + { + _addElementMessage = new Message(); + } + return _addElementMessage; + } + } + + public Message AddChildElementMessage + { + get + { + if (_addChildElementMessage == null) + { + _addChildElementMessage = new Message(); + } + return _addChildElementMessage; + } + } + #endregion #region Commands @@ -216,6 +240,7 @@ namespace zaaReloaded2.ViewModels { elementViewModel.PropertyChanged += ElementViewModel_PropertyChanged; Elements.Add(elementViewModel); + _settings.Elements.Add(elementViewModel.RevealModelObject() as ElementBase); } /// @@ -233,9 +258,34 @@ namespace zaaReloaded2.ViewModels #region Private methods - void DoAddElement() { } + void DoAddElement() + { + // Create a new element picker; it will automatically create and + // send us a new element view model if one is chosen by the view. + ElementPickerViewModel picker = new ElementPickerViewModel(true); + picker.ElementChosenMessage.Sent += (sender, args) => + { + ElementViewModel newVM = args.Content.ViewModel as ElementViewModel; + AddElementViewModel(newVM); + }; + AddElementMessage.Send(new ViewModelMessageContent(picker)); + } - void DoAddChildElement() { } + void DoAddChildElement() + { + if (CanAddChildElement()) + { + // Create a new element picker; it will automatically create and + // send us a new element view model if one is chosen by the view. + ElementPickerViewModel picker = new ElementPickerViewModel(false); + picker.ElementChosenMessage.Sent += (sender, args) => + { + FormatElementViewModel newVM = args.Content.ViewModel as FormatElementViewModel; + AddChildElementViewModel(SelectedElement as ControlElementViewModel, newVM); + }; + AddChildElementMessage.Send(new ViewModelMessageContent(picker)); + } + } bool CanAddChildElement() { @@ -290,7 +340,8 @@ namespace zaaReloaded2.ViewModels DelegatingCommand _addChildElementCommand; DelegatingCommand _deleteElementCommand; DelegatingCommand _copyElementCommand; - + Message _addElementMessage; + Message _addChildElementMessage; List _elements; ElementViewModel _selectedElement; EnumProvider _referenceStyle;