public void MoveFieldDownCommandTest()
        {
            // Arrange.
            var field = new FieldEditMock("Text Field", "TextField", new FieldTypeInfo("Text", "String", true));
            var section = new SectionEditMock(1, "Test section");
            var pf = Mock.Create<ProcessFieldViewModel>();
            var pf2 = Mock.Create<ProcessFieldViewModel>();
            var pf3 = Mock.Create<ProcessFieldViewModel>();
            Mock.Arrange(() => pf.Model).Returns(new FieldEdit());
            Mock.Arrange(() => pf2.Model).Returns(new FieldEdit());
            Mock.Arrange(() => pf3.Model).Returns(new FieldEdit());
            section.FieldList.Add(field);

            var vm = new ProcessSectionViewModel(section);
            vm.FieldList.Add(pf);
            vm.FieldList.Add(pf3);
            vm.FieldList.Add(pf2);


            var pfvm = Mock.Create<ProcessFieldsViewModel>();
            Mock.Arrange(() => pfvm.Enabled).Returns(true);

            vm.TheProcessFieldsViewModel = pfvm;
            var ic = vm.MoveFieldDownCommand;

            var listboxM = new ListBoxItem { DataContext = pf };

            Assert.IsTrue(ic.CanExecute(listboxM));

            ic.Execute(listboxM);
            Assert.IsTrue(vm.FieldList[0].Model.Position == 0);
            Assert.IsTrue(vm.FieldList[1].Model.Position == 1);
        }
        public void ChangeFieldCommandTest()
        {
            // Arrange.
            var field = new FieldEditMock("Text Field", "TextField", new FieldTypeInfo("Text", "String", true));
            var section = new SectionEditMock(1, "Test section");

            section.FieldList.Add(field);

            var vm = new ProcessSectionViewModel(section);

            var pfvm = Mock.Create<ProcessFieldsViewModel>();

            vm.TheProcessFieldsViewModel = pfvm;
            var ic = vm.ChangeFieldCommand;

            Assert.IsTrue(ic.CanExecute(null));
            Assert.IsFalse(vm.TheProcessFieldsViewModel.IsFieldsFocused);

            ic.Execute(null);

            Assert.IsTrue(vm.TheProcessFieldsViewModel.IsFieldsFocused);
        }
        public void AddNewFieldCommandTest()
        {
            // Arrange.
            var field = new FieldEditMock("Text Field", "TextField", new FieldTypeInfo("Text", "String", true));
            var section = new SectionEditMock(1, "Test section");

            section.FieldList.Add(field);

            var vm = new ProcessSectionViewModel(section);
            var pfvm = Mock.Create<ProcessFieldsViewModel>();

            Mock.Arrange(() => pfvm.Enabled).Returns(true);
            Mock.Arrange(() => pfvm.UnitOfWork).Returns(new ProcessEditRetrieverMock(new ProcessEdit(), new FieldTypes()));

            vm.TheProcessFieldsViewModel = pfvm;
            var factory = Mock.Create<IFieldViewModelFactory>();

            vm.FieldFactory = factory;

            var ic = vm.AddNewFieldCommand;

            Assert.IsTrue(ic.CanExecute(null));
        }
        public void RemoveFieldCommandTest()
        {
            // Arrange.
            var field = new FieldEditMock("Text Field", "TextField", new FieldTypeInfo("Text", "String", true));
            var section = new SectionEditMock(1, "Test section");

            section.FieldList.Add(field);

            var vm = new ProcessSectionViewModel(section);

            var pfvm = Mock.Create<ProcessFieldsViewModel>();
            Mock.Arrange(() => pfvm.Enabled).Returns(true);
            vm.TheProcessFieldsViewModel = pfvm;

            var pf = Mock.Create<ProcessFieldViewModel>();

            Mock.Arrange(() => pf.Model).Returns(new FieldEdit() { IsBase = true });

            vm.SelectedField = pf;

            var ic = vm.RemoveFieldCommand;

            Assert.IsFalse(ic.CanExecute(null));

            Mock.Arrange(() => pf.Model).Returns(new FieldEdit() { IsBase = false });
            vm.SelectedField = pf;

            Assert.IsTrue(ic.CanExecute(null));
        }
        [TestMethod]
        public void WhenModelChildIsChanged_PropertiesAreUpdated()
        {
            // Arrange.
            var screenMock = Mock.Create<IFieldSecurityManager>();

            var field = new FieldEditMock();

            var processMock = Mock.Create<ProcessEdit>();

            var steps = new List<IStepEdit>();

            var stepMock = Mock.Create<IStepEdit>();
            Mock.Arrange(() => stepMock.IsChild).Returns(true);
            steps.Add(stepMock);

            stepMock = Mock.Create<IStepEdit>();
            Mock.Arrange(() => stepMock.IsChild).Returns(true);
            steps.Add(stepMock);

            stepMock = Mock.Create<IStepEdit>();
            Mock.Arrange(() => stepMock.IsChild).Returns(true);
            steps.Add(stepMock);

            field.StepList.AddRange(steps);

            var vm = new ExpandableStepPropBag(processMock) { FieldSecurityManager = screenMock, Model = field };

            field.RaiseChildChanged();

            foreach (var mock in steps)
            {
                Mock.Assert(() => mock.UpdateProps(vm), Occurs.Once());
            }