< Summary

Information
Class: Nabs.ActivityFramework.Workflow<T>
Assembly: Nabs.ActivityFramework
File(s): /home/runner/work/Nabs/Nabs/src/Nabs.ActivityFramework/Workflow.cs
Tag: 90_14636759620
Line coverage
0%
Covered lines: 0
Uncovered lines: 22
Coverable lines: 22
Total lines: 57
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 10
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor()100%210%
get_ValidationResult()0%4260%
AddActivity(...)100%210%
AddActivity(...)100%210%
RunAsync()100%210%
ProcessActivitiesAsync()0%2040%

File(s)

/home/runner/work/Nabs/Nabs/src/Nabs.ActivityFramework/Workflow.cs

#LineLine coverage
 1namespace Nabs.ActivityFramework;
 2
 3public abstract class Workflow<TWorkflowState>
 4    where TWorkflowState : class, IWorkflowState
 5{
 6    public TWorkflowState? WorkflowState { get; set; }
 07    public Dictionary<IActivity, Delegate?> Activities { get; } = [];
 8
 9    public bool Processed { get; private set; }
 10
 11    public ValidationResult ValidationResult
 12    {
 13        get
 14        {
 015            if (!Processed)
 16            {
 017                return null!;
 18            }
 19
 020            var allFailures = Activities
 021                       .Where(x => x.Key.ValidationResult != null)
 022                       .SelectMany(x => x.Key.ValidationResult.Errors)
 023                       .ToList();
 24
 025            return new ValidationResult(allFailures);
 26        }
 27    }
 28
 29    protected void AddActivity<TActivity>(Action<TActivity>? action = null)
 30        where TActivity : class, IActivity, new()
 31    {
 032        var activity = new TActivity();
 033        Activities.Add(activity, action);
 034    }
 35
 36    protected void AddActivity<TActivity>(IActivity activity, Action<TActivity>? action = null)
 37        where TActivity : class, IActivity
 38    {
 039        Activities.Add(activity, action);
 040    }
 41
 42    public async Task RunAsync()
 43    {
 044        Processed = false;
 045        await ProcessActivitiesAsync();
 046        Processed = true;
 047    }
 48
 49    private async Task ProcessActivitiesAsync()
 50    {
 051        foreach (var activity in Activities)
 52        {
 053            await activity.Key.RunAsync();
 054            activity.Value?.DynamicInvoke(activity.Key);
 055        }
 056    }
 57}