public void DisplayListProcessChangedEventCtorTest()
        {
            var stepEdit = DisplayListRequiredStepEdit.NewStep(1);
            stepEdit.SelectedFields = new DisplayListStepFields();
            var vm = new ProcessFieldDisplayListRequiredStepViewModel(stepEdit, new StepInfo(1), new ProcessFieldViewModel(new FieldEdit(), new ProcessSectionViewModel(Mock.Create<ISectionEdit>())));
            var ppi1 = new PublishedProcessInfo();
            var ppi2 = new PublishedProcessInfo();
            var item = new DisplayListProcessChangedEvent(vm, ppi1, ppi2);

            Assert.AreSame(vm, item.StepViewModel);
            Assert.AreSame(ppi1, item.OldProcess);
            Assert.AreSame(ppi2, item.NewProcess);
        }
        public void CrossReferenceSubfieldsRetrieverCanLoadCrossReferenceSubfields()
        {
            // Arrange.
            var process = new PublishedProcessInfo();
            var crField = new FieldInfo(1, "CR Field", "CRField_f", null, "TestProcess_p", ColumnTypes.Reference, Guid.Empty, false, false, false);
            var field1 = new FieldInfo();
            var field2 = new FieldInfo();
            var field3 = new FieldInfo();
            var fieldList = new FieldListStub(field1, field2, field3);
            var processRetriever = Mock.Create<PublishedProcessFieldsRetriever>(Behavior.Loose);
            Mock.Arrange(() => processRetriever.Process).Returns(process);
            Mock.Arrange(() => processRetriever.Fields).Returns(fieldList);
            Mock.Arrange(() => PublishedProcessFieldsRetriever.GetProcessByCrossReferenceFieldAsync("TestProcess_p", "CRField_f", true))
                .Returns(TaskEx.FromResult(processRetriever));

            var expressionField1 = Mock.Create<IExpressionField>(Behavior.Loose);
            var expressionField2 = Mock.Create<IExpressionField>(Behavior.Loose);

            var fieldMap = new Dictionary<FieldInfo, IExpressionField>();
            fieldMap[field1] = expressionField1;
            fieldMap[field2] = expressionField2;

            var retriever = new ExpressionDesignerWindowViewModelBase.CrossReferenceSubfieldsRetriever(crField, fieldMap.ContainsKey, (f, p, o) => fieldMap[f]);
            var sourceField = Mock.Create<IExpressionField>(Behavior.Loose);
            var connector = Mock.Create<IConnector>(Behavior.Loose);
            Mock.Arrange(() => sourceField.Connector).Returns(connector);
            var owner = Mock.Create<ExpressionObjectBase>(Behavior.CallOriginal);
            Mock.Arrange(() => connector.Owner).Returns(owner);

            IExpressionField[] subfields = null;

            // Act.
            retriever.BeginLoad(sourceField, (sf, fields) => subfields = fields.ToArray());

            // Assert.
            Assert.IsNotNull(subfields);
            Assert.AreEqual(2, subfields.Length);
            Assert.IsTrue(subfields.Contains(expressionField1));
            Assert.IsTrue(subfields.Contains(expressionField2));
        }
        public void CrSubfieldsRetrieverBaseAddSystemSourceFieldsShouldCallAddVersionFieldsByPublishedProcessInfo()
        {
            var vm = new ExpressionDesignerWindowViewModelBase.CrSubfieldsRetrieverBase(1);

            var sourceFields = new SourceField(new SourceFieldList());

            var fields = new FieldList();
            Mock.Arrange(() => fields.IsReadOnly).Returns(false);
            Mock.Arrange(() => FieldList.BeginGetFieldList(1, Arg.IsAny<EventHandler<DataPortalResult<FieldList>>>())).DoInstead<int, EventHandler<DataPortalResult<FieldList>>>((pid, evt) => evt(null, new DataPortalResult<FieldList>(fields, null, null)));

            IEnumerable<IExpressionField> expressionFields = null;

            var processInfo = new PublishedProcessInfo();
            Mock.Arrange(() => processInfo.ProcessId).Returns(1);
            Mock.Arrange(() => processInfo.ProcessOption).Returns(ProcessOption.VersionEnabled);

            vm.BeginLoadWorker(sourceFields, (f, fl) => { expressionFields = fl; }, processInfo);

            Assert.IsTrue(expressionFields.Any(x => x.Name == "Version Date"));
            Assert.IsTrue(expressionFields.Any(x => x.Name == Constants.VersionNumberName));
            Assert.IsTrue(expressionFields.Any(x => x.Name == "Version Master Id"));

            expressionFields = null;

            var processInfo2 = new PublishedProcessInfo();
            Mock.Arrange(() => processInfo2.ProcessId).Returns(1);
            Mock.Arrange(() => processInfo2.ProcessOption).Returns(ProcessOption.None);

            vm.BeginLoadWorker(sourceFields, (f, fl) => { expressionFields = fl; }, processInfo2);

            Assert.IsFalse(expressionFields.Any(x => x.Name == "Version Date"));
            Assert.IsFalse(expressionFields.Any(x => x.Name == Constants.VersionNumberName));
            Assert.IsFalse(expressionFields.Any(x => x.Name == "Version Master Id"));
        }
        public void CrSubfieldsRetrieverBaseAddSystemSourceFieldsShouldCallAddIdFieldByProcessInfo()
        {
            var vm = new ExpressionDesignerWindowViewModelBase.CrSubfieldsRetrieverBase(1);

            var sourceFields = new SourceField(new SourceFieldList());

            var fields = new FieldList();
            Mock.Arrange(() => fields.IsReadOnly).Returns(false);
            Mock.Arrange(() => FieldList.BeginGetFieldList(1, Arg.IsAny<EventHandler<DataPortalResult<FieldList>>>())).DoInstead<int, EventHandler<DataPortalResult<FieldList>>>((pid, evt) => evt(null, new DataPortalResult<FieldList>(fields, null, null)));

            IEnumerable<IExpressionField> expressionFields = null;

            var processInfo = new PublishedProcessInfo();
            Mock.Arrange(() => processInfo.ProcessId).Returns(1);

            vm.BeginLoadWorker(sourceFields, (f, fl) => { expressionFields = fl; }, processInfo);

            Assert.IsNotNull(expressionFields.First(x => x.Name == "Id"));
        }
        public void CrSubfieldsRetrieverBaseBeginLoadWorkerShouldCallAddSystemSourceFields()
        {
            var vm = new ExpressionDesignerWindowViewModelBase.CrSubfieldsRetrieverBase(1);

            var sourceFields = new SourceField(new SourceFieldList());

            var fields = new FieldList();
            Mock.Arrange(() => fields.IsReadOnly).Returns(false);
            Mock.Arrange(() => FieldList.BeginGetFieldList(1, Arg.IsAny<EventHandler<DataPortalResult<FieldList>>>())).DoInstead<int, EventHandler<DataPortalResult<FieldList>>>((pid, evt) => evt(null, new DataPortalResult<FieldList>(fields, null, null)));

            IEnumerable<IExpressionField> expressionFields = null;

            var processInfo = new PublishedProcessInfo();
            Mock.Arrange(() => processInfo.ProcessId).Returns(1);

            var isCalled = false;
            Mock.NonPublic.Arrange(vm, "AddSystemSourceFields", ArgExpr.IsAny<PublishedProcessInfo>(), ArgExpr.IsAny<List<IExpressionField>>()).DoInstead(() => { isCalled = true; });
            vm.BeginLoadWorker(sourceFields, (f, fl) => { expressionFields = fl; }, processInfo);

            Assert.IsTrue(isCalled);
        }
        public void CrSubfieldsRetrieverBaseBeginLoadWorkerShouldCallCanUseFieldType()
        {
            // Arrange.
            var vm = new ExpressionDesignerWindowViewModelBase.CrSubfieldsRetrieverBase(1);
            var sourceFields = new SourceField(new SourceFieldList()) { SystemName = "Ref" };
            var fields = new FieldList();
            Mock.Arrange(() => fields.IsReadOnly).Returns(false);
            fields.Add(new FieldInfo(1, "F", "F", new FieldTypeInfo("String", "String", false), string.Empty, ColumnTypes.String, Guid.Empty, false, false, false));

            Mock.Arrange(() => FieldList.BeginGetFieldList(1, Arg.IsAny<EventHandler<DataPortalResult<FieldList>>>())).DoInstead<int, EventHandler<DataPortalResult<FieldList>>>((pid, evt) => evt(null, new DataPortalResult<FieldList>(fields, null, null)));
            IEnumerable<IExpressionField> expressionFields = null;

            Mock.Arrange(() => ExpressionDesignerWindowViewModelBase.CrSubfieldsRetrieverBase.CanUseFieldType(Arg.IsAny<FieldTypeInfo>())).Returns(true);

            var processInfo = new PublishedProcessInfo();
            Mock.Arrange(() => processInfo.ProcessId).Returns(1);
            vm.BeginLoadWorker(sourceFields, (f, fl) => { expressionFields = fl; }, processInfo);

            Assert.AreEqual(2, expressionFields.Count());

            Mock.Arrange(() => ExpressionDesignerWindowViewModelBase.CrSubfieldsRetrieverBase.CanUseFieldType(Arg.IsAny<FieldTypeInfo>())).Returns(false);

            var processInfo2 = new PublishedProcessInfo();
            Mock.Arrange(() => processInfo2.ProcessId).Returns(1);
            vm.BeginLoadWorker(sourceFields, (f, fl) => { expressionFields = fl; }, processInfo2);

            Assert.AreEqual(1, expressionFields.Count());
        }
예제 #7
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ChecklistQuestionField"/> class.
        /// </summary>
        /// <param name="field">
        /// The field.
        /// </param>
        /// <param name="process">
        /// The process.
        /// </param>
        /// <param name="questionSource">
        /// The question source.
        /// </param>
        /// <exception cref="ArgumentNullException">
        /// The <paramref name="field"/> parameter is null.
        /// </exception>
        /// <exception cref="ArgumentNullException">
        /// The <paramref name="process"/> parameter is null.
        /// </exception>
        public ChecklistQuestionField(FieldInfo field, PublishedProcessInfo process, ChecklistQuestionFieldSource questionSource)
        {
            if (field == null)
                throw new ArgumentNullException("field");

            if (process == null)
                throw new ArgumentNullException("process");

            _name = field.Name;
            _systemName = field.SystemName;
            _guid = field.Guid;
            _questionSource = questionSource;
            _sourceName = process.Name;
            _columnType = field.ColumnType;
        }
예제 #8
0
        private static void AddProcessIndexes(
            ProcessIndexCollection indexCollection,
            PublishedProcessInfo process,
            IEnumerable<DestinationField> destinationFields,
            bool createIndexesOnKeyFields)
        {
            var destinationFieldList = destinationFields.ToArray();
            var processFields = FieldList.GetFieldList(process.ProcessId);

            if (createIndexesOnKeyFields)
            {
                var fieldToProcessMap = GetFieldToProcessMap(process, processFields);

                foreach (var keyField in destinationFieldList.Where(f => f.IsKey && IsMapped(f)))
                {
                    PublishedProcessInfo declaringProcess;

                    if (fieldToProcessMap.TryGetValue(keyField.SystemName, out declaringProcess))
                    {
                        var indexFields = new List<ProcessIndexField> { ProcessIndexField.CreateProcessIndexField(keyField.SystemName, DbSortOrder.Ascending) };
                        var index = ProcessIndex.CreateProcessIndex(declaringProcess.ProcessId, false, indexFields);

                        if (!indexCollection.Contains(index))
                            indexCollection.Add(index);
                    }
                }
            }

            foreach (var subfield in destinationFieldList)
            {
                var processField = processFields.FirstOrDefault(f => f.SystemName == subfield.SystemName);
                if (processField == null)
                    continue;

                var referencedProcess = GetReferencedProcess(processField);
                if (referencedProcess == null)
                    continue;

                AddProcessIndexes(indexCollection, referencedProcess, subfield.Subfields.OfType<DestinationField>(), NeedsIndexesOnSubfields(processField));
            }
        }
 /// <summary>
 /// Makes the sub title.
 /// </summary>
 /// <param name="process">The process.</param>
 /// <returns>System.String.</returns>
 protected virtual string MakeSubTitle(PublishedProcessInfo process)
 {
     return process != null ? process.Name : "[process not selected]";
 }
        private static bool CanIncludeInProcessToModifyList(PublishedProcessInfo process)
        {
            if (process.SystemName == Constants.AccountProcessName)
                return true;

            return !Constants.SealedProcessesPlus.Contains(process.SystemName);
        }
        /// <summary>
        /// Initializes the current <see cref="ProcessDataTriggerViewModel"/>.
        /// </summary>
        /// <param name="model">The model.</param>
        /// <param name="parent">The parent view model.</param>
        public void Initialize(ProcessDataTriggerEdit model, IProcessDataTriggersViewModel parent)
        {
            if (model == null)
                throw new ArgumentNullException("model");

            if (parent == null)
                throw new ArgumentNullException("parent");

            ParentViewModel = parent;
            Model = model;
            _processList = parent.PublishedProcesses.Where(CanIncludeInProcessToModifyList).ToList();
            _processToModify = _processList.FirstOrDefault(p => p.SystemName == Model.ProcessToModifySystemName);

            if (_processToModify == null)
            {
                Model.ProcessToModifySystemName = null;
            }
        }
예제 #12
0
        /// <summary>
        /// Gets the process definition.
        /// </summary>
        /// <param name="process">The process.</param>
        /// <returns>The ReferenceProcessDefinition.</returns>
        public ReferenceProcessDefinition GetProcessDefinition(PublishedProcessInfo process)
        {
            var processDefinition = new ReferenceProcessDefinition
            {
                Name = process.Name,
                SystemName = process.SystemName
            };

            if (process.BaseProcess != null)
            {
                processDefinition.BaseProcess = GetProcessDefinition(process.BaseProcess);
            }

            return processDefinition;
        }
예제 #13
0
 /// <summary>
 /// Initializes the specified model.
 /// </summary>
 /// <param name="model">The model.</param>
 /// <param name="view">The view.</param>
 public void Initialize(PublishedProcessInfo model, ProcessViewInfo view = null)
 {
     PublishedProcess = model;
     ProcessView = view;
     LoadIcon();
 }
예제 #14
0
        /// <summary>
        /// Creates the process definition.
        /// </summary>
        /// <param name="process">The process.</param>
        /// <returns>ProcessDefinition.</returns>
        private ProcessDefinition CreateProcessDefinition(PublishedProcessInfo process)
        {
            var processDefinition = new ProcessDefinition { SystemName = process.SystemName };

            if (process.BaseProcess != null)
                processDefinition.BaseProcess = CreateProcessDefinition(process.BaseProcess);

            return processDefinition;
        }
 public void AddItem(PublishedProcessInfo item)
 {
     IsReadOnly = false;
     this.Add(item);
     IsReadOnly = true;
 }
예제 #16
0
 /// <summary>
 /// Loads the icon.
 /// </summary>
 /// <param name="process">The process.</param>
 protected virtual void LoadIcon(PublishedProcessInfo process)
 {
     if (process != null && process.IconId.HasValue)
         IconData.BeginGetIcon(
             process.IconId.Value,
             (o, result) =>
             {
                 if (result.Error == null)
                     Icon = result.Object;
             });
 }
 /// <summary>
 /// Creates a question field using a field from question process.
 /// </summary>
 /// <param name="field">
 /// The field.
 /// </param>
 /// <param name="process">
 /// The process.
 /// </param>
 /// <returns>
 /// The <see cref="IChecklistQuestionField"/>.
 /// </returns>
 public IChecklistQuestionField CreateQuestionProcessField(FieldInfo field, PublishedProcessInfo process)
 {
     return new ChecklistQuestionField(field, process, ChecklistQuestionFieldSource.QuestionProcess);
 }
        public void CrSubfieldsRetrieverBaseBeginLoadWorkerShouldCreateStringForMultiCrossRef()
        {
            // Arrange.
            var vm = new ExpressionDesignerWindowViewModelBase.CrSubfieldsRetrieverBase(1);
            var sourceFields = new SourceField(new SourceFieldList()) { SystemName = "Ref" };
            var fields = new FieldList();
            Mock.Arrange(() => fields.IsReadOnly).Returns(false);
            fields.Add(new FieldInfo(1, "Ref", "Ref", new FieldTypeInfo("MultiReference", "MultiReference", false), string.Empty, ColumnTypes.MultiReference, Guid.Empty, false, false, false));

            Mock.Arrange(() => FieldList.BeginGetFieldList(1, Arg.IsAny<EventHandler<DataPortalResult<FieldList>>>())).DoInstead<int, EventHandler<DataPortalResult<FieldList>>>((pid, evt) => evt(null, new DataPortalResult<FieldList>(fields, null, null)));

            IEnumerable<IExpressionField> expressionFields = null;
            var processInfo = new PublishedProcessInfo();
            Mock.Arrange(() => processInfo.ProcessId).Returns(1);
            vm.BeginLoadWorker(sourceFields, (f, fl) => { expressionFields = fl; }, processInfo);

            Assert.AreEqual(2, expressionFields.Count());

            var firstField = expressionFields.First(x => x.Name == "Ref") as SourceField;
            Assert.AreEqual(NodeDataType.String, firstField.DataType);
            Assert.AreEqual(NodeDataType.String, firstField.Connector.DataType);
            Assert.AreEqual("Ref.Ref", firstField.SystemName);
            Assert.IsNull(firstField.SubfieldsRetriever);
        }
예제 #19
0
        private static Dictionary<string, PublishedProcessInfo> GetFieldToProcessMap(PublishedProcessInfo process, IEnumerable<FieldInfo> processFields)
        {
            var map = new Dictionary<string, PublishedProcessInfo>();

            foreach (var field in processFields)
            {
                var declaringProcess = process.GetBaseProcess(field.DefinedIn);
                if (declaringProcess != null)
                {
                    map[field.SystemName] = declaringProcess;
                }
            }

            map[Constants.IdColumnName] = process;

            if (process.IsStateEnabled)
            {
                map[Constants.CurrentStateColumnName] = process;
            }

            if (process.ProcessOption == ProcessOption.VersionEnabled)
            {
                map[Constants.VersionNumber] = process;
                map[Constants.VersionDate] = process;
                map[Constants.VersionMasterId] = process;
            }

            return map;
        }
 /// <summary>
 /// Makes the sub title.
 /// </summary>
 /// <param name="process">The process.</param>
 /// <returns>System.String.</returns>
 protected override string MakeSubTitle(PublishedProcessInfo process)
 {
     var result = base.MakeSubTitle(process);
     return result;
 }