Ejemplo n.º 1
0
        public async void ProcessForkWithException()
        {
            // Arrange
            var settings = new StepSettings {
                TrackStateChanges = true, AutoProgress = true
            };

            const string firstStepName       = "first";
            const string forkStepName        = "fork";
            const string secondStepName      = "second";
            const string exceptionalStepName = "exceptionalStep";
            const string fourthStepName      = "fourth";

            var firstBaseStep   = new BaseStep(firstStepName, settings);
            var secondStepAsync = new AsyncStep(500, secondStepName);
            var exceptionalStep = new ExceptionalStep(exceptionalStepName);
            var fourthStepAsync = new AsyncStep(200, fourthStepName);

            firstBaseStep.Fork(
                name: forkStepName,
                stepSettings: settings,
                secondStepAsync,
                exceptionalStep,
                fourthStepAsync);

            var expectedExecutionStarted         = new[] { firstStepName, forkStepName, secondStepName, exceptionalStepName, fourthStepName };
            var expectedExecutionCompletionOrder = new[] { firstStepName, fourthStepName, secondStepName };
            var expectedFailedOrder = new[] { forkStepName, exceptionalStepName };

            // Actssert
            try
            {
                await firstBaseStep.Execute(_workflowState);
            }
            catch (WorkflowActionException <SimpleWorkflowState> ex)
            {
                var result = ex.WorkflowState;

                var orderedByStarted    = result.WorkflowChain.ToList().Select(x => x.StepName).ToArray();
                var orderedByCompletion = result.WorkflowChain.ToList()
                                          .Where(x => x.StepActivities.Any(y => y.Activity == StepActivityStages.ExecutionCompleted))
                                          .OrderBy(x => x.StepActivities.FirstOrDefault(y => y.Activity == StepActivityStages.ExecutionCompleted).DateTimeOffset)
                                          .Select(x => x.StepName)
                                          .ToArray();
                var failedStepNames = result.WorkflowChain.ToList()
                                      .Where(x => x.StepActivities.Any(y => y.Activity == StepActivityStages.ExecutionFailed))
                                      .Select(x => x.StepName)
                                      .ToArray();

                // Assert
                Assert.True(expectedExecutionStarted.SequenceEqual(orderedByStarted));
                Assert.True(expectedExecutionCompletionOrder.SequenceEqual(orderedByCompletion));
                Assert.True(expectedFailedOrder.SequenceEqual(failedStepNames));
            }
        }
Ejemplo n.º 2
0
        public async void ExceptionCaughtAndRethrownAsWorkflowActionException()
        {
            // Arrange
            var stepThatThrowsException = new ExceptionalStep();

            // Actsert
            var exeception = await Assert.ThrowsAsync <WorkflowActionException <SimpleWorkflowState> >(async() => await stepThatThrowsException.Execute(_workflowState));

            Assert.True(exeception.InnerException is NotImplementedException);
            Assert.Equal(_workflowState.ToString(), exeception.WorkflowState.ToString());
        }