Exemplo n.º 1
0
        public async Task RunWorkflowAsyncShouldReturnExpectedOutput([Frozen] object expectedOutput, FinishWorkflow sut)
        {
            var runWorkflowResult = await WorkflowBuilderAndStarter.BuildAndStartWorkflowAsync(sut);

            var workflowInstance      = runWorkflowResult.WorkflowInstance !;
            var actualOutputReference = workflowInstance.Output !;
            var actualOutput          = (FinishOutput)(await WorkflowStorageService.LoadAsync(actualOutputReference.ProviderName, new WorkflowStorageContext(workflowInstance, workflowInstance.LastExecutedActivityId !), "Output")) !;

            Assert.Same(expectedOutput, actualOutput.Output);
        }
Exemplo n.º 2
0
        private async Task <WorkflowInstance> TriggerSignalAsync(IWorkflowBlueprint workflowBlueprint, WorkflowInstance workflowInstance, string signal)
        {
            var workflowExecutionContext = new WorkflowExecutionContext(ServiceScope.ServiceProvider, workflowBlueprint, workflowInstance);
            var workflowBlueprintWrapper = new WorkflowBlueprintWrapper(workflowBlueprint, workflowExecutionContext);
            var activities              = workflowBlueprintWrapper.Activities.Where(x => x.ActivityBlueprint.Type == nameof(SignalReceived));
            var blockingActivityIds     = workflowInstance.BlockingActivities.Where(x => x.ActivityType == nameof(SignalReceived)).Select(x => x.ActivityId).ToList();
            var receiveSignalActivities = activities.Where(x => blockingActivityIds.Contains(x.ActivityBlueprint.Id)).ToList();
            var receiveSignal           = receiveSignalActivities.Single(activity => workflowBlueprintWrapper.GetActivity <SignalReceived>(activity.ActivityBlueprint.Id) !.EvaluatePropertyValueAsync(x => x.Signal).GetAwaiter().GetResult() == signal);

            var triggeredSignal = new Signal(signal);
            await WorkflowStorageService.UpdateInputAsync(workflowInstance, new WorkflowInput(triggeredSignal));

            var result = await WorkflowRunner.RunWorkflowAsync(workflowBlueprint, workflowInstance, receiveSignal.ActivityBlueprint.Id);

            return(result.WorkflowInstance !);
        }