< Summary

Information
Class: Elsa.Http.Services.DefaultRouteTableUpdater
Assembly: Elsa.Http
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Http/Services/DefaultRouteTableUpdater.cs
Line coverage
96%
Covered lines: 49
Uncovered lines: 2
Coverable lines: 51
Total lines: 110
Line coverage: 96%
Branch coverage
78%
Covered branches: 11
Total branches: 14
Branch coverage: 78.5%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
UpdateAsync()100%11100%
AddRoutesAsync()100%22100%
AddRoutesAsync()50%2260%
AddRoutesAsync()100%22100%
RemoveRoutes(...)100%11100%
RemoveRoutes(...)100%11100%
AddRoutesAsync()100%22100%
Filter(...)100%22100%
Filter(...)0%22100%
Filter(...)100%22100%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Http/Services/DefaultRouteTableUpdater.cs

#LineLine coverage
 1using Elsa.Extensions;
 2using Elsa.Http.Bookmarks;
 3using Elsa.Http.Contexts;
 4using Elsa.Workflows;
 5using Elsa.Workflows.Models;
 6using Elsa.Workflows.Runtime;
 7using Elsa.Workflows.Runtime.Entities;
 8using Elsa.Workflows.Runtime.Filters;
 9
 10namespace Elsa.Http.Services;
 11
 12/// <inheritdoc />
 42713public class DefaultRouteTableUpdater(
 42714    IRouteTable routeTable,
 42715    ITriggerStore triggerStore,
 42716    IBookmarkStore bookmarkStore,
 42717    IHttpEndpointRoutesProvider httpEndpointRoutesProvider)
 18    : IRouteTableUpdater
 19{
 20    /// <inheritdoc />
 21    public async Task UpdateAsync(CancellationToken cancellationToken = default)
 22    {
 723        var stimulusName = HttpStimulusNames.HttpEndpoint;
 724        var triggerFilter = new TriggerFilter
 725        {
 726            Name = stimulusName
 727        };
 728        var bookmarkFilter = new BookmarkFilter
 729        {
 730            Name = stimulusName
 731        };
 732        var triggers = (await triggerStore.FindManyAsync(triggerFilter, cancellationToken)).ToList();
 733        var bookmarks = (await bookmarkStore.FindManyAsync(bookmarkFilter, cancellationToken)).ToList();
 34
 735        await AddRoutesAsync(triggers, cancellationToken);
 736        await AddRoutesAsync(bookmarks, cancellationToken);
 737    }
 38
 39    public async Task AddRoutesAsync(IEnumerable<StoredTrigger> triggers, CancellationToken cancellationToken = default)
 40    {
 224941        var httpEndpointTriggers = Filter(triggers).ToList();
 42
 533643        foreach (var trigger in httpEndpointTriggers)
 44        {
 41945            var payload = trigger.GetPayload<HttpEndpointBookmarkPayload>();
 41946            await AddRoutesAsync(payload, trigger.TenantId, cancellationToken);
 47        }
 224948    }
 49
 50    public async Task AddRoutesAsync(IEnumerable<StoredBookmark> bookmarks, CancellationToken cancellationToken = defaul
 51    {
 752        var httpEndpointBookmarks = Filter(bookmarks).ToList();
 53
 1454        foreach (var bookmark in httpEndpointBookmarks)
 55        {
 056            var payload = bookmark.GetPayload<HttpEndpointBookmarkPayload>();
 057            await AddRoutesAsync(payload, bookmark.TenantId, cancellationToken);
 58        }
 759    }
 60
 61    public async Task AddRoutesAsync(IEnumerable<Bookmark> bookmarks, WorkflowExecutionContext workflowExecutionContext,
 62    {
 38963        var httpEndpointBookmarks = Filter(bookmarks).ToList();
 64
 79065        foreach (var bookmark in httpEndpointBookmarks)
 66        {
 667            var payload = bookmark.GetPayload<HttpEndpointBookmarkPayload>();
 668            await AddRoutesAsync(payload, workflowExecutionContext.Workflow.Identity.TenantId, cancellationToken);
 69        }
 38970    }
 71
 72    public void RemoveRoutes(IEnumerable<StoredTrigger> triggers)
 73    {
 113774        var paths = Filter(triggers).Select(x => x.GetPayload<HttpEndpointBookmarkPayload>().Path).ToList();
 112175        routeTable.RemoveRange(paths);
 112176    }
 77
 78    public void RemoveRoutes(IEnumerable<Bookmark> bookmarks)
 79    {
 39180        var paths = Filter(bookmarks).Select(x => x.GetPayload<HttpEndpointBookmarkPayload>().Path).ToList();
 38981        routeTable.RemoveRange(paths);
 38982    }
 83
 84    private async Task AddRoutesAsync(HttpEndpointBookmarkPayload payload, string? tenantId, CancellationToken cancellat
 85    {
 42586        var context = new HttpEndpointRouteProviderContext(payload, tenantId, cancellationToken);
 42587        var routes = await httpEndpointRoutesProvider.GetRoutesAsync(context);
 88
 170089        foreach (var route in routes)
 42590            routeTable.Add(route);
 42591    }
 92
 93    private static IEnumerable<StoredTrigger> Filter(IEnumerable<StoredTrigger> triggers)
 94    {
 337095        var stimulusName = HttpStimulusNames.HttpEndpoint;
 383196        return triggers.Where(x => x.Name == stimulusName && x.Payload != null);
 97    }
 98
 99    private static IEnumerable<StoredBookmark> Filter(IEnumerable<StoredBookmark> bookmarks)
 100    {
 7101        var stimulusName = HttpStimulusNames.HttpEndpoint;
 7102        return bookmarks.Where(x => x.Name == stimulusName && x.Payload != null);
 103    }
 104
 105    private static IEnumerable<Bookmark> Filter(IEnumerable<Bookmark> bookmarks)
 106    {
 778107        var stimulusName = HttpStimulusNames.HttpEndpoint;
 856108        return bookmarks.Where(x => x.Name == stimulusName && x.Payload != null);
 109    }
 110}