Beispiel #1
0
        public void ActivityConditionTest()
        {
            TestContext.Properties["Amount"] = 2500;    //不满足条件
            WfRuntime.ProcessContext.EvaluateActivityCondition += new Expression.CalculateUserFunction(ProcessContext_EvaluateTransition);

            IWfProcess process = WfProcessTestCommon.StartupSimpleProcessDescriptorWithActivityCondition();

            Assert.AreEqual(WfActivityStatus.Running, process.InitialActivity.Status);

            IWfActivityDescriptor nextActivityDesp = process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity;
            WfTransferParams      transferParams   = ProcessTestHelper.GetInstanceOfWfTransferParams(nextActivityDesp, OguObject.requestor);

            process.MoveTo(transferParams);

            Assert.AreEqual(WfActivityStatus.Completed, process.InitialActivity.Status);

            Assert.AreEqual(WfActivityStatus.Pending, process.CurrentActivity.Status);

            IWfActivity activity = WfRuntime.ProcessContext.OriginalActivity;

            WfRuntime.PersistWorkflows();

            TestContext.Properties["Amount"] = 7500;

            WfPendingActivityInfoCollection pendingActivities = WfPendingActivityInfoAdapter.Instance.Load(builder => builder.AppendItem("ACTIVITY_ID", process.CurrentActivity.ID));

            pendingActivities.ForEach(pai => WfRuntime.ProcessPendingActivity(pai));
        }
        private static void CheckOperationAndStatusAfterWithdrawProcess(string processId, string fromActivityId, string toActivityId)
        {
            IWfProcess process = WfRuntime.GetProcessByProcessID(processId);
            bool       flag    = false;

            for (int i = 0; i < process.Activities.Count; i++)
            {
                if (flag)
                {
                    Assert.AreEqual(WfActivityStatus.NotRunning, process.Activities[i].Status);
                    Assert.IsFalse(ProcessTestHelper.ExistsActivityUserTasks(process.Activities[i].ID, TaskStatus.Ban));
                }
                if (process.Activities[i].ID == toActivityId)
                {
                    Assert.AreEqual(WfActivityStatus.Running, process.Activities[i].Status);
                    Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(process.Activities[i].ID, TaskStatus.Ban));
                    flag = true;
                }

                if (process.Activities[i].ID == fromActivityId)
                {
                    Assert.IsFalse(ProcessTestHelper.ExistsActivityUserTasks(process.Activities[i].ID, TaskStatus.Ban));
                    Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(process.Activities[i].ID, TaskStatus.Yue));
                    break;
                }
            }
        }
        public void CancelProcessInOtherActivityTest()
        {
            IWfProcess process = WfProcessTestCommon.StartupProcessWithAssignee();

            WfRuntime.PersistWorkflows();

            process = WfRuntime.GetProcessByProcessID(process.ID);

            IWfActivityDescriptor nextActivityDesp = process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity;

            WfTransferParams tp = ProcessTestHelper.GetInstanceOfWfTransferParams(nextActivityDesp, OguObject.requestor);

            process.MoveTo(tp);

            WfRuntime.PersistWorkflows();

            UserTaskCollection tasks = UserTaskAdapter.Instance.LoadUserTasks(b => b.AppendItem("ACTIVITY_ID", process.CurrentActivity.ID));

            Console.WriteLine("Current Activity ID: {0}", process.CurrentActivity.ID);
            Console.WriteLine("User Task Count: {0}", tasks.Count);

            process = CancelProcess(process, false);

            UserTaskCollection userAccomlishedTasks = UserTaskAdapter.Instance.GetUserAccomplishedTasks(UserTaskIDType.ActivityID, UserTaskFieldDefine.All, false, process.CurrentActivity.ID);

            Console.WriteLine("User Accomplished Task Count: {0}", userAccomlishedTasks.Count);

            Assert.AreEqual(tasks.Count, userAccomlishedTasks.Count);
        }
        public void CancelSerialSubProcessTest()
        {
            IWfProcess process = GetProcessInstanceWithBranchProcessRunning(WfBranchProcessExecuteSequence.Serial, WfBranchProcessBlockingType.WaitAllBranchProcessesComplete);

            IWfProcess branchProcess = process.CurrentActivity.BranchProcessGroups[0].Branches[0];

            CheckOperationAndStatusBeforeCancelProcess(branchProcess);

            CancelProcess(branchProcess, false);

            process = WfRuntime.GetProcessByProcessID(process.ID);
            //检查第二个流程是否启动
            branchProcess = process.CurrentActivity.BranchProcessGroups[0].Branches[1];
            Assert.AreEqual(WfProcessStatus.Running, branchProcess.Status);

            ProcessTestHelper.CompleteActivityBranchProcessesByBlockingType(process.CurrentActivity, WfBranchProcessBlockingType.WaitAllBranchProcessesComplete);

            WfRuntime.PersistWorkflows();

            ProcessTestHelper.ProcessPendingActivity(process.CurrentActivity.ID);

            process       = WfRuntime.GetProcessByProcessID(process.ID);
            branchProcess = process.CurrentActivity.BranchProcessGroups[0].Branches[1];
            Assert.AreEqual(WfProcessStatus.Completed, branchProcess.Status, "第二个子流程的状态");
        }
Beispiel #5
0
        public void WfAclAdapterDataTest()
        {
            IWfProcess process = WfProcessTestCommon.StartupProcessWithAssignee();

            ((WfProcess)process).ResourceID = "resource2";

            ProcessTestHelper.MoveToAndSaveNextActivity(OguObject.approver2, process);

            process = WfRuntime.GetProcessByProcessID(process.ID);
            ProcessTestHelper.MoveToAndSaveNextActivity(OguObject.requestor, process);

            process = WfRuntime.GetProcessByProcessID(process.ID);
            ProcessTestHelper.MoveToAndSaveNextActivity(OguObject.approver2, process);

            string userId = process.CurrentActivity.Assignees[0].User.ID;

            WfAclItemCollection itemColl = WfAclAdapter.Instance.Load(builder =>
            {
                builder.AppendItem("RESOURCE_ID", "resource2");
                builder.AppendItem("OBJECT_ID", userId);
            });

            Assert.AreEqual(1, itemColl.Count, "相同的人只保留一条记录");

            WfAclItemCollection coll = WfAclAdapter.Instance.LoadByResourceID("resource2");

            Assert.AreEqual(2, coll.Count, "只会有两条记录.在一个资源下同一个人只会有一条记录存在.但是如果存在委托时,则个数就不定");

            foreach (WfAclItem data in coll)
            {
                WfAclAdapter.Instance.Delete(data);
            }
        }
Beispiel #6
0
        public void ReturnExecutorTest()
        {
            IWfProcess process = WfProcessTestCommon.StartupProcessWithAssignee();

            ProcessTestHelper.MoveToAndSaveNextActivityWithDefSelectTranstion(OguObject.approver1, process);

            process = WfRuntime.GetProcessByProcessID(process.ID);
            ProcessTestHelper.MoveToAndSaveNextActivityWithDefSelectTranstion(OguObject.approver2, process);

            process = WfRuntime.GetProcessByProcessID(process.ID);
            ProcessTestHelper.MoveToAndSaveNextActivityWithDefSelectTranstion(OguObject.requestor, process);

            process = WfRuntime.GetProcessByProcessID(process.ID);
            WfReturnExecutor returnExec = new WfReturnExecutor(process.CurrentActivity, process.Activities[1]);

            returnExec.Execute();

            process = WfRuntime.GetProcessByProcessID(process.ID);
            Assert.IsTrue(process.CurrentActivity.CreatorInstanceID != "");
            Assert.AreEqual(process.ElapsedActivities[process.ElapsedActivities.Count - 1].ID, process.CurrentActivity.CreatorInstanceID);

            WfMainStreamActivityDescriptorCollection coll = process.Descriptor.GetMainStreamActivities();

            Assert.AreEqual(6, coll.Count);
            Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(process.CurrentActivity.ID, TaskStatus.Ban));
        }
        public void WaitAllCompleteOfSerialBranchProcessTest()
        {
            IWfProcess wfProcess = GetProcessInstanceWithBranchProcessRunning(WfBranchProcessExecuteSequence.Serial, WfBranchProcessBlockingType.WaitAllBranchProcessesComplete);

            AssertProcessStatus(wfProcess);

            CheckProcessRelationOperationAndStatus(wfProcess, false);

            //第一个子流程办结
            wfProcess.Activities[1].BranchProcessGroups[0].Branches[0].CompleteProcess(true);
            WfRuntime.PersistWorkflows();

            wfProcess = WfRuntime.GetProcessByProcessID(wfProcess.ID);
            Assert.AreEqual(WfProcessStatus.Completed, wfProcess.CurrentActivity.BranchProcessGroups[0].Branches[0].Status);
            Assert.AreEqual(WfProcessStatus.Running, wfProcess.CurrentActivity.BranchProcessGroups[0].Branches[1].Status);
            Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(wfProcess.CurrentActivity.BranchProcessGroups[0].Branches[1].InitialActivity.ID, TaskStatus.Ban));


            //第二个子流程办结
            wfProcess.CurrentActivity.BranchProcessGroups[0].Branches[1].CompleteProcess(true);
            WfRuntime.PersistWorkflows();


            ProcessTestHelper.ProcessPendingActivity(wfProcess.CurrentActivity.ID);

            IWfProcess wfProc = WfRuntime.GetProcessByProcessID(wfProcess.ID);

            Assert.AreEqual(WfProcessStatus.Completed, wfProc.CurrentActivity.BranchProcessGroups[0].Branches[0].Status);
            Assert.AreEqual(WfProcessStatus.Completed, wfProc.CurrentActivity.BranchProcessGroups[0].Branches[1].Status);

            Assert.AreEqual(WfActivityStatus.Running, wfProc.CurrentActivity.Status);
            Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(wfProc.CurrentActivity.ID, TaskStatus.Ban));
        }
Beispiel #8
0
        private static IWfProcess GetProcessInstanceWithAssigneesResource()
        {
            IWfProcess process = WfProcessTestCommon.StartupProcessWithAssignee();

            IWfActivityDescriptor nextActivityDesp = process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity;
            WfTransferParams      tp = ProcessTestHelper.GetInstanceOfWfTransferParams(nextActivityDesp, OguObject.approver2);

            process.MoveTo(tp);

            WfRuntime.PersistWorkflows();
            process = WfRuntime.GetProcessByProcessID(process.ID);

            IWfActivityDescriptor actDesp = process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity;
            WfActivityAssigneesResourceDescriptor actAssResDesp = new WfActivityAssigneesResourceDescriptor();

            actAssResDesp.ActivityKey = actDesp.Key;
            actDesp.Resources.Add(actAssResDesp);

            nextActivityDesp = process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity;
            WfTransferParams tpa = ProcessTestHelper.GetInstanceOfWfTransferParams(nextActivityDesp, OguObject.approver1);

            process.MoveTo(tpa);

            WfRuntime.PersistWorkflows();
            process = WfRuntime.GetProcessByProcessID(process.ID);
            return(process);
        }
Beispiel #9
0
        public void ActivityOperatorResourceTest()
        {
            IWfProcess process = WfProcessTestCommon.StartupProcessWithAssignee();

            IWfActivityDescriptor nextActivityDesp = process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity;
            WfTransferParams      tp = ProcessTestHelper.GetInstanceOfWfTransferParams(nextActivityDesp, OguObject.approver1);
            IUser requestor          = (IUser)OguObjectSettings.GetConfig().Objects["requestor"].Object;

            tp.Operator = requestor;

            process.MoveTo(tp);

            WfActivityOperatorResourceDescriptor resource = new WfActivityOperatorResourceDescriptor();

            resource.ActivityKey = process.InitialActivity.Descriptor.Key;
            process.CurrentActivity.Descriptor.Resources.Add(resource);
            OguDataCollection <IUser> users = process.CurrentActivity.Descriptor.Resources.ToUsers();

            Assert.IsTrue(users.Count > 0);
            Assert.AreEqual(requestor.ID, users[0].ID, "验证资源中的人员是否是之前活动的操作人");

            WfRuntime.PersistWorkflows();
            process = WfRuntime.GetProcessByProcessID(process.ID);

            users = process.CurrentActivity.Descriptor.Resources.ToUsers();

            Assert.IsTrue(users.Count > 0, "重新加载后资源中应该有人");
            Assert.AreEqual(requestor.ID, users[0].ID, "重新加载后验证资源中的人员是否是之前活动的操作人");
        }
Beispiel #10
0
        public void ReturnExecutorTestReplay()
        {
            IWfProcess process = WfProcessTestCommon.StartupProcessWithAssignee();

            ProcessTestHelper.MoveToAndSaveNextActivityWithDefSelectTranstion(OguObject.approver1, process);

            process = WfRuntime.GetProcessByProcessID(process.ID);
            ProcessTestHelper.MoveToAndSaveNextActivityWithDefSelectTranstion(OguObject.approver2, process);

            //退件到初始活动
            process = WfRuntime.GetProcessByProcessID(process.ID);
            WfReturnExecutor returnExec = new WfReturnExecutor(process.CurrentActivity, process.Activities[0]);

            returnExec.Execute();

            Assert.IsTrue(process.CurrentActivity.CreatorInstanceID != "");
            Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(process.CurrentActivity.ID, TaskStatus.Ban));

            process = WfRuntime.GetProcessByProcessID(process.ID);
            IWfActivity act = process.Activities.FindActivityByDescriptorKey(process.CurrentActivity.Descriptor.AssociatedActivityKey);

            Assert.AreEqual(act.Assignees.Count, process.CurrentActivity.Assignees.Count);

            Assert.AreEqual(process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity.AssociatedActivityKey, act.Descriptor.ToTransitions[0].ToActivity.Key);
            Assert.IsTrue(process.Activities.FindActivityByDescriptorKey(process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity.Key).Assignees.Count > 0);
        }
Beispiel #11
0
        public void ReturnTestWithBranchActivity()
        {
            IWfProcessDescriptor desp = WfProcessTestCommon.CreateProcessDescriptor();

            desp.InitialActivity.Resources.Add(new WfUserResourceDescriptor((IUser)OguObjectSettings.GetConfig().Objects["requestor"].Object));

            GetProcDespWithBranchActivities(desp.Activities[1], 2);

            WfProcessStartupParams startupParams = WfProcessTestCommon.GetInstanceOfWfProcessStartupParams(desp);
            IWfProcess             process       = WfRuntime.StartWorkflow(startupParams);

            ProcessTestHelper.MoveToAndSaveNextActivityWithDefSelectTranstion(OguObject.approver1, process);

            process = WfRuntime.GetProcessByProcessID(process.ID);
            ProcessTestHelper.MoveToAndSaveNextActivityWithDefSelectTranstion(OguObject.approver2, process);

            process = WfRuntime.GetProcessByProcessID(process.ID);
            Assert.AreEqual(2, process.ElapsedActivities.Count);
            WfRuntime.ProcessContext.ActivityChangingContext.CreatorInstanceID = process.CurrentActivity.ID;
            process.CurrentActivity.CopyMainStreamActivities(process.Activities[1], null, WfControlOperationType.Return); //退件
            ProcessTestHelper.MoveToAndSaveNextActivityWithDefSelectTranstion(OguObject.requestor, process);

            process = WfRuntime.GetProcessByProcessID(process.ID);

            Assert.IsTrue(process.CurrentActivity.CreatorInstanceID.IsNotEmpty());
            Assert.AreEqual(process.ElapsedActivities[2].ID, process.CurrentActivity.CreatorInstanceID);

            Assert.AreEqual(10, process.Activities.Count);
        }
Beispiel #12
0
        public void MainStreamActivitiesWithConditionActivityPassed()
        {
            IWfProcessDescriptor desp = WfProcessTestCommon.CreateProcessDescriptor();

            desp.InitialActivity.Resources.Add(new WfUserResourceDescriptor((IUser)OguObjectSettings.GetConfig().Objects["requestor"].Object));

            IWfActivityDescriptor actDesp = desp.Activities[1];

            AddActivitiesDespToSameActivityDesp(actDesp, 2);
            ToTransitionsDescriptorCollection transDespColl = actDesp.ToTransitions;

            SetTransitionCondition(transDespColl[0], false, 1);
            SetTransitionCondition(transDespColl[1], true, 3);

            WfProcessStartupParams startupParams = WfProcessTestCommon.GetInstanceOfWfProcessStartupParams(desp);

            IWfProcess process = WfRuntime.StartWorkflow(startupParams);

            ProcessTestHelper.MoveToAndSaveNextActivityWithDefSelectTranstion(OguObject.approver1, process);

            process = WfRuntime.GetProcessByProcessID(process.ID);
            ProcessTestHelper.MoveToAndSaveNextActivityWithDefSelectTranstion(OguObject.approver2, process);

            process = WfRuntime.GetProcessByProcessID(process.ID);
            ProcessTestHelper.MoveToAndSaveNextActivityWithDefSelectTranstion(OguObject.requestor, process);

            process = WfRuntime.GetProcessByProcessID(process.ID);
            Assert.AreEqual(3, process.ElapsedActivities.Count);

            WfMainStreamActivityDescriptorCollection coll = process.Descriptor.GetMainStreamActivities();

            Assert.AreEqual(process.Activities.Count - 1, coll.Count);

            Assert.AreEqual(transDespColl[1].ToActivity.Key, coll[2].Activity.Key, "此处为动态添加的活动");
        }
Beispiel #13
0
        public static void MoveToAndSaveNextActivityWithDefSelectTranstion(OguObject oguObject, IWfProcess process)
        {
            IWfActivityDescriptor nextActivityDesp = process.CurrentActivity.Descriptor.ToTransitions.FindDefaultSelectTransition().ToActivity;
            WfTransferParams      transferParams   = ProcessTestHelper.GetInstanceOfWfTransferParams(nextActivityDesp, oguObject);

            process.MoveTo(transferParams);
            WfRuntime.PersistWorkflows();
        }
Beispiel #14
0
        private static void MoveToExecutor(IWfProcess process)
        {
            IWfActivityDescriptor nextActivityDesp = process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity;
            WfTransferParams      pa       = ProcessTestHelper.GetInstanceOfWfTransferParams(nextActivityDesp, OguObject.approver1);
            WfMoveToExecutor      moveExec = new WfMoveToExecutor(process.CurrentActivity, process.CurrentActivity, pa);

            moveExec.Execute();
        }
        public void WaitNoneCompleteOfSerialBranchProcessTest()
        {
            IWfProcess wfProcess = GetProcessInstanceWithBranchProcessRunning(WfBranchProcessExecuteSequence.Serial, WfBranchProcessBlockingType.WaitNoneOfBranchProcessComplete);

            Assert.AreEqual(WfActivityStatus.Running, wfProcess.CurrentActivity.Status);
            Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(wfProcess.CurrentActivity.ID, TaskStatus.Ban));

            Assert.AreEqual(WfProcessStatus.Running, wfProcess.CurrentActivity.BranchProcessGroups[0].Branches[0].Status);
            Assert.AreEqual(WfProcessStatus.NotRunning, wfProcess.CurrentActivity.BranchProcessGroups[0].Branches[1].Status);
        }
 private void CheckOperationAndStatusAfterCancelProcess(IWfProcess process)
 {
     Assert.AreEqual(WfProcessStatus.Aborted, process.Status);
     Assert.AreEqual(WfActivityStatus.Aborted, process.CurrentActivity.Status);
     Assert.IsFalse(ProcessTestHelper.ExistsActivityUserTasks(process.CurrentActivity.ID, TaskStatus.Ban));
     if (process.CurrentActivity.Descriptor.ActivityType != WfActivityType.CompletedActivity)
     {
         Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(process.CurrentActivity.ID, TaskStatus.Yue));
     }
 }
        private static IWfProcess GetProcessInstanceWithBranchProcessRunning(WfBranchProcessExecuteSequence sequence, WfBranchProcessBlockingType blockingType)
        {
            IWfProcess       process = WfProcessTestCommon.StartupProcessWithAssignee();
            WfTransferParams tp      = ProcessTestHelper.GetInstanceOfWfTransferParams(process, sequence, blockingType);

            process.MoveTo(tp);

            WfRuntime.PersistWorkflows();

            return(WfRuntime.GetProcessByProcessID(process.ID));
        }
        private static void CheckOperationAndStatusBeforeCancelProcess(IWfProcess process)
        {
            Assert.AreEqual(WfProcessStatus.Running, process.Status);

            if (process.CurrentActivity.BranchProcessGroups.IsBlocking(WfBranchGroupBlockingType.WaitAllBranchGroupsComplete))
            {
                Assert.AreEqual(WfActivityStatus.Pending, process.CurrentActivity.Status);
                Assert.IsFalse(ProcessTestHelper.ExistsActivityUserTasks(process.CurrentActivity.ID, TaskStatus.Ban));
            }
            else
            {
                Assert.AreEqual(WfActivityStatus.Running, process.CurrentActivity.Status);
                Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(process.CurrentActivity.ID, TaskStatus.Ban));
            }
        }
Beispiel #19
0
        public void AddApproverExecutorTest()
        {
            //Initial  NormalActivity  NormalActivity1 NormalActivity2 NormalActivity3 Completed
            IUser user = (IUser)OguObjectSettings.GetConfig().Objects["requestor"].Object;

            IWfProcessDescriptor     procDesp = WfProcessTestCommon.CreateProcessDescriptor();
            WfUserResourceDescriptor userDesp = new WfUserResourceDescriptor(user);

            procDesp.InitialActivity.Resources.Add(userDesp);

            WfProcessStartupParams  startParams = WfProcessTestCommon.GetInstanceOfWfProcessStartupParams(procDesp);
            WfStartWorkflowExecutor exec        = new WfStartWorkflowExecutor(null, startParams);
            IWfProcess proc = exec.Execute();             //启动流程

            IWfProcess wfp = WfRuntime.GetProcessByProcessID(proc.ID);

            MoveToExecutor(wfp);            //流转一步 ,即第2个节点

            IWfProcess           p         = WfRuntime.GetProcessByProcessID(proc.ID);
            WfAssigneeCollection assignees = new WfAssigneeCollection();

            assignees.Add((IUser)OguObjectSettings.GetConfig().Objects[OguObject.approver1.ToString()].Object);

            WfAddApproverExecutor addExec = new WfAddApproverExecutor(p.CurrentActivity, p.CurrentActivity, assignees);

            addExec.Execute();             //加签,即流转到加签点上

            IWfProcess process = WfRuntime.GetProcessByProcessID(p.ID);

            Assert.AreEqual(process.Descriptor.GetMainStreamActivities().Count, process.Activities.Count - 2, "动态添加两个活动,因被加签人要回到加签人");
            Assert.AreEqual(2, process.ElapsedActivities.Count);
            Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(process.CurrentActivity.ID, TaskStatus.Ban));
            Assert.IsTrue(process.CurrentActivity.Descriptor.ToTransitions.Count == 1);
            Assert.IsNotNull(process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity);

            IWfProcess wfProcess9 = WfRuntime.GetProcessByProcessID(process.ID);

            WfWithdrawExecutor withdrawExec = new WfWithdrawExecutor(wfProcess9.CurrentActivity, wfProcess9.CurrentActivity);

            withdrawExec.Execute();

            IWfProcess wfProcess1 = WfRuntime.GetProcessByProcessID(wfProcess9.ID);

            Assert.AreEqual(wfProcess1.Activities.Count, wfProcess1.Descriptor.GetMainStreamActivities().Count, "此处应该撤回到加签的活动点上,同时被加签的两个点都应该移除");
            Assert.AreEqual(1, wfProcess1.ElapsedActivities.Count);
            Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(wfProcess1.CurrentActivity.ID, TaskStatus.Ban));
            Assert.IsTrue(wfProcess1.CurrentActivity.Descriptor.ToTransitions.Count == 1);
        }
Beispiel #20
0
        public void WfActivityAssigneesResourceTest()
        {
            IWfProcess process = GetProcessInstanceWithAssigneesResource();

            Assert.AreEqual(process.CurrentActivity.Assignees[0].User.ID, process.CurrentActivity.Descriptor.Resources.ToUsers()[0].ID);

            IWfActivityDescriptor actDesp = process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity;
            WfTransferParams      par     = new WfTransferParams(actDesp);

            par.Assignees.Add(actDesp.FromTransitions[0].FromActivity.Resources.ToUsers()[0]);
            process.MoveTo(par);

            WfRuntime.PersistWorkflows();
            process = WfRuntime.GetProcessByProcessID(process.ID);
            Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(process.CurrentActivity.ID, TaskStatus.Ban));
        }
        public void CancelProcessAndBranchProcessCompleted()
        {
            IWfProcess process = GetProcessInstanceWithBranchProcessRunning(WfBranchProcessExecuteSequence.Parallel, WfBranchProcessBlockingType.WaitAnyoneBranchProcessComplete);

            ProcessTestHelper.CompleteActivityBranchProcessesByBlockingType(process.CurrentActivity, WfBranchProcessBlockingType.WaitAnyoneBranchProcessComplete);
            ProcessTestHelper.ProcessPendingActivity(process.CurrentActivity.ID);

            Assert.AreEqual(WfProcessStatus.Completed, process.CurrentActivity.BranchProcessGroups[0].Branches[0].Status);
            Assert.AreEqual(WfProcessStatus.Running, process.CurrentActivity.BranchProcessGroups[0].Branches[1].Status);

            CancelProcess(process, true);

            process = WfRuntime.GetProcessByProcessID(process.ID);
            CheckOperationAndStatusAfterCancelProcess(process.Activities[1].BranchProcessGroups[0].Branches[0]);
            CheckOperationAndStatusAfterCancelProcess(process.Activities[1].BranchProcessGroups[0].Branches[1]);
        }
        private static void CheckProcessRelationOperationAndStatus(IWfProcess wfProcess, bool isParallel)
        {
            Assert.AreEqual(WfActivityStatus.Pending, wfProcess.CurrentActivity.Status);
            Assert.IsFalse(ProcessTestHelper.ExistsActivityUserTasks(wfProcess.CurrentActivity.ID, TaskStatus.Ban));

            if (isParallel)
            {
                wfProcess.CurrentActivity.BranchProcessGroups[0].Branches.Exists(p => p.Status == WfProcessStatus.Running);
                wfProcess.CurrentActivity.BranchProcessGroups[0].Branches.Exists(p => ProcessTestHelper.ExistsActivityUserTasks(p.ID, TaskStatus.Ban));
            }
            else
            {
                Assert.AreEqual(WfProcessStatus.Running, wfProcess.CurrentActivity.BranchProcessGroups[0].Branches[0].Status);
                Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(wfProcess.CurrentActivity.BranchProcessGroups[0].Branches[0].CurrentActivity.ID, TaskStatus.Ban));
                Assert.AreEqual(WfProcessStatus.NotRunning, wfProcess.Activities[1].BranchProcessGroups[0].Branches[1].Status);
            }
        }
        public void WaitAnyoneCompleteOfSerialBranchProcessTest()
        {
            IWfProcess wfProcess = GetProcessInstanceWithBranchProcessRunning(WfBranchProcessExecuteSequence.Serial, WfBranchProcessBlockingType.WaitAnyoneBranchProcessComplete);

            CheckProcessRelationOperationAndStatus(wfProcess, false);

            //
            ProcessTestHelper.CompleteActivityBranchProcessesByBlockingType(wfProcess.CurrentActivity, WfBranchProcessBlockingType.WaitAnyoneBranchProcessComplete);
            ProcessTestHelper.ProcessPendingActivity(wfProcess.CurrentActivity.ID);

            IWfProcess wfProc = WfRuntime.GetProcessByProcessID(wfProcess.ID);

            Assert.AreEqual(WfProcessStatus.Completed, wfProc.CurrentActivity.BranchProcessGroups[0].Branches[0].Status);
            Assert.AreEqual(WfProcessStatus.Running, wfProc.CurrentActivity.BranchProcessGroups[0].Branches[1].Status);
            Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(wfProcess.CurrentActivity.BranchProcessGroups[0].Branches[1].InitialActivity.ID, TaskStatus.Ban));
            Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(wfProc.CurrentActivity.ID, TaskStatus.Ban));
        }
        public void WaitAllCompleteOfParallelBranchProcessTest()
        {
            IWfProcess wfProcess = GetProcessInstanceWithBranchProcessRunning(WfBranchProcessExecuteSequence.Parallel, WfBranchProcessBlockingType.WaitAllBranchProcessesComplete);

            AssertProcessStatus(wfProcess);

            CheckProcessRelationOperationAndStatus(wfProcess, true);

            //
            ProcessTestHelper.CompleteActivityBranchProcessesByBlockingType(wfProcess.CurrentActivity, WfBranchProcessBlockingType.WaitAllBranchProcessesComplete);
            ProcessTestHelper.ProcessPendingActivity(wfProcess.CurrentActivity.ID);

            IWfProcess wfProc = WfRuntime.GetProcessByProcessID(wfProcess.ID);

            Assert.AreEqual(WfActivityStatus.Running, wfProc.CurrentActivity.Status);
            Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(wfProc.CurrentActivity.ID, TaskStatus.Ban));
            wfProc.CurrentActivity.BranchProcessGroups[0].Branches.Exists(p => p.Status == WfProcessStatus.Completed);
        }
        public void WithdrawAndReplayRunProcessActivityWithBranchProcess()
        {
            IWfProcess process = GetProcessInstance(false);

            string fromActivityId = process.CurrentActivity.ID;

            process.Withdraw(process.Activities[0], true);            //撤回
            WfRuntime.PersistWorkflows();

            CheckOperationAndStatusAfterWithdrawProcess(process.ID, fromActivityId, process.Activities[0].ID);

            process = WfRuntime.GetProcessByProcessID(process.ID);
            WfTransferParams pa = ProcessTestHelper.GetInstanceOfWfTransferParams(process, WfBranchProcessExecuteSequence.Parallel, WfBranchProcessBlockingType.WaitAllBranchProcessesComplete);

            process.MoveTo(pa);

            Assert.AreEqual(4, process.CurrentActivity.BranchProcessGroups[0].Branches.Count, "当前节点的分支流程应为撤回前与当前的,即4");
        }
Beispiel #26
0
        public void ConsignExecutorTest()
        {
            IUser  user           = (IUser)OguObjectSettings.GetConfig().Objects["approver2"].Object;
            string procResourceID = GetStartWorkflowResourceID(user);
            string processID      = string.Empty;

            WfProcessCollection processes = WfRuntime.GetProcessByResourceID(procResourceID);

            processID = processes[0].ID;
            MoveToExecutor(processes[0]);
            Assert.AreEqual(1, processes[0].ElapsedActivities.Count);

            processes = WfRuntime.GetProcessByResourceID(procResourceID);
            List <IUser> users;

            ConsignExecutor(processes[0], out users);

            processes = WfRuntime.GetProcessByResourceID(procResourceID);
            Assert.AreEqual(3, processes.Count, "共3个流程,主流程与两个子流程");

            IWfProcess proc = WfRuntime.GetProcessByProcessID(processID);

            Assert.AreEqual(7, proc.Activities.Count);
            string k = proc.CurrentActivity.Descriptor.FromTransitions[0].FromActivity.Key;

            Assert.IsNotNull(proc.Activities.FindActivityByDescriptorKey(k).CreatorInstanceID, "添加会签点的活动确实没值");

            Assert.AreEqual(WfActivityStatus.Pending, proc.CurrentActivity.Status);            //NO
            Assert.AreEqual(users.Count, proc.CurrentActivity.BranchProcessGroups[0].Branches.Count);

            //使子流程完成
            proc = WfRuntime.GetProcessByProcessID(processID);
            ProcessTestHelper.CompleteActivityBranchProcessesByBlockingType(proc.CurrentActivity, WfBranchProcessBlockingType.WaitAllBranchProcessesComplete);
            WfRuntime.PersistWorkflows();
            ProcessTestHelper.ProcessPendingActivity(proc.CurrentActivity.ID);

            proc = WfRuntime.GetProcessByProcessID(processID);
            Assert.AreEqual(WfActivityStatus.Running, proc.CurrentActivity.Status, "此为添加的会签点");
            Assert.AreEqual(2, proc.CurrentActivity.BranchProcessGroups[0].Branches.Count, "存在两个子流程");
            Assert.AreEqual(2, proc.ElapsedActivities.Count);
            MoveToExecutor(proc);
            Assert.AreEqual(3, proc.ElapsedActivities.Count);
        }
        public void ProcessSerializeExecutionTimeTest()
        {
            IWfProcessDescriptor processDesc = WfProcessTestCommon.CreateSimpleProcessDescriptor();

            int totalProcesses = 40;

            //准备流程实例
            List <IWfProcess> processes = ProcessTestHelper.StartupMultiProcesses(processDesc, totalProcesses);

            ProcessTestHelper.OutputExecutionTime(() =>
            {
                foreach (IWfProcess process in processes)
                {
                    XElementFormatter formatter = new XElementFormatter();
                    XElement root = formatter.Serialize(process);
                }
            },
                                                  string.Format("序列化{0}个流程", totalProcesses));
        }
Beispiel #28
0
        public void BranchProcessStartTest()
        {
            IWfProcess process = WfProcessTestCommon.StartupSimpleProcessWithAssignee();

            WfTransferParams tp = ProcessTestHelper.GetInstanceOfWfTransferParams(process, WfBranchProcessExecuteSequence.Parallel, WfBranchProcessBlockingType.WaitAllBranchProcessesComplete);

            process.MoveTo(tp);

            Assert.AreEqual(1, process.CurrentActivity.BranchProcessGroups.Count);
            IWfBranchProcessGroup group = process.CurrentActivity.BranchProcessGroups[0];

            Assert.AreEqual(tp.BranchTransferParams[0].Template.BranchProcessKey, group.ProcessTemplate.BranchProcessKey);
            Assert.AreEqual(2, group.Branches.Count);
            Assert.AreEqual(tp.BranchTransferParams[0].Template.BranchProcessKey, group.Branches[0].Descriptor.Key);
            Assert.AreEqual(tp.BranchTransferParams[0].Template.BranchProcessKey, group.Branches[1].Descriptor.Key);
            Assert.AreEqual(WfProcessStatus.Running, group.Branches[0].Status);
            Assert.AreEqual(WfProcessStatus.Running, group.Branches[1].Status);

            Assert.AreEqual(OguObjectSettings.GetConfig().Objects["approver1"].Object.ID, group.Branches[0].InitialActivity.Assignees[0].User.ID);
            Assert.AreEqual(OguObjectSettings.GetConfig().Objects["approver2"].Object.ID, group.Branches[1].InitialActivity.Assignees[0].User.ID);
        }
Beispiel #29
0
        public void LoadProcessByActivityIDTest()
        {
            string     actId   = string.Empty;
            IWfProcess process = WfProcessTestCommon.StartupProcessWithAssignee();

            ((WfProcess)process).ResourceID = "resource2";

            actId = process.CurrentActivity.ID;
            ProcessTestHelper.MoveToAndSaveNextActivity(OguObject.approver2, process);

            process = WfRuntime.GetProcessByProcessID(process.ID);
            ProcessTestHelper.MoveToAndSaveNextActivity(OguObject.requestor, process);

            process = WfRuntime.GetProcessByProcessID(process.ID);
            ProcessTestHelper.MoveToAndSaveNextActivity(OguObject.approver2, process);

            process = WfRuntime.GetProcessByProcessID(process.ID);
            IWfProcess proc = WfRuntime.GetProcessByActivityID(actId);

            Assert.AreEqual(process.ID, proc.ID);
            Assert.AreEqual(process.CurrentActivity.ID, proc.CurrentActivity.ID);
        }
        private static IWfProcess GetProcessInstance(bool movetoCompletedActivity)
        {
            IWfProcess process = GetProcessInstanceWithBranchProcessRunning(WfBranchProcessExecuteSequence.Parallel, WfBranchProcessBlockingType.WaitAnyoneBranchProcessComplete);

            process = WfRuntime.GetProcessByProcessID(process.ID);

            if (movetoCompletedActivity)
            {
                //使第二个节点可以正常流转
                ProcessTestHelper.CompleteActivityBranchProcessesByBlockingType(process.CurrentActivity, WfBranchProcessBlockingType.WaitAnyoneBranchProcessComplete);
                ProcessTestHelper.ProcessPendingActivity(process.CurrentActivity.ID);

                IWfProcess wfProc = WfRuntime.GetProcessByProcessID(process.ID);

                Assert.AreEqual(WfActivityStatus.Running, wfProc.Activities[1].Status);
                Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(wfProc.CurrentActivity.ID, TaskStatus.Ban));
                Assert.AreEqual(WfProcessStatus.Completed, wfProc.CurrentActivity.BranchProcessGroups[0].Branches[0].Status);
                Assert.AreEqual(WfProcessStatus.Running, wfProc.CurrentActivity.BranchProcessGroups[0].Branches[1].Status);


                //初始节点已完成,从第二个节点开始
                for (int i = 2; i < process.Activities.Count; i++)
                {
                    if (process.Activities[i].Descriptor.ActivityType != WfActivityType.CompletedActivity)
                    {
                        process = WfRuntime.GetProcessByProcessID(process.ID);
                        WfTransferParams transferPara = new WfTransferParams(process.Activities[i].Descriptor);
                        transferPara.Assignees.Add((IUser)OguObjectSettings.GetConfig().Objects["requestor"].Object);

                        process.MoveTo(transferPara);
                        WfRuntime.PersistWorkflows();
                    }
                }
            }

            process = WfRuntime.GetProcessByProcessID(process.ID);
            return(process);
        }