public void CanSortOrGroupLayout()
        {
            // arrange
            var vm = new ProcessLayoutsViewModel();

            var model = Mock.Create<ProcessEdit>(Behavior.Loose);
            model.SystemName = Constants.CalendarProcessName;

            Mock.Arrange(() => vm.Model).Returns(model);

            // act
            var privateAccessor = new PrivateAccessor(vm);
            var result = (bool)privateAccessor.CallMethod("CanSortOrGroupLayout", new object[] { null });

            // assert
            Assert.IsFalse(result);

            // arrage
            model.SystemName = "eCar_p";

            // act
            result = (bool)privateAccessor.CallMethod("CanSortOrGroupLayout", new object[] { null });

            // assert
            Assert.IsTrue(result);
        }
        public void Ctor()
        {
            // arrange
            // act
            var vm = new ProcessLayoutsViewModel();

            // assert
            Assert.IsNotNull(vm.LayoutList);
        }
        public void SelectedLayoutProperty_MustBeCall_LockSortAndGroupControls()
        {
            // arrange
            var vm = new ProcessLayoutsViewModel();

            var layoutSetupViewModel = Mock.Create<ILayoutSetupViewModel>(Behavior.CallOriginal);
            var privateAccessor = new PrivateAccessor(vm);

            Mock.NonPublic.Arrange<bool>(vm, "CanSortOrGroupLayout", ArgExpr.IsAny<object>())
                .DoInstead(() => privateAccessor.SetField("_selectedLayoutSetup", layoutSetupViewModel))
                .Returns(false);

            var called = false;

            Mock.Arrange(() => layoutSetupViewModel.LockSortAndGroupControls()).DoInstead(() => called = true);

            privateAccessor.SetField("_allFields", new List<FieldEdit>());

            var layoutViewModel = Mock.Create<ILayoutViewModel>(Behavior.Loose);

            // act
            vm.SelectedLayout = layoutViewModel;

            // assert
            Assert.IsTrue(called);
        }
        public void SelecLayoutEvenIfNameIsEmpty()
        {
            // arraange
            var vm = new ProcessLayoutsViewModel();
            Mock.NonPublic.Arrange<bool>(vm, "CanSortOrGroupLayout", new object[] { ArgExpr.IsNull<object>() }).Returns(true);
            vm.EditLayoutVM = new Lazy<EditLayoutViewModel>();

            var model = Mock.Create<ProcessEdit>();
            model.LayoutList = new ProcessLayoutList();
            Mock.Arrange(() => vm.Model).Returns(model);
            
            var popupBuilder = new PopupBuilder();
            var popupFactory = new PopupFactory { PopupFactoryFactory = new ExportFactory<PopupBuilder>(() => new Tuple<PopupBuilder, Action>(popupBuilder, () => { })) };
            Mock.Arrange(() => popupBuilder.Show(Arg.IsAny<Action>(), Arg.IsAny<Func<bool>>())).DoInstead((Action ok, Action cancel) => ok());
            Mock.Arrange(() => popupFactory.Popup()).Returns(popupBuilder);
            vm.ThePopupFactory = popupFactory;
            
            var newLayoutViewModelFactory = Mock.Create<INewLayoutViewModelFactory>();
            Mock.Arrange(() => newLayoutViewModelFactory.CreateLayoutVM(Arg.IsAny<ProcessLayoutEdit>())).Returns<ProcessLayoutEdit>((l) => new NewLayoutViewModel(l) { Name = l.Name, Id = l.Id, LayoutString = l.LayoutInfo });
            vm.TheLayoutFactory = newLayoutViewModelFactory;

            vm.LayoutAddCommand.Execute(null);
            vm.LayoutAddCommand.Execute(null);

            vm.SelectedLayout = vm.LayoutList[0];
            vm.SelectedLayout.Name = string.Empty;
            vm.SelectedLayout = vm.LayoutList[1];
            
            // act
            vm.SelectedLayout = vm.LayoutList[0];

            // assert
            Assert.IsTrue(vm.SelectedLayout.GetHashCode() == vm.LayoutList[0].GetHashCode());
        }