Exemple #1
0
        public void CancelDelegationTest()
        {
            WfDelegation delegation = PrepareDelegation();

            WfDelegationAdapter.Instance.Update(delegation);

            try
            {
                IWfProcess process = WfProcessTestCommon.StartupProcessWithAssignee();

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

                process = WfRuntime.GetProcessByProcessID(process.ID);
                process.CancelProcess(false);                //取消
                WfRuntime.PersistWorkflows();

                process = WfRuntime.GetProcessByProcessID(process.ID);
                Assert.AreEqual(2, ProcessTestHelper.GetActivityUserTasks(process.CurrentActivity.ID, TaskStatus.Yue).Count, "应该产生两条待阅");
            }
            finally
            {
                WfDelegationAdapter.Instance.Delete(delegation);                 //清理委托
            }
        }
Exemple #2
0
        public void PersistProcessWithTenantCode()
        {
            IWfProcess process = WfProcessTestCommon.StartupSimpleProcessWithAssignee();

            TenantContext.Current.TenantCode = "1001";
            ProcessTestHelper.OutputExecutionTime(() => WfRuntime.PersistWorkflows(), "保存简单的带TenantCode的流程");
        }
Exemple #3
0
        public void MovetoDelegationTest()
        {
            WfDelegation delegation = PrepareDelegation();

            WfDelegationAdapter.Instance.Update(delegation);             //添加委托

            try
            {
                //创建流程
                IWfProcess process = WfProcessTestCommon.StartupProcessWithAssignee();

                IWfActivityDescriptor nextActivityDesp = process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity;
                WfTransferParams      tp = ProcessTestHelper.GetInstanceOfWfTransferParams(nextActivityDesp, OguObject.approver1);
                process.MoveTo(tp);                //流转

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

                Assert.IsTrue((ProcessTestHelper.GetActivityUserTasks(process.CurrentActivity.ID, TaskStatus.Ban).Count) >= 2, "至少有两个待办事项。或许其它人也会去为当前人指定相应的委托人");
            }
            finally
            {
                WfDelegationAdapter.Instance.Delete(delegation);                 //清理委托
            }
        }
Exemple #4
0
        public async Task Kvit_Push_ShouldCreate_Keys_and_Folders_on_Consul(bool runWithBaseDir)
        {
            // Arrange
            await ConsulTestHelper.DeleteAllKeys();

            var baseDir = ProcessTestHelper.CreateRandomBaseDir();

            FileTestHelper.WriteAllText(Path.Combine(baseDir, "file0"), "555");
            FileTestHelper.WriteAllText(Path.Combine(baseDir, "folder1", "file1"), "true");
            FileTestHelper.WriteAllText(Path.Combine(baseDir, "folder1", "file2"), @"{""myNameIsFile2"": ""yes""}");
            FileTestHelper.WriteAllText(Path.Combine(baseDir, "folder1", "folder1.1", "file3"), @"{""iaminasubfolder"": ""absolutely""}");

            // Act
            var(stdout, stderr, exitCode) = ProcessTestHelper.RunKvit(runWithBaseDir, baseDir, "push");

            // Assert
            stdout.ShouldContain("key(s) pushed");
            stderr.ShouldBeEmpty();
            exitCode.ShouldBe(0);

            // Assert keys
            var file0Content = await ConsulTestHelper.GetValueFromConsulAsync("file0");

            var file1Content = await ConsulTestHelper.GetValueFromConsulAsync("folder1/file1");

            var file2Content = await ConsulTestHelper.GetValueFromConsulAsync("folder1/file2");

            var file3Content = await ConsulTestHelper.GetValueFromConsulAsync("folder1/folder1.1/file3");

            file0Content.ShouldBe("555");
            file1Content.ShouldBe("true");
            file2Content.ShouldBe(@"{""myNameIsFile2"": ""yes""}");
            file3Content.ShouldBe(@"{""iaminasubfolder"": ""absolutely""}");
        }
Exemple #5
0
        public void SimpleProcessPersistTest()
        {
            IWfProcess process = WfProcessTestCommon.StartupSimpleProcessWithAssignee();

            //process.DefaultTaskTitle = "测试保存的流程";

            ProcessTestHelper.OutputExecutionTime(() => WfRuntime.PersistWorkflows(), "保存简单流程");

            try
            {
                IWfProcess loadedProcess = WfRuntime.GetProcessByProcessID(process.ID);

                Assert.AreEqual(process.ID, loadedProcess.ID);
                Assert.AreEqual(process.Status, loadedProcess.Status);
                Assert.AreEqual(DataLoadingType.External, loadedProcess.LoadingType);

                WfTransferParams transferParams = new WfTransferParams(process.Descriptor.CompletedActivity);

                transferParams.Assignees.Add(new WfAssignee((IUser)OguObjectSettings.GetConfig().Objects["approver1"].Object));
                transferParams.Assignees.Add(new WfAssignee((IUser)OguObjectSettings.GetConfig().Objects["approver2"].Object));

                loadedProcess.MoveTo(transferParams);
                WfRuntime.PersistWorkflows();

                Assert.AreEqual(process.ID, loadedProcess.ID);
                Assert.AreEqual(WfProcessStatus.Completed, loadedProcess.Status);
                Assert.AreEqual(DataLoadingType.External, loadedProcess.LoadingType);
            }
            finally
            {
                //WfRuntime.DeleteProcessByProcessID(process.ID);
            }
        }
Exemple #6
0
        public void FetchPersistQueueTest()
        {
            WfPersistQueueAdapter.Instance.ClearQueue();
            WfPersistQueueAdapter.Instance.ClearArchivedQueue();

            IWfProcess process = WfProcessTestCommon.StartupSimpleProcessWithAssignee();

            ProcessTestHelper.OutputExecutionTime(() => WfRuntime.PersistWorkflows(), "保存简单流程");

            Assert.AreEqual(0, WfProcessCurrentAssigneeAdapter.Instance.Load(process.ID).Count);
            Assert.AreEqual(0, WfProcessRelativeParamsAdapter.Instance.Load(process.ID).Count);
            Assert.IsNull(WfProcessDimensionAdapter.Instance.Load(process.ID));

            Console.WriteLine(process.ID);

            WfPersistQueue pq = WfPersistQueueAdapter.Instance.FetchQueueItemsAndDoOperation(1).FirstOrDefault();

            Assert.IsTrue(WfProcessCurrentAssigneeAdapter.Instance.Load(pq.ProcessID).Count > 0);
            Assert.AreEqual(process.RelativeParams.Count, WfProcessRelativeParamsAdapter.Instance.Load(pq.ProcessID).Count);

            Assert.IsNull(WfPersistQueueAdapter.Instance.Load(pq.ProcessID));

            WfPersistQueue pqArchieved = WfPersistQueueAdapter.Instance.LoadArchived(pq.ProcessID);

            Assert.IsNotNull(pqArchieved);
            Assert.AreEqual(pq.UpdateTag, pqArchieved.UpdateTag);

            WfProcessDimension pd = WfProcessDimensionAdapter.Instance.Load(pq.ProcessID);

            Assert.IsNotNull(pd);

            Console.WriteLine(pd.Data);
        }
Exemple #7
0
        public void NoticeOfLeaveActivity()
        {
            IWfProcess process = WfProcessTestCommon.StartupProcessWithAssignee();

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

            WfUserResourceDescriptor userResDesp = GetUserResDespInstance();

            nextActivityDesp.LeaveEventReceivers.Add(userResDesp);

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

            process.MoveTo(tp);

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

            process.MoveTo(new WfTransferParams(process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity));

            WfRuntime.PersistWorkflows();
            process = WfRuntime.GetProcessByProcessID(process.ID);
            string actKey = process.CurrentActivity.Descriptor.FromTransitions[0].FromActivity.Key;

            Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(userResDesp.User.ID, process.Activities[1].ID, TaskStatus.Yue));
        }
Exemple #8
0
        public void PersistQueueBasicTest()
        {
            IWfProcess process = WfProcessTestCommon.StartupSimpleProcessWithAssignee();

            ProcessTestHelper.OutputExecutionTime(() => WfRuntime.PersistWorkflows(), "保存简单流程");

            WfPersistQueue pq = WfPersistQueue.FromProcess(process);

            Console.WriteLine(pq.ProcessID);

            Assert.AreEqual(0, WfProcessCurrentAssigneeAdapter.Instance.Load(pq.ProcessID).Count);
            Assert.AreEqual(0, WfProcessRelativeParamsAdapter.Instance.Load(pq.ProcessID).Count);
            Assert.IsNull(WfProcessDimensionAdapter.Instance.Load(pq.ProcessID));

            WfPersistQueueAdapter.Instance.DoQueueOperation(pq);

            Assert.IsTrue(WfProcessCurrentAssigneeAdapter.Instance.Load(pq.ProcessID).Count > 0);
            Assert.AreEqual(process.RelativeParams.Count, WfProcessRelativeParamsAdapter.Instance.Load(pq.ProcessID).Count);

            WfProcessDimension pd = WfProcessDimensionAdapter.Instance.Load(pq.ProcessID);

            Assert.IsNotNull(pd);

            Console.WriteLine(pd.Data);
        }
Exemple #9
0
        public void BranchProcessPersistTest()
        {
            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];

            AssertBranchProcessesInfo(group, tp.BranchTransferParams[0].Template.BranchProcessKey);

            WfRuntime.PersistWorkflows();

            process = WfRuntime.GetProcessByProcessID(process.ID);

            group = process.CurrentActivity.BranchProcessGroups[0];

            AssertBranchProcessesInfo(group, tp.BranchTransferParams[0].Template.BranchProcessKey);

            string subProcessID = process.CurrentActivity.BranchProcessGroups[0].Branches[0].ID;

            WfRuntime.ClearCache();

            //构造子流程,反向查找主流程信息
            IWfProcess subProcess = WfRuntime.GetProcessByProcessID(subProcessID);

            AssertBranchProcessesInfo(subProcess.EntryInfo.OwnerActivity.BranchProcessGroups[0], tp.BranchTransferParams[0].Template.BranchProcessKey);
        }
        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();
        }
Exemple #11
0
        public void Kvit_Version_ShouldReturn_Semver_Result(bool runWithBaseDir)
        {
            // Arrange & Act
            var baseDir = ProcessTestHelper.CreateRandomBaseDir();

            var(stdout, stderr, exitCode) = ProcessTestHelper.RunKvit(runWithBaseDir, baseDir, "--version");

            // Assert
            stdout.ShouldMatch(@"\d+\.\d+\.\d+");
        }
Exemple #12
0
        public void Kvit_WithoutArguments_ShouldShow_UsageInfo(bool runWithBaseDir)
        {
            // Arrange & Act
            var baseDir = ProcessTestHelper.CreateRandomBaseDir();

            var(stdoutHelp, stderrHelp, exitCodeHelp)          = ProcessTestHelper.RunKvit(runWithBaseDir, baseDir, "--help");
            var(stdoutDefault, stderrDefault, exitCodeDefault) = ProcessTestHelper.RunKvit(runWithBaseDir, baseDir, "");

            // Assert
            stdoutHelp.ShouldBe(stdoutDefault);
        }
Exemple #13
0
        public async Task Kvit_Compare_ShouldShow_File_Contents_are_Equal_between_FileSystem_and_Consul(bool runWithBaseDir)
        {
            // Arrange
            await ConsulTestHelper.DeleteAllKeys();

            var baseDir = ProcessTestHelper.CreateRandomBaseDir();

            var testObj = new
            {
                key1 = "value1",
                key2 = new
                {
                    key3 = "value3",
                    key4 = new
                    {
                        key5 = "value5"
                    }
                }
            };

            // ReSharper disable once MethodHasAsyncOverload
            FileTestHelper.WriteAllText(Path.Combine(baseDir, "file1"), JsonConvert.SerializeObject(testObj, Formatting.Indented));

            await ConsulTestHelper.AddDataToConsulAsync("file1", testObj);

            // Act
            var(stdout, stderr, exitCode) = ProcessTestHelper.RunKvit(runWithBaseDir, baseDir, "compare file1");

            // Assert
            var stdoutLines = stdout
                              .Split(Environment.NewLine)
                              .Select(ProcessTestHelper.StripAnsiEscapeCodes)
                              .ToArray();

            stdoutLines.ShouldSatisfyAllConditions(
                () => stdoutLines[2].ShouldContain("Consul"),
                () => stdoutLines[2].ShouldContain("Local")
                );
            stdoutLines.ShouldSatisfyAllConditions(
                () => stdoutLines[5].ShouldContain(@"""key1"": ""value1"""),
                () => stdoutLines[5].ShouldContain(@"""key1"": ""value1""")
                );
            stdoutLines.ShouldSatisfyAllConditions(
                () => stdoutLines[7].ShouldContain(@"""key3"": ""value3"""),
                () => stdoutLines[7].ShouldContain(@"""key3"": ""value3""")
                );
            stdoutLines.ShouldSatisfyAllConditions(
                () => stdoutLines[9].ShouldContain(@"""key5"": ""value5"""),
                () => stdoutLines[9].ShouldContain(@"""key5"": ""value5""")
                );

            exitCode.ShouldBe(0);
            stderr.ShouldBeEmpty();
        }
Exemple #14
0
        public void Kvit_Help_ShouldReturn_UsageInfo(bool runWithBaseDir)
        {
            // Arrange & Act
            var baseDir = ProcessTestHelper.CreateRandomBaseDir();

            var(stdout, stderr, exitCode) = ProcessTestHelper.RunKvit(runWithBaseDir, baseDir, "--help");

            // Assert
            stdout.ShouldContain("Kvit:");
            stdout.ShouldContain("Usage:");
            stdout.ShouldContain("Options:");
            stdout.ShouldContain("Commands:");
        }
Exemple #15
0
        public void ProcessPersistExecutionTimeTest()
        {
            IWfProcessDescriptor processDesc = WfProcessTestCommon.CreateSimpleProcessDescriptor();

            int totalProcesses = 40;

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

            ProcessTestHelper.OutputExecutionTime(() =>
            {
                WfRuntime.PersistWorkflows();
            },
                                                  string.Format("保存{0}个流程", totalProcesses));
        }
Exemple #16
0
        public void ActivityDelete()
        {
            //创建一个六个活动的流程
            IWfProcess process = WfProcessTestCommon.StartupProcessWithAssignee();

            ProcessTestHelper.MoveToAndSaveNextActivity(OguObject.approver1, process);

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

            ProcessTestHelper.MoveToAndSaveNextActivity(OguObject.requestor, proc);

            //移动到了第三个活动
            //当前活动是NormalActivity1
            proc = WfRuntime.GetProcessByProcessID(process.ID);

            int orginalActivityCount = proc.Activities.Count;

            proc.CurrentActivity.Delete();

            Assert.AreEqual(orginalActivityCount - 1, proc.Descriptor.GetMainStreamActivities().Count);

            proc = WfRuntime.GetProcessByProcessID(process.ID);
            Assert.AreEqual(proc.Activities.Count, proc.Descriptor.GetMainStreamActivities().Count, "删除一个主线活动NormalActivity1");
            Assert.AreEqual(proc.ElapsedActivities[proc.ElapsedActivities.Count - 1].Descriptor.ToTransitions[0].ToActivity.Key, proc.CurrentActivity.Descriptor.Key);//NormalActivity1

            proc = WfRuntime.GetProcessByProcessID(proc.ID);
            IWfActivityDescriptor actDesp = proc.CurrentActivity.Descriptor.Clone();

            WfRuntime.ProcessContext.ActivityChangingContext.CreatorInstanceID     = proc.CurrentActivity.ID;
            WfRuntime.ProcessContext.ActivityChangingContext.AssociatedActivityKey = proc.CurrentActivity.Descriptor.Key;

            proc.CurrentActivity.Append(actDesp); //添加一个活动
            ProcessTestHelper.MoveToAndSaveNextActivity(OguObject.approver2, proc);

            proc = WfRuntime.GetProcessByProcessID(process.ID);

            Assert.AreEqual(actDesp.Key, proc.CurrentActivity.Descriptor.Key);
            Assert.AreEqual(proc.Activities.Count - 1, proc.Descriptor.GetMainStreamActivities().Count);

            proc.CurrentActivity.Delete();

            proc = WfRuntime.GetProcessByProcessID(proc.ID);
            Assert.AreEqual(proc.Activities.Count, proc.Descriptor.GetMainStreamActivities().Count);
            ProcessTestHelper.MoveToAndSaveNextActivity(OguObject.approver1, proc);

            Assert.AreEqual(2, proc.ElapsedActivities.Count);
        }
Exemple #17
0
        public void NoticeOfCancelProcess()
        {
            IWfProcess process = WfProcessTestCommon.StartupProcessWithAssignee();

            WfUserResourceDescriptor userResDesp = GetUserResDespInstance();

            process.Descriptor.CancelEventReceivers.Add(userResDesp);
            WfRuntime.PersistWorkflows();

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

            process = WfRuntime.GetProcessByProcessID(process.ID);

            Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(userResDesp.User.ID, process.CurrentActivity.ID, TaskStatus.Yue));
        }
Exemple #18
0
        public async Task Kvit_Fetch_ShouldCreate_Keys_and_Folders_on_FileSystem(bool runWithBaseDir)
        {
            // Arrange
            await ConsulTestHelper.DeleteAllKeys();

            await ConsulTestHelper.AddDirectoryToConsulAsync("dir1");

            await ConsulTestHelper.AddDataToConsulAsync("key1", "value1");

            await ConsulTestHelper.AddDataToConsulAsync("dir1/key1_in_dir1", "value2");

            await ConsulTestHelper.AddDataToConsulAsync("dir2/dir3/dir4/key_in_subfolder", "value3");

            // Act
            var baseDir = ProcessTestHelper.CreateRandomBaseDir();

            var(stdout, stderr, exitCode) = ProcessTestHelper.RunKvit(runWithBaseDir, baseDir, "fetch");

            // Assert
            stdout.ShouldContain("All keys successfully fetched");
            stderr.ShouldBeEmpty();
            exitCode.ShouldBe(0);

            // Assert files
            var fetchedFiles = Directory.GetFiles(baseDir, "*.*", SearchOption.AllDirectories);
            var file1        = fetchedFiles.FirstOrDefault(f => f.EndsWith("key1"));
            var file2        = fetchedFiles.FirstOrDefault(f => f.EndsWith($"dir1{Path.DirectorySeparatorChar}key1_in_dir1"));
            var file3        = fetchedFiles.FirstOrDefault(f => f.EndsWith($"dir2{Path.DirectorySeparatorChar}dir3{Path.DirectorySeparatorChar}dir4{Path.DirectorySeparatorChar}key_in_subfolder"));

            file1.ShouldNotBeNull();
            file2.ShouldNotBeNull();
            file3.ShouldNotBeNull();

            // Assert File Contents
            var file1Content = await File.ReadAllTextAsync(file1);

            var file2Content = await File.ReadAllTextAsync(file2);

            var file3Content = await File.ReadAllTextAsync(file3);

            file1Content.ShouldBe(@"""value1""");
            file2Content.ShouldBe(@"""value2""");
            file3Content.ShouldBe(@"""value3""");
        }
Exemple #19
0
        public void ProcessAssigneesTest()
        {
            IWfProcess process = WfProcessTestCommon.StartupSimpleProcessDescriptorWithTransitionCondition();

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

            process.MoveTo(transferParams);

            WfRuntime.PersistWorkflows();

            process = WfRuntime.GetProcessByProcessID(process.ID);

            Assert.IsTrue(process.CurrentActivity.Assignees.Count > 0);
            //WfProcessCurrentInfoCollection coll = WfProcessCurrentInfoAdapter.Instance.Load(true, process.ID);

            //Assert.AreEqual(process.CurrentActivity.Assignees.Count, coll[0].Assignees.Count);
            //Assert.AreEqual(process.CurrentActivity.Assignees[0].User.Name, coll[0].Assignees[0].User.Name);
        }
Exemple #20
0
        public void EnterActivityTest()
        {
            WfServiceOperationDefinition enterSvcDef = new WfServiceInvokerFactory().SvcOpDef;
            WfServiceOperationDefinition leaveSvcDef = new WfServiceInvokerFactory().SvcOpDef;

            enterSvcDef.AddressDef.RequestMethod = WfServiceRequestMethod.Get;
            enterSvcDef.OperationName            = "SayHelloWorld";
            enterSvcDef.RtnXmlStoreParamName     = "EnterServiceRtnXml";

            leaveSvcDef.AddressDef.RequestMethod = WfServiceRequestMethod.Get;
            leaveSvcDef.OperationName            = "Add";
            leaveSvcDef.RtnXmlStoreParamName     = "LeaveServiceRtnXml";
            leaveSvcDef.Params.Add(new WfServiceOperationParameter()
            {
                Name  = "a",
                Type  = WfSvcOperationParameterType.Int,
                Value = 50
            });
            leaveSvcDef.Params.Add(new WfServiceOperationParameter()
            {
                Name  = "b",
                Type  = WfSvcOperationParameterType.Int,
                Value = 5
            });

            IWfProcess process = WfProcessTestCommon.StartupProcessWithServiceDefinition(enterSvcDef, leaveSvcDef);

            Console.WriteLine("进入起始活动点");
            Console.WriteLine(process.ApplicationRuntimeParameters[enterSvcDef.RtnXmlStoreParamName]);
            Console.WriteLine(process.ApplicationRuntimeParameters[leaveSvcDef.RtnXmlStoreParamName]);

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

            process.MoveTo(tp);

            Console.WriteLine("离开起始活动点");
            Console.WriteLine(process.ApplicationRuntimeParameters[enterSvcDef.RtnXmlStoreParamName]);
            Console.WriteLine(process.ApplicationRuntimeParameters[leaveSvcDef.RtnXmlStoreParamName]);
            WfRuntime.PersistWorkflows();
            process = WfRuntime.GetProcessByProcessID(process.ID);
        }
Exemple #21
0
        public void SingleActivityDelete()
        {
            IWfProcess process = WfProcessTestCommon.StartupProcessWithAssignee();

            ProcessTestHelper.MoveToAndSaveNextActivity(OguObject.requestor, process);

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

            proc.CurrentActivity.Delete();
            Assert.AreEqual(0, proc.ElapsedActivities.Count);
            Assert.IsNotNull(proc.CurrentActivity.Descriptor.Key);

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

            ProcessTestHelper.MoveToAndSaveNextActivity(OguObject.approver1, p);

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

            Assert.AreEqual(wp.Activities.Count, wp.Descriptor.GetMainStreamActivities().Count);
            Assert.AreEqual(wp.ElapsedActivities[wp.ElapsedActivities.Count - 1].Descriptor.Key, wp.CurrentActivity.Descriptor.FromTransitions[0].FromActivity.Key);
        }
Exemple #22
0
        public void BranchProcessUserTasksTest()
        {
            //启支流程及其子流程
            IWfProcess process = WfProcessTestCommon.StartupSimpleProcessWithAssignee();

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

            process.MoveTo(tp);
            WfRuntime.PersistWorkflows();

            process = WfRuntime.GetProcessByProcessID(process.ID);

            IWfBranchProcessGroup group = process.CurrentActivity.BranchProcessGroups[0];

            AssertBranchProcessesInfo(group, tp.BranchTransferParams[0].Template.BranchProcessKey);

            UserTaskCollection currentActTasks =
                UserTaskAdapter.Instance.LoadUserTasks(builder =>
            {
                builder.LogicOperator = Data.Builder.LogicOperatorDefine.Or;

                foreach (IWfProcess subProcess in group.Branches)
                {
                    builder.AppendItem("ACTIVITY_ID", subProcess.CurrentActivity.ID);
                }
            });


            foreach (IWfProcess subProcess in group.Branches)
            {
                bool containsTask = false;

                group.Branches.ForEach(p =>
                {
                    containsTask = currentActTasks.Exists(u => u.ActivityID == p.CurrentActivity.ID);

                    Assert.IsTrue(containsTask);
                });
            }
        }
Exemple #23
0
        public async Task Kvit_Push_ShouldIgnore_OperatingSystemSpecific_Files(bool runWithBaseDir)
        {
            // Arrange
            await ConsulTestHelper.DeleteAllKeys();

            var baseDir = ProcessTestHelper.CreateRandomBaseDir();

            FileTestHelper.WriteAllText(Path.Combine(baseDir, "file0"), "555");
            FileTestHelper.WriteAllText(Path.Combine(baseDir, ".DS_Store"), "bla bla for mac");
            FileTestHelper.WriteAllText(Path.Combine(baseDir, "desktop.ini"), "bla bla for windows");
            FileTestHelper.WriteAllText(Path.Combine(baseDir, "subfolder", ".DS_Store"), "bla bla for mac in sub folder");
            FileTestHelper.WriteAllText(Path.Combine(baseDir, "subfolder", "desktop.ini"), "bla bla for windows in sub folder");

            // Act
            var(stdout, stderr, exitCode) = ProcessTestHelper.RunKvit(runWithBaseDir, baseDir, "push");

            // Assert
            stdout.ShouldContain("key(s) pushed");
            stderr.ShouldBeEmpty();
            exitCode.ShouldBe(0);

            // Assert keys
            var file0Content = await ConsulTestHelper.GetValueFromConsulAsync("file0");

            var dsStoreContent = await ConsulTestHelper.GetValueFromConsulAsync(".DS_Store");

            var desktopIniContent = await ConsulTestHelper.GetValueFromConsulAsync("desktop.ini");

            var dsStoreInSubFolderContent = await ConsulTestHelper.GetValueFromConsulAsync("subfolder/.DS_Store");

            var desktopIniInSubFolderContent = await ConsulTestHelper.GetValueFromConsulAsync("subfolder/desktop.ini");

            file0Content.ShouldBe("555");
            dsStoreContent.ShouldBeNullOrEmpty();
            desktopIniContent.ShouldBeNullOrEmpty();
            dsStoreInSubFolderContent.ShouldBeNullOrEmpty();
            desktopIniInSubFolderContent.ShouldBeNullOrEmpty();
        }
Exemple #24
0
        public void ProcessTaskAccomplishedOfResourceTest()
        {
            IUser user = (IUser)OguObjectSettings.GetConfig().Objects["approver1"].Object;

            IWfProcess process = WfProcessTestCommon.StartupProcessWithAssignee();

            ((WfProcess)process).ResourceID = UuidHelper.NewUuidString();

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

            tp.Assignees.Add(user);
            process.MoveTo(tp);        //设置 同一人
            WfRuntime.PersistWorkflows();

            process = WfRuntime.GetProcessByProcessID(process.ID);
            actDesp = process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity;
            tp      = ProcessTestHelper.GetInstanceOfWfTransferParams(actDesp, OguObject.approver2);
            process.MoveTo(tp);
            WfRuntime.PersistWorkflows();

            process = WfRuntime.GetProcessByProcessID(process.ID);
            actDesp = process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity;
            tp      = new WfTransferParams(actDesp);
            tp.Assignees.Add(user);   //设置 同一人
            WfRuntime.PersistWorkflows();


            process = WfRuntime.GetProcessByProcessID(process.ID);
            actDesp = process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity;
            tp      = ProcessTestHelper.GetInstanceOfWfTransferParams(actDesp, OguObject.approver2);
            process.MoveTo(tp);
            WfRuntime.PersistWorkflows();

            process = WfRuntime.GetProcessByProcessID(process.ID);

            Assert.AreEqual(1, ProcessTestHelper.GetResourceUserTasksAccomplished(process.ResourceID, user.ID), "如果ResourceID相同,且流转过同一个人两次,他只会剩下一个已办");
        }
Exemple #25
0
        public void NoticeOfAllBranchProcessCompleted()
        {
            IWfProcess process = WfProcessTestCommon.StartupProcessWithAssignee();

            IWfActivityDescriptor    actDesp     = process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity;
            WfUserResourceDescriptor userResDesp = GetUserResDespInstance();

            actDesp.EnterEventReceivers.Add(userResDesp);

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

            process.MoveTo(tp);

            WfRuntime.PersistWorkflows();
            process = WfRuntime.GetProcessByProcessID(process.ID);
            ProcessTestHelper.CompleteActivityBranchProcessesByBlockingType(process.CurrentActivity, WfBranchProcessBlockingType.WaitAllBranchProcessesComplete);
            ProcessTestHelper.ProcessPendingActivity(process.CurrentActivity.ID);

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

            Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(userResDesp.User.ID, process.Activities[1].ID, TaskStatus.Yue), "节点状态由pending到running后,则被通知人会收到1个待阅");
        }
Exemple #26
0
        public void ActivityDespClone()
        {
            IWfProcess process = WfProcessTestCommon.StartupProcessWithAssignee();

            ProcessTestHelper.MoveToAndSaveNextActivity(OguObject.approver1, process);


            IWfProcess            proc    = WfRuntime.GetProcessByProcessID(process.ID);
            IWfActivityDescriptor actDesp = proc.CurrentActivity.Descriptor.Clone();//拷贝一个描述

            WfRuntime.ProcessContext.ActivityChangingContext.CreatorInstanceID     = proc.CurrentActivity.ID;
            WfRuntime.ProcessContext.ActivityChangingContext.AssociatedActivityKey = proc.CurrentActivity.Descriptor.Key;
            proc.CurrentActivity.Append(actDesp);
            ProcessTestHelper.MoveToAndSaveNextActivity(OguObject.approver2, proc);

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

            Assert.AreEqual(pro.Descriptor.GetMainStreamActivities().Count + 1, pro.Activities.Count);//7
            Assert.IsTrue(pro.CurrentActivity.CreatorInstanceID.IsNotEmpty(), "运行到动态添加的活动上");

            Assert.AreEqual(pro.ElapsedActivities[1].Descriptor.ToTransitions[0].ToActivity.Key, pro.CurrentActivity.Descriptor.Key);
            Assert.IsNotNull(pro.CurrentActivity.Descriptor.ToTransitions[0].ToActivity.Key);
        }
Exemple #27
0
        public void AddProcess()
        {
            string     processID = "182364d3-2e59-bc73-40e9-fb94672d21a1";
            IWfProcess process   = WfRuntime.GetProcessByProcessID(processID);

            string activityKey           = process.Descriptor.FindNotUsedActivityKey();
            WfActivityDescriptor actDesp = new WfActivityDescriptor(activityKey, WfActivityType.NormalActivity);

            process.CurrentActivity.Append(actDesp);
            WfRuntime.PersistWorkflows();

            activityKey = process.Descriptor.FindNotUsedActivityKey();
            actDesp     = new WfActivityDescriptor(activityKey, WfActivityType.NormalActivity);

            process.CurrentActivity.Append(actDesp);


            process = WfRuntime.GetProcessByProcessID(processID);
            WfTransferParams tp = ProcessTestHelper.GetInstanceOfWfTransferParams(process, WfBranchProcessExecuteSequence.Parallel, WfBranchProcessBlockingType.WaitAnyoneBranchProcessComplete);

            process.MoveTo(tp);
            WfRuntime.PersistWorkflows();
        }
Exemple #28
0
        public void RepeatNoticeOfDelegation()
        {
            //sourceUser: "******"; destinationUser:"******"
            WfDelegation delegation = WfDelegationTest.PrepareDelegation();

            WfDelegationAdapter.Instance.Update(delegation);

            try
            {
                IWfProcess process = WfProcessTestCommon.StartupProcessWithAssignee();

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

                WfTransferParams tp    = new WfTransferParams(actDesp);
                IUser            user1 = (IUser)OguObjectSettings.GetConfig().Objects["approver1"].Object;
                IUser            user2 = (IUser)OguObjectSettings.GetConfig().Objects["requestor"].Object;
                tp.Assignees.Add(user1);
                tp.Assignees.Add(user2);

                process.MoveTo(tp);
                WfRuntime.PersistWorkflows();


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

                int count = Find(process.CurrentActivity.Assignees, user2.ID);
                Assert.AreEqual(2, count);                 //存在相同的人员,只是Assignees类型不同(委派与非委派)

                process = WfRuntime.GetProcessByProcessID(process.ID);
                Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(process.CurrentActivity.ID, TaskStatus.Ban));
                Assert.AreEqual(2, ProcessTestHelper.GetActivityUserTasks(process.CurrentActivity.ID, TaskStatus.Ban).Count);                //两个人2条待办。如果委托后有重复没排除,会是3条
            }
            finally
            {
                WfDelegationAdapter.Instance.Delete(delegation);                 //清理委托
            }
        }
Exemple #29
0
        public async Task Kvit_Diff_ShouldShow_Missing_Files_between_FileSystem_and_Consul(bool runWithBaseDir)
        {
            // Arrange
            await ConsulTestHelper.DeleteAllKeys();

            var baseDir = ProcessTestHelper.CreateRandomBaseDir();

            // missingFilesOnConsul
            FileTestHelper.WriteAllText(Path.Combine(baseDir, "file"), @"""text""");
            FileTestHelper.WriteAllText(Path.Combine(baseDir, "folder1", "file2"), @"{""myNameIsFile2"": ""yes""}");
            FileTestHelper.WriteAllText(Path.Combine(baseDir, "folder1", "folder1.1", "file3"), @"{""iaminasubfolder"": ""absolutely""}");
            FileTestHelper.WriteAllText(Path.Combine(baseDir, "file0"), @"""555""");
            FileTestHelper.WriteAllText(Path.Combine(baseDir, "key1"), @"""value""");
            FileTestHelper.WriteAllText(Path.Combine(baseDir, "folder1", "file1"), "true");

            // missingFilesOnFileSystem
            await ConsulTestHelper.AddDirectoryToConsulAsync("dir1");

            await ConsulTestHelper.AddDataToConsulAsync("file0", "555");

            await ConsulTestHelper.AddDataToConsulAsync("key1", "value1");

            await ConsulTestHelper.AddDataToConsulAsync("folder1/file1", "true");

            await ConsulTestHelper.AddDataToConsulAsync("key", "value");

            await ConsulTestHelper.AddDataToConsulAsync("dir1/key1_in_dir1", "value2");

            await ConsulTestHelper.AddDataToConsulAsync("dir2/dir3/dir4/key_in_subfolder", "value3");

            // Act
            var(stdout, stderr, exitCode) = ProcessTestHelper.RunKvit(runWithBaseDir, baseDir, "diff --all");

            // Assert
            var stdoutLines = stdout.Split(Environment.NewLine).ToArray();

            stdoutLines.ShouldSatisfyAllConditions(
                () => stdoutLines[2].ShouldContain("Files"),
                () => stdoutLines[2].ShouldContain("Consul - Local")
                );
            stdoutLines.ShouldSatisfyAllConditions(
                () => stdoutLines[4].ShouldContain("file0"),
                () => stdoutLines[4].ShouldContain(DiffCommand.FileContentsAreEqualSign)
                );
            stdoutLines.ShouldSatisfyAllConditions(
                () => stdoutLines[5].ShouldContain("folder1/file1"),
                () => stdoutLines[5].ShouldContain(DiffCommand.FileContentsAreDifferentSign)
                );
            stdoutLines.ShouldSatisfyAllConditions(
                () => stdoutLines[6].ShouldContain("key1"),
                () => stdoutLines[6].ShouldContain(DiffCommand.FileContentsAreDifferentSign)
                );
            stdoutLines.ShouldSatisfyAllConditions(
                () => stdoutLines[7].ShouldContain("file"),
                () => stdoutLines[7].ShouldContain(DiffCommand.OnlyInConsulSign)
                );
            stdoutLines.ShouldSatisfyAllConditions(
                () => stdoutLines[8].ShouldContain("folder1/file2"),
                () => stdoutLines[8].ShouldContain(DiffCommand.OnlyInConsulSign)
                );
            stdoutLines.ShouldSatisfyAllConditions(
                () => stdoutLines[9].ShouldContain("folder1/folder1.1/file3"),
                () => stdoutLines[9].ShouldContain(DiffCommand.OnlyInConsulSign)
                );
            stdoutLines.ShouldSatisfyAllConditions(
                () => stdoutLines[10].ShouldContain("dir1/key1_in_dir1"),
                () => stdoutLines[10].ShouldContain(DiffCommand.OnlyInFileSystemSign)
                );
            stdoutLines.ShouldSatisfyAllConditions(
                () => stdoutLines[11].ShouldContain("dir2/dir3/dir4/key_in_subfolder"),
                () => stdoutLines[11].ShouldContain(DiffCommand.OnlyInFileSystemSign)
                );
            stdoutLines.ShouldSatisfyAllConditions(
                () => stdoutLines[11].ShouldContain("key"),
                () => stdoutLines[11].ShouldContain(DiffCommand.OnlyInFileSystemSign)
                );

            exitCode.ShouldBe(2);
            stderr.ShouldBeEmpty();
        }