< Summary

Information
Class: Elsa.Workflows.Runtime.Handlers.RefreshActivityRegistry
Assembly: Elsa.Workflows.Runtime
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Workflows.Runtime/Handlers/RefreshActivityRegistry.cs
Line coverage
100%
Covered lines: 15
Uncovered lines: 0
Coverable lines: 15
Total lines: 43
Line coverage: 100%
Branch coverage
100%
Covered branches: 6
Total branches: 6
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
HandleAsync()100%44100%
UpdateDefinition(...)100%22100%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Workflows.Runtime/Handlers/RefreshActivityRegistry.cs

#LineLine coverage
 1using Elsa.Mediator.Contracts;
 2using Elsa.Common.Multitenancy;
 3using Elsa.Workflows.Management.Activities.WorkflowDefinitionActivity;
 4using Elsa.Workflows.Management.Contracts;
 5using Elsa.Workflows.Runtime.Notifications;
 6using JetBrains.Annotations;
 7
 8namespace Elsa.Workflows.Runtime.Handlers;
 9
 10/// <summary>
 11/// Refreshes the <see cref="IActivityRegistry"/> for the <see cref="WorkflowDefinitionActivityProvider"/> provider when
 12/// </summary>
 13[PublicAPI]
 73414public class RefreshActivityRegistry(
 73415    IWorkflowDefinitionActivityRegistryUpdater workflowDefinitionActivityRegistryUpdater,
 73416    IWorkflowDefinitionRegistryGenerationStore generationStore,
 73417    ITenantAccessor tenantAccessor) : INotificationHandler<WorkflowDefinitionsReloaded>
 18{
 19    /// <inheritdoc />
 20    public async Task HandleAsync(WorkflowDefinitionsReloaded notification, CancellationToken cancellationToken)
 21    {
 369222        foreach (var reloadedWorkflowDefinition in notification.ReloadedWorkflowDefinitions)
 162523            await UpdateDefinition(reloadedWorkflowDefinition.DefinitionVersionId, reloadedWorkflowDefinition.UsableAsAc
 24
 25        // Reload notifications do not carry tenant identity. The reloaded set can contain
 26        // agnostic definitions, so notify every tenant through the shared generation.
 22127        var tenantId = tenantAccessor.TenantId.NormalizeTenantId();
 22128        if (tenantId != Tenant.AgnosticTenantId)
 22029            await generationStore.IncrementAsync(Tenant.AgnosticTenantId, cancellationToken);
 30
 22131        await generationStore.IncrementAsync(tenantId, cancellationToken);
 22132    }
 33
 34    private Task UpdateDefinition(string definitionVersionId, bool? usableAsActivity)
 35    {
 36        // A workflow should remain in the activity registry unless no longer being marked as an activity.
 162537        if (usableAsActivity.GetValueOrDefault())
 14438            return workflowDefinitionActivityRegistryUpdater.AddToRegistry(definitionVersionId);
 39
 148140        workflowDefinitionActivityRegistryUpdater.RemoveDefinitionVersionFromRegistry(definitionVersionId);
 148141        return Task.CompletedTask;
 42    }
 43}