< Summary

Information
Class: Elsa.Workflows.Runtime.Providers.ClrWorkflowsProvider
Assembly: Elsa.Workflows.Runtime
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Workflows.Runtime/Providers/ClrWorkflowsProvider.cs
Line coverage
100%
Covered lines: 26
Uncovered lines: 0
Coverable lines: 26
Total lines: 51
Line coverage: 100%
Branch coverage
83%
Covered branches: 5
Total branches: 6
Branch coverage: 83.3%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
get_Name()100%11100%
<GetWorkflowsAsync()100%11100%
GetWorkflowsAsync()100%11100%
BuildWorkflowAsync()83.33%66100%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Workflows.Runtime/Providers/ClrWorkflowsProvider.cs

#LineLine coverage
 1using Elsa.Common.Multitenancy;
 2using Elsa.Workflows.Management.Materializers;
 3using Elsa.Workflows.Runtime.Features;
 4using Elsa.Workflows.Runtime.Options;
 5using JetBrains.Annotations;
 6using Microsoft.Extensions.Options;
 7
 8namespace Elsa.Workflows.Runtime.Providers;
 9
 10/// <summary>
 11/// Provides workflows to the system that are registered with <see cref="WorkflowRuntimeFeature"/>
 12/// </summary>
 13[UsedImplicitly]
 50714public class ClrWorkflowsProvider(
 50715    IOptions<RuntimeOptions> options,
 50716    IWorkflowBuilderFactory workflowBuilderFactory,
 50717    IServiceProvider serviceProvider) : IWorkflowsProvider
 18{
 19    /// <inheritdoc />
 238420    public string Name => "CLR";
 21
 22    /// <inheritdoc />
 23    public async ValueTask<IEnumerable<MaterializedWorkflow>> GetWorkflowsAsync(CancellationToken cancellationToken = de
 24    {
 266425        var buildWorkflowTasks = options.Value.Workflows.Values.Select(async x => await BuildWorkflowAsync(x, cancellati
 34026        var workflowDefinitions = await Task.WhenAll(buildWorkflowTasks);
 34027        return workflowDefinitions;
 34028    }
 29
 30    private async Task<MaterializedWorkflow> BuildWorkflowAsync(Func<IServiceProvider, ValueTask<IWorkflow>> workflowFac
 31    {
 232432        var builder = workflowBuilderFactory.CreateBuilder();
 232433        var workflowBuilder = await workflowFactory(serviceProvider);
 232434        var workflowBuilderType = workflowBuilder.GetType();
 232435        await workflowBuilder.BuildAsync(builder, cancellationToken);
 232436        var workflow = await builder.BuildWorkflowAsync(cancellationToken);
 232437        var versionSuffix = $"v{workflow.Version}";
 232438        var definitionId = string.IsNullOrEmpty(workflow.Identity.DefinitionId) ? workflowBuilderType.Name : workflow.Id
 232439        var id = string.IsNullOrEmpty(workflow.Identity.Id) ? $"{workflowBuilderType.Name}:{versionSuffix}" : workflow.I
 40
 232441        workflow.Identity = workflow.Identity with
 232442        {
 232443            Id = id,
 232444            DefinitionId = definitionId,
 232445            TenantId = workflow.Identity.TenantId ?? Tenant.AgnosticTenantId
 232446        };
 47
 232448        var materializerContext = new ClrWorkflowMaterializerContext(workflowBuilder.GetType());
 232449        return new(workflow, Name, ClrWorkflowMaterializer.MaterializerName, materializerContext);
 232450    }
 51}