/// <summary>
        /// Initializes a new instance of the <see cref="ProcessFieldConfigViewModel"/> class.
        /// </summary>
        /// <param name="config">The configuration.</param>
        /// <param name="parent">The parent.</param>
        public ProcessFieldConfigViewModel(ProcessSecurityConfigEdit config, ProcessFieldsViewModel parent)
        {
            _config = config;
            _parent = parent;
            if (config != null)
            {
                _personFieldName = config.PersonFieldName;
                _stateGuid = config.StateGuid;
                _roleId = config.RoleId;
                _businessUnitId = config.BusinessUnitId;
            }
            else
            {
                _personFieldName = Constants.AllPersonFieldsSystemName;
                _stateGuid = Constants.AllStatesGuid;
                _roleId = Constants.AllRolesId;
                _businessUnitId = Constants.AllBusinessUnitsId;
                _config = ProcessSecurityConfigEdit.New();
            }

            this.UpdateNames();
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="ProcessSystemFieldViewModel"/> class.
 /// </summary>
 /// <param name="parent">The parent.</param>
 public ProcessSystemFieldViewModel(ProcessFieldsViewModel parent)
 {
     _parent = parent;
 }
        [Ignore]//TODO: Unignore    
        public void PopulateFields_Test()
        {
            const int basePersonProcessId = 1;
            const int baseBusinessUnitProcessId = 2;
            const string personFieldName = "Person";
            const string buFieldName = "BusinessUnits";

            var basePersonProcessInfo = Mock.Create<PublishedProcessInfo>();

            Mock.Arrange(() => basePersonProcessInfo.Id).Returns(basePersonProcessId);
            Mock.Arrange(() => basePersonProcessInfo.SystemName).Returns(Constants.BasePersonProcessName);

            var baseBUProcessInfo = Mock.Create<PublishedProcessInfo>();

            Mock.Arrange(() => baseBUProcessInfo.Id).Returns(baseBusinessUnitProcessId);
            Mock.Arrange(() => baseBUProcessInfo.SystemName).Returns(Constants.BaseBusinessUnitProcessName);

            var crossRefStep = DataPortal.CreateChild<CrossRefRequiredStepEdit>();

            crossRefStep.CrossRefProcess = basePersonProcessInfo;

            var personField = DataPortal.CreateChild<FieldEdit>();

            personField.SystemName = personFieldName;
            personField.StepList.Add(crossRefStep);
            personField.FieldType = new FieldTypeInfoMock("Reference", "Reference");

            crossRefStep = DataPortal.CreateChild<CrossRefRequiredStepEdit>();

            crossRefStep.CrossRefProcess = baseBUProcessInfo;

            var buField = DataPortal.CreateChild<FieldEdit>();

            buField.SystemName = buFieldName;
            buField.StepList.Add(crossRefStep);
            buField.FieldType = new FieldTypeInfoMock("MultiReference", "MultiReference");

            var sectionEdit = DataPortal.CreateChild<SectionEdit>();

            sectionEdit.FieldList.Add(personField);
            sectionEdit.FieldList.Add(buField);

            var sectionList = new ProcessSections {sectionEdit};

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

            Mock.Arrange(() => processEditMock.SectionList).Returns(sectionList);

            var uow = new ProcessEditRetrieverMock(processEditMock, new[] { basePersonProcessInfo, baseBUProcessInfo });

            var approvalStep = DataPortal.CreateChild<ApprovalOptionsStepEdit>();
            var stepInfo = Mock.Create<StepInfo>();
            var fieldEdit = DataPortal.CreateChild<FieldEdit>();
            var fieldVM = new ProcessFieldViewModel(fieldEdit, null);
            var fieldsVM = new ProcessFieldsViewModel { Model = processEditMock, UnitOfWork = uow };

            var vm = new ProcessFieldApprovalOptionsStepViewModel(approvalStep, stepInfo, fieldVM) { Model = fieldsVM };

            Assert.IsNotNull(vm.SortedLevels);
            Assert.IsNotNull(vm.Roles);
            Assert.IsNotNull(vm.ApprovalMembersFields);
            Assert.IsNotNull(vm.BusinessUnitFields);

            var eventAggregatorMock = Mock.Create<IEventAggregator>();

            vm.EventAggregator = eventAggregatorMock;

            var role1Mock = Mock.Create<IRoleInfo>();

            Mock.Arrange(() => role1Mock.Id).Returns(3);

            var role2Mock = Mock.Create<IRoleInfo>();

            Mock.Arrange(() => role2Mock.Id).Returns(5);

            var roles = new List<IRoleInfo> { role1Mock, role2Mock };

            var organizationInfoMock = Mock.Create<IOrganizationInfo>();

            Mock.Arrange(() => organizationInfoMock.Roles).Returns(roles);

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

            vm.OrganizationInfo = organizationInfoMock;
            vm.TheProcessFieldsVM = processfieldsVMMock;

            vm.OnImportsSatisfied();

            Assert.AreEqual(2, vm.ApprovalMembersFields.Count);
            Assert.IsTrue(vm.ApprovalMembersFields.Any(f => f.SystemName == personField.SystemName));

            Assert.AreEqual(2, vm.BusinessUnitFields.Count);
            Assert.IsTrue(vm.BusinessUnitFields.Any(f => f.SystemName == buField.SystemName));

            Assert.AreEqual(3, vm.Roles.Count);
            Assert.IsTrue(vm.Roles.Any(r => r.Id == role1Mock.Id));
            Assert.IsTrue(vm.Roles.Any(r => r.Id == role2Mock.Id));
        }
        public void FilterOptionsCommandShouldShowFilterOptionsPopup()
        {
            var filter = Mock.Create<IFilterDescriptor>(Behavior.Loose);
            var stepEdit = DisplayListRequiredStepEdit.NewStep(1);
            stepEdit.SelectedFields = new DisplayListStepFields();

            var processFieldViewModel = new ProcessFieldViewModel(new FieldEdit(), new ProcessSectionViewModel(Mock.Create<ISectionEdit>()));

            var vm = new ProcessFieldDisplayListRequiredStepViewModel(stepEdit, new StepInfo(1), processFieldViewModel);

            var processEdit = Mock.Create<ProcessEdit>(Behavior.Loose);
            var fieldsViewModel = new ProcessFieldsViewModel { Model = processEdit };
            vm.Model = fieldsViewModel;

            var popupFactory = Mock.Create<PopupFactory>(Behavior.Loose);
            var popupBuilder = Mock.Create<PopupBuilder>(Behavior.CallOriginal);
            Mock.Arrange(() => popupFactory.Popup()).Returns(popupBuilder);
            Mock.Arrange(() => popupBuilder.Show(Arg.IsAny<Action>(), Arg.IsAny<Func<bool>>())).DoNothing();
            vm.ThePopupFactory = popupFactory;

            var filterOptions = Mock.Create<FilterOptionsViewModel>(Behavior.Loose);
            vm.FilterOptionsVM = new Lazy<FilterOptionsViewModel>(() => filterOptions);
            vm.FilterOptionsCommand.Execute(filter);

            Assert.IsTrue(filterOptions.IsUdpEditMode);
            Assert.IsFalse(filterOptions.ShowUdPs);
            Assert.IsFalse(filterOptions.ShowProcessFields);

            Mock.Assert(() => filterOptions.CleanUp(), Occurs.Once());
            Mock.AssertSet(() => filterOptions.FilterDescriptor = filter, Occurs.Once());
        }
        public void FilterOptionsCommandShouldUpdatProcessFieldAfterPopupIsClosed()
        {
            var filter = Mock.Create<IFilterDescriptor>(Behavior.Loose);
            var stepEdit = DisplayListRequiredStepEdit.NewStep(1);
            stepEdit.SelectedFields = new DisplayListStepFields();

            var processFieldViewModel = new ProcessFieldViewModel(new FieldEdit(), new ProcessSectionViewModel(Mock.Create<ISectionEdit>()));

            var vm = new ProcessFieldDisplayListRequiredStepViewModel(stepEdit, new StepInfo(1), processFieldViewModel);

            Mock.Arrange(() => vm.GetProcessedFilter()).IgnoreInstance().Returns(Mock.Create<IFilterDescriptor>());

            var processEdit = Mock.Create<ProcessEdit>(Behavior.Loose);
            var fieldsViewModel = new ProcessFieldsViewModel { Model = processEdit };
            vm.Model = fieldsViewModel;

            var popupFactory = Mock.Create<PopupFactory>(Behavior.Loose);
            var popupBuilder = Mock.Create<PopupBuilder>(Behavior.CallOriginal);
            Mock.Arrange(() => popupFactory.Popup()).Returns(popupBuilder);
            Mock.Arrange(() => popupBuilder.Show(Arg.IsAny<Action>(), Arg.IsAny<Func<bool>>())).DoInstead((Action ok, Action cancel) => ok());
            vm.ThePopupFactory = popupFactory;

            var filterOptions = Mock.Create<FilterOptionsViewModel>(Behavior.Loose);
            vm.FilterOptionsVM = new Lazy<FilterOptionsViewModel>(() => filterOptions);

            var procField = new ProcessField("test", "test");
            filterOptions.IsProcessField = true;
            filterOptions.SelectedProcessField = procField;

            var filterValue = new FilterValue { Type = FilterValueType.ProcessField };
            Mock.Arrange(() => filter.Value).Returns(filterValue);

            vm.FilterOptionsCommand.Execute(filter);
            Assert.AreEqual("FLD: test", filterValue.ProvidedValue.ToString());

            Mock.Arrange(() => filter.Value).Returns((FilterValue)null);
            vm.FilterOptionsCommand.Execute(filter);
            Mock.AssertSet(() => filter.Value = Arg.IsAny<FilterValue>());
        }