< Summary

Information
Class: Elsa.Workflows.Runtime.Stores.MemoryBookmarkQueueStore
Assembly: Elsa.Workflows.Runtime
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Workflows.Runtime/Stores/MemoryBookmarkQueueStore.cs
Line coverage
100%
Covered lines: 18
Uncovered lines: 0
Coverable lines: 18
Total lines: 69
Line coverage: 100%
Branch coverage
100%
Covered branches: 4
Total branches: 4
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%
SaveAsync(...)100%11100%
AddAsync(...)100%11100%
FindAsync(...)100%11100%
PageAsync(...)100%11100%
PageAsync(...)100%11100%
FindManyAsync(...)100%11100%
DeleteAsync()100%11100%
Filter(...)100%11100%
get_CurrentTenantId()100%44100%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Workflows.Runtime/Stores/MemoryBookmarkQueueStore.cs

#LineLine coverage
 1using Elsa.Common.Models;
 2using Elsa.Common.Multitenancy;
 3using Elsa.Common.Services;
 4using Elsa.Extensions;
 5using Elsa.Workflows.Runtime.Entities;
 6using Elsa.Workflows.Runtime.Filters;
 7using Elsa.Workflows.Runtime.OrderDefinitions;
 8using JetBrains.Annotations;
 9
 10namespace Elsa.Workflows.Runtime.Stores;
 11
 12/// <inheritdoc />
 13[UsedImplicitly]
 49914public class MemoryBookmarkQueueStore(MemoryStore<BookmarkQueueItem> store, ITenantAccessor? tenantAccessor = null) : IB
 15{
 16    /// <inheritdoc />
 17    public Task SaveAsync(BookmarkQueueItem record, CancellationToken cancellationToken = default)
 18    {
 219        store.Save(record, x => x.Id);
 120        return Task.CompletedTask;
 21    }
 22
 23    public Task AddAsync(BookmarkQueueItem record, CancellationToken cancellationToken = default)
 24    {
 22225        store.Add(record, x => x.Id);
 11126        return Task.CompletedTask;
 27    }
 28
 29    /// <inheritdoc />
 30    public Task<BookmarkQueueItem?> FindAsync(BookmarkQueueFilter filter, CancellationToken cancellationToken = default)
 31    {
 1432        var entity = store.Query(query => Filter(query, filter)).FirstOrDefault();
 733        return Task.FromResult(entity);
 34    }
 35
 36    public Task<Page<BookmarkQueueItem>> PageAsync<TOrderBy>(PageArgs pageArgs, BookmarkQueueItemOrder<TOrderBy> orderBy
 37    {
 31238        var entities = store.Query(query => query.WhereVisibleToTenant(CurrentTenantId).OrderBy(orderBy)).Paginate(pageA
 15639        return Task.FromResult(entities);
 40    }
 41
 42    public Task<Page<BookmarkQueueItem>> PageAsync<TOrderBy>(PageArgs pageArgs, BookmarkQueueFilter filter, BookmarkQueu
 43    {
 13444        var entities = store.Query(query => Filter(query, filter).OrderBy(orderBy)).Paginate(pageArgs);
 6745        return Task.FromResult(entities);
 46    }
 47
 48    public Task<IEnumerable<BookmarkQueueItem>> FindManyAsync(BookmarkQueueFilter filter, CancellationToken cancellation
 49    {
 20450        var entities = store.Query(query => Filter(query, filter)).AsEnumerable();
 10251        return Task.FromResult(entities);
 52    }
 53
 54    /// <inheritdoc />
 55    public async Task<long> DeleteAsync(BookmarkQueueFilter filter, CancellationToken cancellationToken = default)
 56    {
 17757        var ids = (await FindManyAsync(filter, cancellationToken)).Select(x => x.Id);
 8858        return store.DeleteMany(ids);
 8859    }
 60
 61    /// <remarks>
 62    /// Ambient tenant is applied here rather than in <see cref="BookmarkQueueFilter.Apply"/>.
 63    /// EF owns that via <c>SetTenantIdFilter</c> / <c>IgnoreQueryFilters</c>; Memory must compensate.
 64    /// </remarks>
 65    private IQueryable<BookmarkQueueItem> Filter(IQueryable<BookmarkQueueItem> query, BookmarkQueueFilter filter) =>
 17666        filter.Apply(query.WhereVisibleToTenant(CurrentTenantId, filter.TenantAgnostic));
 67
 33268    private string CurrentTenantId => tenantAccessor?.TenantId ?? Tenant.DefaultTenantId;
 69}