/* SettingsViewModelTest.cs * part of zaaReloaded2 * * Copyright 2015-2017 Daniel Kraus * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ using System; using System.Collections.Generic; using System.Linq; using System.Text; using NUnit.Framework; using zaaReloaded2.ViewModels; using zaaReloaded2.Controller; using zaaReloaded2.Controller.Elements; namespace Tests.ViewModels { [TestFixture] class SettingsViewModelTest { SettingsViewModel _settingsVM; [SetUp] public void SetUp() { _settingsVM = new SettingsViewModel(); } [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.Children.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.Children.Count, "Count of children in Model was not increased by 1"); } [Test] public void CannotAddChildElementToFormatElement() { ControlElementViewModel parent = new ControlElementViewModel( new SelectFirstDay()); _settingsVM.AddElementViewModel(parent); parent.IsSelected = true; Assert.IsTrue(_settingsVM.AddChildElementCommand.CanExecute(null)); FormatElementViewModel child = new FormatElementViewModel(new Items()); _settingsVM.AddChildElementViewModel(parent, child); parent.IsSelected = false; child.IsSelected = true; Assert.IsFalse(_settingsVM.AddChildElementCommand.CanExecute(null)); } [Test] public void DeleteElement() { Settings settings = new Settings(); settings.AddElement(new SelectFirstDay()); settings.AddElement(new SelectEachDay()); settings.AddElement(new SelectLastDay()); SettingsViewModel settingsVM = new SettingsViewModel(settings); int oldCount = settingsVM.Elements.Count; ElementViewModel elementVM = settingsVM.Elements.First(); ElementBase element = elementVM.RevealModelObject() as ElementBase; Assert.IsTrue(settings.Elements.Contains(element), "Settings object does not contain the model that the VM revealed?!"); elementVM.IsSelected = true; Assert.IsTrue(settingsVM.DeleteElementCommand.CanExecute(null), "DeleteElementCommand should be enabled."); settingsVM.DeleteElementCommand.Execute(null); Assert.AreEqual(oldCount - 1, settingsVM.Elements.Count); Assert.IsFalse(settingsVM.Elements.Contains(elementVM), "Elements collection still contains the deleted element view model."); Assert.IsFalse(settings.Elements.Contains(element), "Settings' Element collection still contains the element model."); } [Test] public void DeleteChildElement() { Settings settings = new Settings(); settings.AddElement(new SelectFirstDay(new Items())); settings.AddElement(new SelectEachDay()); settings.AddElement(new SelectLastDay()); SettingsViewModel settingsVM = new SettingsViewModel(settings); ControlElementViewModel parent = ((ControlElementViewModel)settingsVM.Elements.First()); int oldCount = parent.Elements.Count; ElementViewModel elementVM = ((ControlElementViewModel)settingsVM.Elements.First()) .Elements.First(); ElementBase element = elementVM.RevealModelObject() as ElementBase; Assert.IsTrue(((ControlElementBase)settings.Elements[0]).Children.Contains(element), "Settings object does not contain the model that the VM revealed?!"); elementVM.IsSelected = true; Assert.IsTrue(settingsVM.DeleteElementCommand.CanExecute(null), "DeleteElementCommand should be enabled."); settingsVM.DeleteElementCommand.Execute(null); Assert.AreEqual(oldCount - 1, parent.Elements.Count); Assert.IsFalse(parent.Elements.Contains(elementVM), "Elements collection still contains the deleted element view model."); Assert.IsFalse(((ControlElementBase)settings.Elements[0]).Children.Contains(element), "Settings' collection of FormatElement children still contains the element model."); } [Test] public void CopyElement() { string testString = "this text should be duplicated"; _settingsVM.AddElementViewModel( new ControlElementViewModel(new SelectEachDay(new Items(testString)))); int oldCount = _settingsVM.Elements.Count; _settingsVM.Elements.First().IsSelected = true; Assert.IsTrue(_settingsVM.CopyElementCommand.CanExecute(null), "CopyElementCommand should be enabled."); _settingsVM.CopyElementCommand.Execute(null); Assert.AreEqual(oldCount + 1, _settingsVM.Elements.Count); // Access the first element ControlElementViewModel controlVM = _settingsVM.Elements.First() as ControlElementViewModel; FormatElementViewModel formatVM = controlVM.Elements.First() as FormatElementViewModel; Items items = formatVM.RevealModelObject() as Items; Assert.IsNotNull(items, "Child ViewModel of first ControlElementViewModel does not wrap Items object."); Assert.AreEqual(testString, items.Content, "First control element's child element has incorrect Content string."); // Access the second element controlVM = _settingsVM.Elements.Last() as ControlElementViewModel; formatVM = controlVM.Elements.First() as FormatElementViewModel; items = formatVM.RevealModelObject() as Items; Assert.IsNotNull(items, "Child ViewModel of last ControlElementViewModel does not wrap Items object."); Assert.AreEqual(testString, items.Content, "First control element's child element has incorrect Content string."); } } }