< Summary

Information
Class: Elsa.Tenants.DefaultTenantResolverPipelineInvoker
Assembly: Elsa.Tenants
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Tenants/Services/DefaultTenantResolverPipelineInvoker.cs
Line coverage
100%
Covered lines: 19
Uncovered lines: 0
Coverable lines: 19
Total lines: 42
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%
InvokePipelineAsync()100%66100%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Tenants/Services/DefaultTenantResolverPipelineInvoker.cs

#LineLine coverage
 1using Elsa.Common.Multitenancy;
 2using Elsa.Tenants.Options;
 3using Microsoft.Extensions.Logging;
 4using Microsoft.Extensions.Options;
 5
 6namespace Elsa.Tenants;
 7
 8/// <summary>
 9/// Resolves the tenant using a pipeline of resolvers.
 10/// </summary>
 30511public class DefaultTenantResolverPipelineInvoker(
 30512    IOptions<MultitenancyOptions> options,
 30513    ITenantsProvider tenantsProvider,
 30514    IServiceProvider serviceProvider,
 30515    ILogger<DefaultTenantResolverPipelineInvoker> logger) : ITenantResolverPipelineInvoker
 16{
 17    public async Task<Tenant?> InvokePipelineAsync(CancellationToken cancellationToken = default)
 18    {
 30519        var resolutionPipeline = options.Value.TenantResolverPipelineBuilder.Build(serviceProvider);
 30520        var tenants = await tenantsProvider.ListAsync(cancellationToken);
 151621        var tenantsDictionary = tenants.ToDictionary(x => x.Id.NormalizeTenantId());
 30522        var context = new TenantResolverContext(tenantsDictionary, cancellationToken);
 23
 91724        foreach (var resolver in resolutionPipeline)
 25        {
 30526            var result = await resolver.ResolveAsync(context);
 27
 30528            if (result.IsResolved)
 29            {
 30330                var resolvedTenantId = result.ResolveTenantId();
 31
 30332                if (tenantsDictionary.TryGetValue(resolvedTenantId, out var tenant))
 30233                    return tenant;
 34
 135                logger.LogWarning("Tenant with ID {TenantId} was resolved but could not be found in the tenant store.", 
 136                return null;
 37            }
 38        }
 39
 240        return null;
 30541    }
 42}