189 lines
9.0 KiB
C#
Executable File
189 lines
9.0 KiB
C#
Executable File
/* SettingsViewModelTest.cs
|
|
* part of zaaReloaded2
|
|
*
|
|
* Copyright 2015-2018 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.");
|
|
}
|
|
}
|
|
}
|