< 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
70%
Covered branches: 7
Total branches: 10
Branch coverage: 70%
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()70%1010100%

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]
 45014public class ClrWorkflowsProvider(
 45015    IOptions<RuntimeOptions> options,
 45016    IWorkflowBuilderFactory workflowBuilderFactory,
 45017    IServiceProvider serviceProvider) : IWorkflowsProvider
 18{
 19    /// <inheritdoc />
 238020    public string Name => "CLR";
 21
 22    /// <inheritdoc />
 23    public async ValueTask<IEnumerable<MaterializedWorkflow>> GetWorkflowsAsync(CancellationToken cancellationToken = de
 24    {
 265825        var buildWorkflowTasks = options.Value.Workflows.Values.Select(async x => await BuildWorkflowAsync(x, cancellati
 33826        var workflowDefinitions = await Task.WhenAll(buildWorkflowTasks);
 33827        return workflowDefinitions;
 33828    }
 29
 30    private async Task<MaterializedWorkflow> BuildWorkflowAsync(Func<IServiceProvider, ValueTask<IWorkflow>> workflowFac
 31    {
 232032        var builder = workflowBuilderFactory.CreateBuilder();
 232033        var workflowBuilder = await workflowFactory(serviceProvider);
 232034        var workflowBuilderType = workflowBuilder.GetType();
 232035        await workflowBuilder.BuildAsync(builder, cancellationToken);
 232036        var workflow = await builder.BuildWorkflowAsync(cancellationToken);
 232037        var versionSuffix = $"v{workflow.Version}";
 232038        var definitionId = string.IsNullOrEmpty(workflow.Identity.DefinitionId) ? workflowBuilderType.Name : $"{workflow
 232039        var id = string.IsNullOrEmpty(workflow.Identity.Id) ? $"{workflowBuilderType.Name}:{versionSuffix}" : $"{workflo
 40
 232041        workflow.Identity = workflow.Identity with
 232042        {
 232043            Id = id,
 232044            DefinitionId = definitionId,
 232045            TenantId = workflow.Identity.TenantId ?? Tenant.AgnosticTenantId
 232046        };
 47
 232048        var materializerContext = new ClrWorkflowMaterializerContext(workflowBuilder.GetType());
 232049        return new(workflow, Name, ClrWorkflowMaterializer.MaterializerName, materializerContext);
 232050    }
 51}