[TestMethod]
        public void SetupCopyItemButtonWhenProcessSupportScheduling_GetCrossRefFieldList()
        {
            // arrange
            var parentModel = Mock.Create<BusinessBase>(Behavior.Loose);
            var expandableStep = new ExpandableStepPropBag(parentModel);

            var model = Mock.Create<FieldEdit>(Behavior.CallOriginal);

            var rcrStepEdit = Mock.Create<ReverseCrossRefRequiredStepEdit>(Behavior.CallOriginal);
            rcrStepEdit.DisplayMultiple = true;
            const int id = 1;
            rcrStepEdit.ReverseCrossRefProcess = CreatePublishedProcess(id);
            const string fieldName = "ResponsibilityPerson_f";
            rcrStepEdit.CrossRefFieldName = fieldName;

            Mock.Arrange(() => rcrStepEdit.IsChild).Returns(true);

            Mock.Arrange(() => model.StepList).Returns(new StepEditList { rcrStepEdit });
            Mock.Arrange(() => expandableStep.Model).Returns(model);

            var publishedProcess = Mock.Create<PublishedProcessInfo>();
            publishedProcess.Id = 1;
            const int otherProcessId = 2;
            Mock.Arrange(() => publishedProcess.ProcessId).Returns(otherProcessId);

            var publishedProcesses = new PublishedProcessesMock(new List<PublishedProcessInfo> { publishedProcess });
            var task = new Task<PublishedProcesses>(() => publishedProcesses);
            task.Start();

            Mock.Arrange(() => PublishedProcesses.GetPublishedProcessesAsync(Arg.IsAny<ReverseCrossRefProcessCriteria>())).Returns(task);

            Mock.Arrange(() => CrossRefFieldList.GetCrossRefFieldList(2, Arg.AnyGuid, Arg.IsAny<EventHandler<DataPortalResult<CrossRefFieldList>>>())).
                DoInstead((int processId, Guid parentProcessGuid, EventHandler<DataPortalResult<CrossRefFieldList>> callback) =>
                    callback(null, new DataPortalResult<CrossRefFieldList>(null, new Exception(), null)));

            var privateAccessor = new PrivateAccessor(expandableStep);

            // act
            privateAccessor.CallMethod("SetupCopyItemButtonWhenFieldIsReverseReference", new object[] { Guid.Empty });

            // assert
            Assert.IsFalse(expandableStep.CopyItemButtonIsEnabled);

            // arrange
            Mock.Arrange(() => CrossRefFieldList.GetCrossRefFieldList(2, Arg.AnyGuid, Arg.IsAny<EventHandler<DataPortalResult<CrossRefFieldList>>>())).
                DoInstead((int processId, Guid parentProcessGuid, EventHandler<DataPortalResult<CrossRefFieldList>> callback) =>
                    callback(null, new DataPortalResult<CrossRefFieldList>(new CrossRefFieldList(), null, null)));

            // act
            privateAccessor.CallMethod("SetupCopyItemButtonWhenFieldIsReverseReference", new object[] { Guid.Empty });

            // assert
            Assert.IsFalse(expandableStep.CopyItemButtonIsEnabled);

            // arrange
            Mock.Arrange(() => CrossRefFieldList.GetCrossRefFieldList(2, Arg.AnyGuid, Arg.IsAny<EventHandler<DataPortalResult<CrossRefFieldList>>>())).
                DoInstead((int processId, Guid parentProcessGuid, EventHandler<DataPortalResult<CrossRefFieldList>> callback) =>
                    callback(null, new DataPortalResult<CrossRefFieldList>(new CrossRefFieldListMock(new List<CrossRefFieldInfo> { Mock.Create<CrossRefFieldInfo>(Behavior.CallOriginal) }), null, null)));

            // act
            privateAccessor.CallMethod("SetupCopyItemButtonWhenFieldIsReverseReference", new object[] { Guid.Empty });

            // assert
            Assert.IsFalse(expandableStep.CopyItemButtonIsEnabled);

            // arrange
            var crossRefFieldInfo1 = Mock.Create<CrossRefFieldInfo>(Behavior.CallOriginal);
            Mock.Arrange(() => crossRefFieldInfo1.SystemName).Returns("eCarNumber_f");

            var crossRefFieldInfo2 = Mock.Create<CrossRefFieldInfo>(Behavior.CallOriginal);
            Mock.Arrange(() => crossRefFieldInfo2.SystemName).Returns(fieldName);

            Mock.Arrange(() => CrossRefFieldList.GetCrossRefFieldList(2, Arg.AnyGuid, Arg.IsAny<EventHandler<DataPortalResult<CrossRefFieldList>>>())).
                DoInstead((int processId, Guid parentProcessGuid, EventHandler<DataPortalResult<CrossRefFieldList>> callback) =>
                    callback(null, new DataPortalResult<CrossRefFieldList>(new CrossRefFieldListMock(new List<CrossRefFieldInfo> { crossRefFieldInfo1, crossRefFieldInfo2 }), null, null)));

            // act
            privateAccessor.CallMethod("SetupCopyItemButtonWhenFieldIsReverseReference", new object[] { Guid.Empty });

            // assert
            Assert.IsFalse(expandableStep.CopyItemButtonIsEnabled);

            // arrange
            Mock.Arrange(() => crossRefFieldInfo2.AllowMany).Returns(true);

            // act
            privateAccessor.CallMethod("SetupCopyItemButtonWhenFieldIsReverseReference", new object[] { Guid.Empty });

            // assert
            Assert.IsTrue(expandableStep.CopyItemButtonIsEnabled);
        [TestMethod]
        public void SetupCopyItemButtonWhenFieldIsReverseReference_GetPublishedProcessesAsync_ReturnFour_4()
        {
            // arrange
            var parentModel = Mock.Create<BusinessBase>(Behavior.Loose);
            var expandableStep = new ExpandableStepPropBag(parentModel);

            var model = Mock.Create<FieldEdit>(Behavior.CallOriginal);

            var rcrStepEdit = Mock.Create<ReverseCrossRefRequiredStepEdit>(Behavior.CallOriginal);
            rcrStepEdit.DisplayMultiple = true;
            const int id = 1;
            rcrStepEdit.ReverseCrossRefProcess = CreatePublishedProcess(id);
            rcrStepEdit.CrossRefFieldName = "ResponsibilityPerson_f";

            Mock.Arrange(() => rcrStepEdit.IsChild).Returns(true);

            Mock.Arrange(() => model.StepList).Returns(new StepEditList { rcrStepEdit });
            Mock.Arrange(() => expandableStep.Model).Returns(model);

            var publishedProcesses = new PublishedProcessesMock(new List<PublishedProcessInfo> { new PublishedProcessInfo { Id = id } });

            Mock.Arrange(() => PublishedProcesses.GetPublishedProcessesAsync(Arg.IsAny<ReverseCrossRefProcessCriteria>()))
                .Returns(() =>
                {
                    var tcs = new TaskCompletionSource<PublishedProcesses>();
                    tcs.SetResult(publishedProcesses);
                    return tcs.Task;
                });

            try
            {
                // act
                new PrivateAccessor(expandableStep).CallMethod("SetupCopyItemButtonWhenFieldIsReverseReference", new object[] { Guid.Empty });
            }
            catch (Exception ex)
            {
                // assert
                Assert.Fail("Expected no exception, but got: " + ex.Message);
            }