Exemple #1
0
        public async void DontActionRunningWorkflow()
        {
            Mock <IEntitiesRepository> entitiesRepository = new Mock <IEntitiesRepository>();

            FibonacciWorkflowData data = new FibonacciWorkflowData(5);

            entitiesRepository.Setup(sr => sr.GetFirstOrDefaultAsync(It.IsAny <Expression <Func <Workflow, bool> > >())).Returns(Task.FromResult(new Workflow(Guid.NewGuid(), data.workflowTemplateWithInputs.ReferenceId, new Dictionary <string, object>()
            {
            }, "", "", DateTime.Now)));

            entitiesRepository.Setup(sr => sr.GetFirstOrDefaultAsync(It.IsAny <Expression <Func <WorkflowTemplate, bool> > >())).Returns(Task.FromResult(data.workflowTemplateWithInputs));
            entitiesRepository.Setup(sr => sr.GetFirstOrDefaultAsync(It.IsAny <Expression <Func <StepTemplate, bool> > >())).Returns(Task.FromResult(data.stepTemplate));
            entitiesRepository.Setup(sr => sr.GetAsync(It.IsAny <Expression <Func <Step, bool> > >(), null, null, 10, 0)).Returns(Task.FromResult((IEnumerable <Step>) new List <Step>()
            {
                new Step()
                {
                    Status = StepStatuses.Assigned
                }
            }));
            var mockStateLogger = new Mock <ILogger <ScanWorkflowCommandHandler> >();


            var handler = new ScanWorkflowCommandHandler(entitiesRepository.Object, clusterMoq.Object, mockStateLogger.Object, _optionsMonitor.Object, _mediator.Object, _node.Object);

            var result = await handler.Handle(new ScanWorkflowCommand()
            {
                WorkflowId = Guid.NewGuid()
            }, new System.Threading.CancellationToken());

            Assert.Single(result.Messages);
            Assert.Contains("is running", result.Messages[0]);
        }
Exemple #2
0
        public async void DetectMissingInput()
        {
            FibonacciWorkflowData      data = new FibonacciWorkflowData(5);
            Mock <IEntitiesRepository> entitiesRepository = new Mock <IEntitiesRepository>();

            entitiesRepository.Setup(sr => sr.GetFirstOrDefaultAsync(It.IsAny <Expression <Func <WorkflowTemplate, bool> > >())).Returns(Task.FromResult(data.workflowTemplateWithInputs));
            var handler = new CreateWorkflowCommandHandler(entitiesRepository.Object, _mediator.Object, _node.Object, _mockStateLogger.Object);

            await Assert.ThrowsAsync <MissingInputException>(async() => await handler.Handle(new CreateWorkflowCommand()
            {
                WorkflowTemplateId = data.workflowTemplate.ReferenceId,
                Inputs             = new Dictionary <string, object>()
                {
                    { "n-1", 1 }
                }
            }, new System.Threading.CancellationToken()));
        }
Exemple #3
0
        public async void DetectMissingStepTemplates()
        {
            FibonacciWorkflowData data = new FibonacciWorkflowData(5);

            // entitiesRepository.Setup(sr => sr.GetFirstOrDefaultAsync<WorkflowTemplate>(It.IsAny<Expression<Func<WorkflowTemplate, bool>>>())).Returns(Task.FromResult(data.workflowTemplateWithInputs));


            var node = Utility.GetMockConsensusCoreNode();

            var mockStateLogger = new Mock <ILogger <CreateWorkflowTemplateCommandHandler> >();

            var handler = new CreateWorkflowTemplateCommandHandler(entitiesRepository.Object, node.Object, mockStateLogger.Object);

            await Assert.ThrowsAsync <StepTemplateNotFoundException>(async() => await handler.Handle(new CreateWorkflowTemplateCommand()
            {
                Name             = data.workflowTemplateWithInputs.Name,
                Version          = data.workflowTemplateWithInputs.Version,
                InputDefinitions = data.workflowTemplateWithInputs.InputDefinitions,
                LogicBlocks      = data.workflowTemplateWithInputs.LogicBlocks
            }, new System.Threading.CancellationToken()));
        }
Exemple #4
0
        public async void RerunFailedWorkflowStepCreation()
        {
            Mock <IEntitiesRepository> entitiesRepository = new Mock <IEntitiesRepository>();

            FibonacciWorkflowData data = new FibonacciWorkflowData(5);

            entitiesRepository.Setup(sr => sr.GetFirstOrDefaultAsync(It.IsAny <Expression <Func <Workflow, bool> > >())).Returns(Task.FromResult(
                                                                                                                                     new Workflow(Guid.NewGuid(),
                                                                                                                                                  FibonacciSampleData.ConcurrentWorkflowTemplate.ReferenceId,
                                                                                                                                                  new Dictionary <string, object>(),
                                                                                                                                                  "",
                                                                                                                                                  "admin",
                                                                                                                                                  DateTime.Now
                                                                                                                                                  )));

            entitiesRepository.Setup(sr => sr.GetFirstOrDefaultAsync(It.IsAny <Expression <Func <WorkflowTemplate, bool> > >())).Returns(Task.FromResult(FibonacciSampleData.ConcurrentWorkflowTemplate));
            entitiesRepository.Setup(sr => sr.GetFirstOrDefaultAsync(It.IsAny <Expression <Func <StepTemplate, bool> > >())).Returns(Task.FromResult(FibonacciSampleData.StepTemplate));
            entitiesRepository.Setup(sr => sr.GetAsync(It.IsAny <Expression <Func <Step, bool> > >(), null, null, 10, 0)).Returns(Task.FromResult((IEnumerable <Step>) new List <Step>()
            {
                new Step()
                {
                    Status = StepStatuses.Error,
                    Name   = "0"
                }
            }));
            var mockStateLogger = new Mock <ILogger <ScanWorkflowCommandHandler> >();

            clusterMoq.Setup(cm => cm.WasLockObtained(It.IsAny <Guid>(), It.IsAny <Guid>(), It.IsAny <string>())).Returns(true);

            var handler = new ScanWorkflowCommandHandler(entitiesRepository.Object, clusterMoq.Object, mockStateLogger.Object, _optionsMonitor.Object, _mediator.Object, _node.Object);

            var result = await handler.Handle(new ScanWorkflowCommand()
            {
                WorkflowId = Guid.NewGuid()
            }, new System.Threading.CancellationToken());

            Assert.Single(result.Messages);
            Assert.Contains("Started workflow step 1", result.Messages[0]);
        }
Exemple #5
0
        public async void DetectMissingWorkflowStepMapping()
        {
            FibonacciWorkflowData data = new FibonacciWorkflowData(5);

            // entitiesRepository.Setup(sr => sr.GetFirstOrDefaultAsync<WorkflowTemplate>(It.IsAny<Expression<Func<WorkflowTemplate, bool>>>())).Returns(Task.FromResult(data.workflowTemplateWithInputs));

            entitiesRepository.Setup(sr => sr.GetFirstOrDefaultAsync <StepTemplate>(It.IsAny <Expression <Func <StepTemplate, bool> > >())).Returns(Task.FromResult(FibonacciSampleData.StepTemplate));

            var node = Utility.GetMockConsensusCoreNode();

            var mockStateLogger = new Mock <ILogger <CreateWorkflowTemplateCommandHandler> >();

            var handler = new CreateWorkflowTemplateCommandHandler(entitiesRepository.Object, node.Object, mockStateLogger.Object);

            await Assert.ThrowsAsync <MissingStepException>(async() =>
                                                            await handler.Handle(new CreateWorkflowTemplateCommand()
            {
                Name             = data.workflowTemplateWithInputs.Name,
                Version          = data.workflowTemplateWithInputs.Version,
                InputDefinitions = data.workflowTemplateWithInputs.InputDefinitions,
                LogicBlocks      = new Dictionary <string, LogicBlock>()
                {
                    { "0", new LogicBlock()
                      {
                          Dependencies = new ConditionGroup
                          {
                              Operator   = "OR",
                              Conditions = new Dictionary <string, Condition>()
                              {
                              },
                          },
                          SubsequentSteps = new Dictionary <string, SubsequentStep> {
                              { "0",
                                new SubsequentStep()
                                {
                                    StepTemplateId = FibonacciSampleData.StepTemplate.ReferenceId,
                                    Mappings       = new Dictionary <string, Mapping>()
                                    {
                                        { "n-1",
                                    new Mapping()
                                    {
                                        DefaultValue = new DefaultValue()
                                        {
                                            Value = 1
                                        },
                                    } },
                                        { "n-2",
                                    new Mapping()
                                    {
                                        DefaultValue = new DefaultValue()
                                        {
                                            Value = 1
                                        }
                                    } }
                                    }
                                } }
                          }
                      } },
                    { "1",
                      new LogicBlock()
                      {
                          Dependencies = new ConditionGroup
                          {
                              Operator   = "AND",
                              Conditions = new Dictionary <string, Condition> {
                                  { "0", new StepStatusCondition()
                                    {
                                        StepName   = "0",
                                        Status     = StepStatuses.Successful,
                                        StatusCode = 0
                                    } }
                              }
                          },
                          SubsequentSteps = new Dictionary <string, SubsequentStep> {
                              { "1",
                                new SubsequentStep()
                                {
                                    StepTemplateId = FibonacciSampleData.StepTemplate.ReferenceId,
                                    Mappings       = new Dictionary <string, Mapping>()
                                    {
                                        { "n-1",
                                    new Mapping()
                                    {
                                        OutputReferences = new StepOutputReference[]
                                        {
                                            new StepOutputReference()
                                            {
                                                StepName = "3",
                                                OutputId = "n"
                                            }
                                        },
                                        DefaultValue = new DefaultValue()
                                        {
                                            Value = 1
                                        }
                                    } },
                                        { "n-2",
                                    new Mapping()
                                    {
                                        OutputReferences = new StepOutputReference[]
                                        {
                                            new StepOutputReference()
                                            {
                                                StepName = "0",
                                                OutputId = "n"
                                            }
                                        },
                                        DefaultValue = new DefaultValue()
                                        {
                                            Value = 1
                                        }
                                    } }
                                    }
                                } }
                          }
                      } }
                }
            }, new System.Threading.CancellationToken()));
        }