< Summary

Information
Class: Elsa.Workflows.Management.Handlers.Notifications.RefreshActivityRegistry
Assembly: Elsa.Workflows.Management
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Workflows.Management/Handlers/Notifications/RefreshActivityRegistry.cs
Line coverage
100%
Covered lines: 42
Uncovered lines: 0
Coverable lines: 42
Total lines: 116
Line coverage: 100%
Branch coverage
100%
Covered branches: 10
Total branches: 10
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%11100%
HandleAsync()100%11100%
HandleAsync()100%11100%
HandleAsync()100%11100%
HandleAsync()100%22100%
HandleAsync()100%11100%
HandleAsync()100%22100%
HandleAsync()100%44100%
UpdateDefinition(...)100%22100%
IncrementTenantAndAgnosticGenerationsAsync()100%22100%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Workflows.Management/Handlers/Notifications/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.Management.Entities;
 6using Elsa.Workflows.Management.Notifications;
 7using JetBrains.Annotations;
 8
 9namespace Elsa.Workflows.Management.Handlers.Notifications;
 10
 11/// <summary>
 12/// Refreshes the <see cref="IActivityRegistry"/> for the <see cref="WorkflowDefinitionActivityProvider"/> provider when
 13/// </summary>
 14[PublicAPI]
 40515public class RefreshActivityRegistry(
 40516    IWorkflowDefinitionActivityRegistryUpdater workflowDefinitionActivityRegistryUpdater,
 40517    IWorkflowDefinitionRegistryGenerationStore generationStore,
 40518    ITenantAccessor tenantAccessor) :
 19    INotificationHandler<WorkflowDefinitionPublished>,
 20    INotificationHandler<WorkflowDefinitionRetracted>,
 21    INotificationHandler<WorkflowDefinitionVersionRetracted>,
 22    INotificationHandler<WorkflowDefinitionDeleted>,
 23    INotificationHandler<WorkflowDefinitionsDeleted>,
 24    INotificationHandler<WorkflowDefinitionVersionDeleted>,
 25    INotificationHandler<WorkflowDefinitionVersionsDeleted>,
 26    INotificationHandler<WorkflowDefinitionVersionsUpdated>
 27{
 28    /// <inheritdoc />
 29    public async Task HandleAsync(WorkflowDefinitionPublished notification, CancellationToken cancellationToken)
 30    {
 831        await UpdateDefinition(notification.WorkflowDefinition.Id, notification.WorkflowDefinition.Options.UsableAsActiv
 832        await generationStore.IncrementAsync(notification.WorkflowDefinition.TenantId, cancellationToken);
 833    }
 34
 35    /// <inheritdoc />
 36    public async Task HandleAsync(WorkflowDefinitionRetracted notification, CancellationToken cancellationToken)
 37    {
 138        await UpdateDefinition(notification.WorkflowDefinition.Id, notification.WorkflowDefinition.Options.UsableAsActiv
 139        await generationStore.IncrementAsync(notification.WorkflowDefinition.TenantId, cancellationToken);
 140    }
 41
 42    /// <inheritdoc />
 43    public async Task HandleAsync(WorkflowDefinitionVersionRetracted notification, CancellationToken cancellationToken)
 44    {
 445        await UpdateDefinition(notification.WorkflowDefinition.Id, notification.WorkflowDefinition.Options.UsableAsActiv
 446        await generationStore.IncrementAsync(notification.WorkflowDefinition.TenantId, cancellationToken);
 447    }
 48
 49    /// <inheritdoc />
 50    public async Task HandleAsync(WorkflowDefinitionDeleted notification, CancellationToken cancellationToken)
 51    {
 652        workflowDefinitionActivityRegistryUpdater.RemoveDefinitionFromRegistry(notification.DefinitionId);
 653        await IncrementTenantAndAgnosticGenerationsAsync(tenantAccessor.TenantId, cancellationToken);
 654    }
 55
 56    /// <inheritdoc />
 57    public async Task HandleAsync(WorkflowDefinitionsDeleted notification, CancellationToken cancellationToken)
 58    {
 1859        foreach (string id in notification.DefinitionIds)
 60        {
 661            workflowDefinitionActivityRegistryUpdater.RemoveDefinitionFromRegistry(id);
 62        }
 63
 364        await IncrementTenantAndAgnosticGenerationsAsync(tenantAccessor.TenantId, cancellationToken);
 365    }
 66
 67    /// <inheritdoc />
 68    public async Task HandleAsync(WorkflowDefinitionVersionDeleted notification, CancellationToken cancellationToken)
 69    {
 170        workflowDefinitionActivityRegistryUpdater.RemoveDefinitionVersionFromRegistry(notification.WorkflowDefinition.Id
 171        await generationStore.IncrementAsync(notification.WorkflowDefinition.TenantId, cancellationToken);
 172    }
 73
 74    /// <inheritdoc />
 75    public async Task HandleAsync(WorkflowDefinitionVersionsDeleted notification, CancellationToken cancellationToken)
 76    {
 677        foreach (string id in notification.Ids)
 78        {
 279            workflowDefinitionActivityRegistryUpdater.RemoveDefinitionVersionFromRegistry(id);
 80        }
 81
 182        await IncrementTenantAndAgnosticGenerationsAsync(tenantAccessor.TenantId, cancellationToken);
 183    }
 84
 85    /// <inheritdoc />
 86    public async Task HandleAsync(WorkflowDefinitionVersionsUpdated notification, CancellationToken cancellationToken)
 87    {
 188        var definitions = notification.WorkflowDefinitions.ToList();
 889        foreach (var definition in definitions)
 90        {
 391            await UpdateDefinition(definition.Id, definition.Options.UsableAsActivity);
 92        }
 93
 1194        foreach (var tenantId in definitions.Select(x => x.TenantId).Distinct())
 395            await generationStore.IncrementAsync(tenantId, cancellationToken);
 196    }
 97
 98    private Task UpdateDefinition(string id, bool? usableAsActivity)
 99    {
 100        // Once a workflow has been published, it should remain in the activity registry unless no longer being marked a
 16101        if (usableAsActivity.GetValueOrDefault())
 8102            return workflowDefinitionActivityRegistryUpdater.AddToRegistry(id);
 103
 8104        workflowDefinitionActivityRegistryUpdater.RemoveDefinitionVersionFromRegistry(id);
 8105        return Task.CompletedTask;
 106    }
 107
 108    private async Task IncrementTenantAndAgnosticGenerationsAsync(string? tenantId, CancellationToken cancellationToken)
 109    {
 10110        var normalizedTenantId = tenantId.NormalizeTenantId();
 10111        if (normalizedTenantId != Tenant.AgnosticTenantId)
 9112            await generationStore.IncrementAsync(Tenant.AgnosticTenantId, cancellationToken);
 113
 10114        await generationStore.IncrementAsync(normalizedTenantId, cancellationToken);
 10115    }
 116}