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]); }
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())); }
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())); }
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]); }
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())); }