< 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: 30
Uncovered lines: 0
Coverable lines: 30
Total lines: 56
Line coverage: 100%
Branch coverage
85%
Covered branches: 12
Total branches: 14
Branch coverage: 85.7%
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()85.71%1414100%

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.Extensions;
 3using Elsa.Workflows.Management.Materializers;
 4using Elsa.Workflows.Runtime.Features;
 5using Elsa.Workflows.Runtime.Options;
 6using JetBrains.Annotations;
 7using Microsoft.Extensions.Options;
 8
 9namespace Elsa.Workflows.Runtime.Providers;
 10
 11/// <summary>
 12/// Provides workflows to the system that are registered with <see cref="WorkflowRuntimeFeature"/>
 13/// </summary>
 14[UsedImplicitly]
 40415public class ClrWorkflowsProvider(
 40416    IOptions<RuntimeOptions> options,
 40417    IWorkflowBuilderFactory workflowBuilderFactory,
 40418    ITenantAccessor tenantAccessor,
 40419    IServiceProvider serviceProvider) : IWorkflowsProvider
 20{
 21    /// <inheritdoc />
 48022    public string Name => "CLR";
 23
 24    /// <inheritdoc />
 25    public async ValueTask<IEnumerable<MaterializedWorkflow>> GetWorkflowsAsync(CancellationToken cancellationToken = de
 26    {
 76427        var buildWorkflowTasks = options.Value.Workflows.Values.Select(async x => await BuildWorkflowAsync(x, cancellati
 28428        var workflowDefinitions = await Task.WhenAll(buildWorkflowTasks);
 28429        return workflowDefinitions;
 28430    }
 31
 32    private async Task<MaterializedWorkflow> BuildWorkflowAsync(Func<IServiceProvider, ValueTask<IWorkflow>> workflowFac
 33    {
 48034        var builder = workflowBuilderFactory.CreateBuilder();
 48035        var workflowBuilder = await workflowFactory(serviceProvider);
 48036        var workflowBuilderType = workflowBuilder.GetType();
 48037        var tenant = tenantAccessor.Tenant;
 48038        var tenantPrefix = !string.IsNullOrEmpty(tenant?.Id) ? $"{tenant.Id}:" : string.Empty;
 48039        await workflowBuilder.BuildAsync(builder, cancellationToken);
 48040        var workflow = await builder.BuildWorkflowAsync(cancellationToken);
 48041        var versionSuffix = $"v{workflow.Version}";
 48042        var definitionId = string.IsNullOrEmpty(workflow.Identity.DefinitionId) ? tenantPrefix + workflowBuilderType.Nam
 48043        var id = string.IsNullOrEmpty(workflow.Identity.Id) ? $"{tenantPrefix}{workflowBuilderType.Name}:{versionSuffix}
 48044        var tenantId = string.IsNullOrEmpty(workflow.Identity.TenantId) ? tenant?.Id : workflow.Identity.TenantId;
 45
 48046        workflow.Identity = workflow.Identity with
 48047        {
 48048            Id = id,
 48049            DefinitionId = definitionId,
 48050            TenantId = tenantId?.NullIfEmpty()
 48051        };
 52
 48053        var materializerContext = new ClrWorkflowMaterializerContext(workflowBuilder.GetType());
 48054        return new(workflow, Name, ClrWorkflowMaterializer.MaterializerName, materializerContext);
 48055    }
 56}